CSSの世界へようこそ!フロントエンドの現場で長年コードを書いてきましたが、今日はCSSの中でも少しだけ「ひねくれ者」だけど、知ると最高に頼りになるやつ、`:nth-last-child()` についてお話ししますね。
「前から数える」のは簡単だけど、「後ろから数える」ってなんだか少し想像しにくいですよね。でも大丈夫。身近な例えと一緒に、この子の使い方をマスターしていきましょう!
—
:nth-last-child() ってどんな子?
一言でいうと、「行列の最後尾から数えて何番目?」を指定できる魔法の杖です。
普通、Webサイトのリストやカードを並べる時、私たちは「左から1番目、2番目…」と考えがちですよね。でも、例えば「このリストの、最後から3つ目だけ色を変えたい!」というシチュエーションが、実は現場では頻繁に起こるんです。
お買い物のレジに例えてみよう
想像してみてください。スーパーの長いレジの行列です。
- `nth-child(1)` は、先頭の人ですね。
- では、`nth-last-child(1)` は誰でしょう? そう、一番最後に並んでいる人です。
前から数えると「今何人が並んでいるか」を把握しないといけませんが、後ろから数えるなら「最後尾の人」は常に最後尾ですよね。この「合計人数がわからなくても、後ろから指定できる」という強みが、`:nth-last-child()` の最大の魅力なんです。
—
実際に書いてみよう
さっそく、コードを見てみましょう。リストの「最後から2番目」を赤くする例です。
/ リストの中の「後ろから数えて2番目」の要素だけを赤くする /
li:nth-last-child(2) {
color: red;
font-weight: bold;
}
- 商品A
- 商品B
- 商品C(最後から3番目)
- 商品D(最後から2番目・ここが赤くなる!)
- 商品E(最後から1番目)
どうでしょう? `li` の数が増えたり減ったりしても、常に「最後から2番目」が自動的に赤くなります。もしこれを前から指定しようとすると、「全部で何個あるか」を数えて計算しなきゃいけませんよね。そんな面倒なこと、コンピュータに任せてしまいましょう!
—
よくある「つまずきポイント」
初心者の頃、僕もここで何度も躓きました。皆さんに同じ苦労はさせたくないので、注意点をシェアしますね。
1. 「インデックス」は1から始まる
プログラミングの世界では「0から数える」ことが多いですが、CSSの擬似クラスは「1から数える」のがルールです。
- `nth-last-child(0)` と書いても、何も起きません。「最後から0番目」なんて存在しませんからね。
2. 要素の種類に注意!
このセレクタは「その親の中にある要素」を純粋に数えます。もしリストの中に `
`)が混ざっていると、それらも含めて数えてしまうことがあります。
「リストの最後から…」と決め打ちしたいときは、構造をシンプルに保つか、クラス名を工夫するのが現場の知恵です。
—
現場で役立つ「あ、なるほど!」な使い方
最後に、プロの現場でよく使う「ちょっと気の利いた」使い方を紹介します。
「リストが3つ以上あるときだけ、最後の要素に余白をつけない」
これ、よくあるデザインの悩みですよね。そんな時もこれ一つで解決です。
/ 最後の要素(last-child)に下の余白を消す設定 /
li:last-child {
margin-bottom: 0;
}
/ 応用:最後から3つ目以降の要素には、特定のスタイルを当てる /
li:nth-last-child(n+3) {
border-bottom: 1px solid #ccc;
}
`n+3` という書き方は、「3番目以降(最後から数えて3つ目、4つ目…)」という意味になります。これを使えば、スマホやPCで要素数が変わっても、デザインを崩さず綺麗に表示させることができます。
—
最後に:完璧じゃなくていいんです
CSSを書いていると、「あれ?思った通りにならないな」と悩む夜もあるはずです。でも、それはあなたが真剣に向き合っている証拠。`:nth-last-child()` も、最初は難しく感じるかもしれませんが、まずは「後ろから数えるやつだ!」と思い出すだけで十分です。
触ってみて、失敗して、また触ってみる。その繰り返しの中で、いつの間にか「ああ、ここは `nth-last` が使えるな」と直感的にわかるようになります。
焦らず、楽しんで書いていきましょうね。あなたのコードが、世界を少しだけ便利で美しくしますように!応援しています。

コメント