n番目の要素を選ぶ :nth-childと:nth-of-type、
似ていますがちがいはどこにあるのでしょうか?
今回はCSSの2つの擬似クラス
:nth-childと:nth-of-typeのちがいをまとめてみたいと思います。
nth-childとnth-of-typeのちがい
MDNでの定義
まずMDN web docsに掲載されている、それぞれの説明を比較してみたいと思います。
CSS の
:nth-child()
擬似クラスは、兄弟要素のグループの中での位置に基づいて選択します。
CSS の
:nth-of-type()
疑似クラスは、兄弟要素のグループの中で指定された型の要素を、位置に基づいて選択します。
内容は似ていますが、
定義が異なる「指定された型の要素を」というところがポイントになりそうですね。
それぞれの特徴
上記を踏まえて、このようにまとめられるのではないかと思います。
- nth-child:
兄弟要素であれば、指定した特定の要素以外でもカウントの対象になってしまう。 - nth-of-type:
兄弟要素の中でも指定した特定の要素しかカウントせず、異なる要素はカウントの対象外となる
では具体例を用いて比較してみましょう。
具体例で比較してみよう
下記のデモを作ってみました。
h2タグで「nth-childとnth-of-typeのちがい」
続いてpタグで「○つめのパラグラフ」と5回続いています。
h2タグとpタグは兄弟要素で、またdivタグの子要素となっています。
この状態で、p:nth-child(2)とp:nth-of-type(2)とどちらも2番目を指定した場合、
どの要素が当てはまるのでしょうか。
See the Pen
eYpoKRr by notebook (@orange-notebook)
on CodePen.
答えは、p:nth-child(2)→黄色いハイライトの「1つめのパラグラフ」、
p:nth-of-type(2)→オレンジのハイライトの「2つめのパラグラフ」となりました。
どうしてでしょうか?
まずp:nth-child(2)ですが、nth-childはpと指定した要素と異なる要素でもカウントの対象になるので、h2からカウントが始まります。
そのため、h2がnth-childの1番目、次の1つ目のpタグ「1つめのパラグラフ」が2番目となります。
一方p:nth-of-typeは、指定しているpタグの順番でカウントするので、
h2タグが兄弟要素の中では1番はじめにあっても飛ばされます。
そのため「1つめのパラグラフ」がnth-of-typeの1番目、「2つめのパラグラフ」が2番目となります。
以上、:nth-childと:nth-of-typeの2つのちがいについてでした。