🍋
:first-childと:first-of-type、:last-childと:last-of-typeの違い
今日は曖昧に覚えがちな、
:first-child
と:first-of-type
、:last-child
と:last-of-type
の違いについてまとめました。
:first-childと:first-of-typeの違い
:first-child
<div>
<h2>芥川龍之介</h2>
<p>蜘蛛の糸</p>
<h2>坂口安吾</h2>
<p>桜の森の満開の下</p>
</div>
h2:first-child {
color: red;
}
これだと何も問題なく最初のh2要素が赤色になってますよね。
しかし、問題は次です。
<div>
<h1>文豪紹介</h1>
<h2>芥川龍之介</h2>
<p>蜘蛛の糸</p>
<h2>坂口安吾</h2>
<p>桜の森の満開の下</p>
</div>
h2:first-child {
color: red;
}
h1が追加され、h2が一番最初の子要素ではなくなった途端、
CSSが効かなくなりました。
:first-child
は指定した要素(今回ならh2)が一番最初の子要素である必要があります。
:first-of-type
それに比べ、:first-of-type
は指定した要素が一番最初でなくても有効です。
つまり、h2が子要素の中で一番でなくても、h2の中で一番最初の要素にCSSを適用します。
<div>
<h1>文豪紹介</h1>
<h2>芥川龍之介</h2>
<p>蜘蛛の糸</p>
<h2>坂口安吾</h2>
<p>桜の森の満開の下</p>
</div>
h2:first-of-type {
color: red;
}
:last-childと:last-of-typeの違い
となると、:last-child
と:last-of-type
も同様です。
:last-child
<div>
<h1>文豪紹介</h1>
<h2>芥川龍之介</h2>
<h2>坂口安吾</h2>
</div>
h2:last-child {
color: red;
}
指定したh2が最後の子要素ならCSSが適用されますが、
<div>
<h1>文豪紹介</h1>
<h2>芥川龍之介</h2>
<p>蜘蛛の糸</p>
<h2>坂口安吾</h2>
<p>桜の森の満開の下</p>
</div>
h2:last-child {
color: red;
}
h2が最後の子要素でなければ適用されません。
:last-of-type
<div>
<h1>文豪紹介</h1>
<h2>芥川龍之介</h2>
<p>蜘蛛の糸</p>
<h2>坂口安吾</h2>
<p>桜の森の満開の下</p>
</div>
h2:last-of-type {
color: red;
}
:last-of-type
なら、h2の中で一番最後の要素にCSSを適用するのでバッチリです。
まとめ
これらの違いを見ると、基本的には、:first-of-type
と:last-of-type
を使用するのがわかりやすくてベタですね。
違いを知っておくと思わぬ挙動に対して困らずに済みます。
気になったらすぐ調べる癖をつけましょう!
Discussion