コーディングをしているとよくお世話になるfirst-childとfirst-of-typeセレクタ。
ただfirst-childとfirst-of-typeの違いって最初のうちってよくわからないですよね。
今回はその2つの違いについてお話しようと思います。
目次
first-childが効かない?そんな時はfirst-of-typeで!
例えば上の画像のようにpタグの中で、1番最初にあるものに色を付けたいとします。とりあえずHTMLは以下のような感じです。
HTML
1 2 3 4 5 6 7 8 |
<div id="c01" class="wrap"> <h1>タイトル1</h1> <p>1番最初のpテキスト</p> <p>2番目のpテキスト</p> <h1>タイトル2</h1> <p>最後のpテキスト</p> <h1>タイトル3</h1> </div> |
このときなんとなく1番最初のpタグに色を付けたいからfirst-childで~と思ってしまう方も多いと思うのですが…
1 2 3 |
#c01 p:first-child{ color: #FF0004; } |
はい、色が付きません。
というわけで今回の場合、first-of-typeセレクタを使います。
囲んでいる要素のなかでの順番の数え方が異なる
なぜ今回はfirst-of-typeを使用するのかというと、first-childとfirst-of-typeでは囲んでいる要素のなかでの順番の数え方が異なるからです。例えば今回であれば囲っているc01というIDのなかで
first-childの場合
⇒h1も含め上から何番目か見る。今回の場合は、最初のpタグはnth-child(2)での指定になる。first-of-typeの場合
⇒h1は含めないで上から何番目か見る。pの中で1番最初に対しては、first-of-typeで指定できる。というようになるんですね。
ということでfirst-of-typeで色を付けてみましょう。
1 2 3 |
#c01 p:first-of-type{ color: #FF0004; } |
はい!無事色が付きました。
DEMO
ちなみにlast-childとlast-of-typeセレクタも同じような扱いになります。
最初は戸惑うかもしれませんがわかると便利な要素ですので、ぜひうまく使い分けしてみてください!