nth-of-type はタグの種類ごとに N番目の要素
◆ nth-of-type は マッチした要素の N 番目というセレクタではありません
◆ nth-child では 兄弟要素の N 番目だったのが p や span などのタグの種類ごとに数えられるようになったものです
◆ div:nth-of-type(2) だと 2 番目の div
◆ .active:nth-of-type(2) だといずれかのタグの 2 番目で active クラスを持つもの
◆ nth-child では 兄弟要素の N 番目だったのが p や span などのタグの種類ごとに数えられるようになったものです
◆ div:nth-of-type(2) だと 2 番目の div
◆ .active:nth-of-type(2) だといずれかのタグの 2 番目で active クラスを持つもの
わかりやすく説明しているところがなくて これまで ○○:nth-of-type(1) と書くと ○○ に一致するものの中で一番最初のものになると思っていました
ですが 実際は div や p などのタグの種類ごとに N 番目の要素となります
.active:nth-child(1) と .active:nth-of-type(1) に before after を使って 赤と青で文字を表示しました
一番上の ul では ひとつめの要素で active クラスがついているのでどちらもついています
2つめの ul では 2 つめの li が一番最初の active クラスですが どちらもついていません
最後の div では それぞれ別の要素なので全部に nth-of-type(1) がマッチしています
p:nth-of-type(3) みたいな例が多いので マッチしたものの中で N 番目と思ってしまいがちですが 実際はタグの種類ごとに数えられています
「active クラスがついている最初の要素」 というのは css では無理そうです
jQuery と違い :not で 「li.active:not(.active~.active)」 のような使い方はできないですし
ですが 実際は div や p などのタグの種類ごとに N 番目の要素となります
<style>
.active:nth-child(1):before {content: "nth-child(1)";color: red;}
.active:nth-of-type(1):after {content: "nth-of-type(1)";color: blue;}
</style>
<ul>
<li class="active"></li>
<li></li>
<li></li>
</ul>
<ul>
<li></li>
<li class="active"></li>
<li></li>
</ul>
<br>
<div>
<span class="active">(span)</span>
<p class="active">(p)</p>
<em class="active">(em)</em>
</div>
.active:nth-child(1):before {content: "nth-child(1)";color: red;}
.active:nth-of-type(1):after {content: "nth-of-type(1)";color: blue;}
</style>
<ul>
<li class="active"></li>
<li></li>
<li></li>
</ul>
<ul>
<li></li>
<li class="active"></li>
<li></li>
</ul>
<br>
<div>
<span class="active">(span)</span>
<p class="active">(p)</p>
<em class="active">(em)</em>
</div>
(span)
(p)
(em).active:nth-child(1) と .active:nth-of-type(1) に before after を使って 赤と青で文字を表示しました
一番上の ul では ひとつめの要素で active クラスがついているのでどちらもついています
2つめの ul では 2 つめの li が一番最初の active クラスですが どちらもついていません
最後の div では それぞれ別の要素なので全部に nth-of-type(1) がマッチしています
p:nth-of-type(3) みたいな例が多いので マッチしたものの中で N 番目と思ってしまいがちですが 実際はタグの種類ごとに数えられています
「active クラスがついている最初の要素」 というのは css では無理そうです
jQuery と違い :not で 「li.active:not(.active~.active)」 のような使い方はできないですし