1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[CSS] `:last-of-type` は使えない / `:nth-last-child` が便利

Last updated at Posted at 2025-01-03

擬似クラス :last-of-type は以前からセレクタとして使えましたが、これは divsection などの特定のタグにしか適用できません。

セレクタにクラスを追加したとしても対象は大きく変わらず、
親要素内の一番最後のタグにしか適用されません。

<article>
  <header>header</header>    <!-- header:last-of-type -->

  <section>section</section>
  <section>section</section>
  <section>section</section> <!-- section:last-of-type -->

  <div class="foo">div.foo</div>
  <div class="foo">div.foo</div>
  <div class="foo">div.foo</div> <!-- 特定不可 -->

  <div>div</div>
  <div>div:last-child</div> <!-- div:last-of-type -->
</article>

上記の「特定不可」としている箇所は後続に同じ div タグが存在するため .foo:last-of-type を利用できません。
この代替策として :nth-last-child(n of .foo) が利用できます。

以下のスタイルで :nth-last-child の文字色の赤は特定不可とした箇所に適用されます。
逆に :last-of-type の緑の罫線はどこにも適用されません。

.foo {
  :nth-last-child(1 of &) { color: red }
  &:last-of-type { border: solid 1px green }
}

:nth-last-child(n of x)x の部分にはタグでもセレクタでも自由に指定でき、タグを指定する場合も :last-of-type と同様な使い方ができます。
また、:first-of-type も同様に :nth-child で代替できます。

Can I use...MDN を参照する限り、ブラウザ対応も概ね問題なさそうです👌

事の発端

特定条件の最後の要素のスタイルを変更したかった事と、過去に :last-child などの記述で :last-of-type に書き換えを推奨されるケースが有った記憶で、:last-of-type への切り替えメリットが感じられず調べていた所でした。

Stylelint のワーニングかと勘違いしてましたが、どうも emotion の SSR のワーニングだったようです。

:last-of-type では要素の追加に耐えられないケースが多いと思いますが、:nth-last-child への変更は要素追加にも強く、切り替えメリットも感じます。
emotion の件は未確認ですが、もしワーニングが解消するようであれば :nth-last-child への書き換えがお勧めです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?