皆さん、こんにちは! 最前線のWeb開発でCSSの設計を何年も続けてきた私から、今日は皆さんのCSSライフを一段と豊かにする、とっておきのワザをお伝えしたいと思います。
CSSって、最初は「なんだか呪文みたい…」と感じるかもしれませんね。でも大丈夫。一つ一つの呪文(セレクタ)には、ちゃんと意味があって、私たちが頭の中で思い描くデザインを、ブラウザに「こうしてね!」と伝えるための、とっても賢い言葉なんです。
今日は、そんな賢い言葉の一つ、特に「後ろから数える」という、ちょっとニザい(粋な)セレクタに焦点を当ててみましょう。その名もズバリ、`nth-last-child()` 疑似クラス!
CSSの「後ろから数える魔法」:`:nth-last-child()` とは?
私たちは普段、何かを数えるとき、たいてい「前から」数えますよね。
例えば、お店のレジに並んだとき、「前から3番目の人が次だね」とか。
小学校の運動会で「前から2番目の子が赤組の旗持ちさん」とか。
CSSにも、同じように「前から数える」セレクタがあります。それが以前、少し触れたかもしれない`:nth-child()` です。
でも、世の中には「後ろから数える」方が便利な場面って、意外とたくさんあると思いませんか?
例えば、電車に乗ったとき、一番後ろの車両から数えて2番目の車両に乗りたいとか。
本棚にずらっと並んだ本の中から、「右から3番目の本が探してるやつだ!」とか。
そう、`:nth-last-child()` は、まさにこの「後ろから数える」という発想をCSSにもたらしてくれる、縁の下の力持ちのようなセレクタなんです。
テーマの概要を、もっと身近に例えるなら…
あなたがスーパーで、美味しそうなフルーツがずらっと並んだ棚を見ていると想像してください。
「前から数えて3番目のリンゴ」もいいけれど、
「棚の右端(つまり最後)から数えて2番目のリンゴ」を選びたい時ってありますよね?
もしかしたら、右端のリンゴは少し傷んでいるかもしれないし、でも右端から2番目のリンゴは、一番見栄えがいいかもしれない。
`:nth-last-child()` は、まさにこの「棚の右端(最後)から数えて何番目か」を指定するセレクタなんです。
これを使うと、要素の数がコロコロ変わるような状況でも、常に「最後から数えて」柔軟にスタイルを適用できるようになります。これって、Webサイトのデザインでは、本当に重宝するんですよ!
なぜ「後ろから数える」必要があるの? 実は超便利!
「なんでわざわざ後ろから数えるの?前から数える `:nth-child()` じゃダメなの?」
そう思う方もいるかもしれませんね。これが実は、Web制作の現場では「なるほど!」となる瞬間が多々あるんです。
想像してみてください。
あなたがECサイトの商品リストを作っているとします。このリストは、売れ行きによって商品の数が変わることがよくありますよね。
1. 「最後の要素にだけ、少し特別なスタイルを当てたい」
- 例えば、リストの最後の要素だけに下線を引きたくない、とか。
- 「最後の商品だけ、送料無料のマークをつけたい」とか。
- もし商品が追加されたり削除されたりしたら、前から数える `:nth-child()` では、指定する数字をいちいち変更しなくちゃいけません。でも、`:nth-last-child(1)` であれば、常に「最後の要素」にスタイルを当てられます。これ、便利でしょ?
2. 「末尾から特定の数の要素にスタイルを適用したい」
- 例えば、新しいコメントがどんどん追加される掲示板で、最新の3件だけ背景色を変えて目立たせたい、なんて時。
- サイトのフッターにある、最近のブログ記事リストで、最新の2件だけアイコンを付けたい、なんて時。
- こんな時も、`:nth-last-child()` があれば、リストの総数を気にせず、常に「最後から何番目まで」という指定ができるんです。
どうです? ちょっとワクワクしてきませんか?
それでは、早速その使い方を見ていきましょう!
`:nth-last-child()` の使い方をマスターしよう! 基本の書式
`:nth-last-child()` の使い方は、基本的な考え方は`:nth-child()`とそっくりです。
書式はこんな感じになります。
セレクタ:nth-last-child(引数) {
/ スタイル /
}
この「引数」の部分に、どんな値を指定するかで、適用される要素が変わってきます。一つずつ見ていきましょう!
1. 特定の数字で指定する
一番シンプルで分かりやすいのが、直接数字を指定する方法です。
これは「最後から数えて●番目の要素」という意味になります。
りんご
みかん
バナナ
いちご
ぶどう
/ CSSの例 /
.fruit-shelf p:nth-last-child(1) {
/ 最後から数えて1番目(つまり一番最後の要素)に適用 /
background-color: lightcoral; / 薄い赤色 /
color: white;
padding: 5px;
}
.fruit-shelf p:nth-last-child(3) {
/ 最後から数えて3番目の要素に適用 /
border: 2px solid darkgreen; / 濃い緑の枠線 /
padding: 5px;
}
実行結果のイメージ:
- 「ぶどう」(最後から1番目)が薄い赤色に。
- 「バナナ」(最後から3番目)が濃い緑の枠線に。
これで、要素の順番が変わっても、常に「最後から1番目」や「最後から3番目」の要素にスタイルが当たります。まさに魔法のようですね!
2. `odd` (奇数) や `even` (偶数) で指定する
「最後から数えて奇数番目の要素に適用したい!」とか、「最後から数えて偶数番目の要素に適用したい!」という場合も、とても簡単に指定できます。
- ユーザーAさんのコメント
- ユーザーBさんのコメント
- ユーザーCさんのコメント
- ユーザーDさんのコメント
- ユーザーEさんのコメント
/ CSSの例 /
.comment-list li:nth-last-child(odd) {
/ 最後から数えて1番目、3番目、5番目…(奇数)の要素に適用 /
background-color: #e0f7fa; / 水色の背景 /
}
.comment-list li:nth-last-child(even) {
/ 最後から数えて2番目、4番目、6番目…(偶数)の要素に適用 /
font-weight: bold; / 太字 /
}
実行結果のイメージ:
- 「ユーザーEさん」(最後から1番目)、「ユーザーCさん」(最後から3番目)、「ユーザーAさん」(最後から5番目)が水色の背景に。
- 「ユーザーDさん」(最後から2番目)、「ユーザーBさん」(最後から4番目)が太字に。
コメントリストなどで、新しいコメント(最後に追加される)と古いコメントを交互に色分けしたい、なんて時にも便利ですね!
3. `n` を使った応用(`an+b` 形式)
さあ、ここがCSSの構造的疑似クラスの醍醐味とも言える部分です。
`n` というキーワードを使うと、もっと柔軟な指定ができるようになります。
「え、なんか難しそう…」と感じたあなた、大丈夫ですよ!
私も最初はそう思いました。でも、仕組みがわかれば、きっと「なるほど!」ってなりますから。
この `n` は、CSSが自動的に `0, 1, 2, 3, …` という整数を順番に代入してくれる、特別な変数だと思ってください。
そして、その`n`に数字をかけたり、足したり引いたりすることで、特定のパターンを作り出すことができます。
基本的な書式は `an+b` もしくは `an-b` の形です。
- `a` と `b` には数字が入ります。
- `n` は `0` から始まる整数 (`0, 1, 2, 3, …`) です。
例えば、`2n` と書けば、`n` が `0` のとき `0`、`1` のとき `2`、`2` のとき `4`、`3` のとき `6`…となり、`0, 2, 4, 6, …` という偶数番目の要素が選ばれます。(ただし、CSSのインデックスは1から始まるので、実際には2番目、4番目、6番目…の偶数番目の要素が選ばれます)
これを`:nth-last-child()` で使うとどうなるか、見てみましょう。






/ CSSの例 /
.gallery img:nth-last-child(2n) {
/ 最後から数えて、2番目、4番目、6番目…(偶数)の要素に適用 /
/ n=0 のとき 0 -> 無視される(CSSのインデックスは1から) /
/ n=1 のとき 2 -> 2番目 /
/ n=2 のとき 4 -> 4番目 /
/ n=3 のとき 6 -> 6番目 /
border: 3px dashed blue; / 青い点線の枠線 /
}
.gallery img:nth-last-child(3n+1) {
/ 最後から数えて、1番目、4番目、7番目… の要素に適用 /
/ n=0 のとき 30+1 = 1 -> 1番目 /
/ n=1 のとき 31+1 = 4 -> 4番目 /
/ n=2 のとき 32+1 = 7 -> 7番目 /
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3); / 影をつける /
}
.gallery img:nth-last-child(-n+3) {
/ 最後から数えて、3番目、2番目、1番目 の要素に適用 /
/ n=0 のとき -0+3 = 3 -> 3番目 /
/ n=1 のとき -1+3 = 2 -> 2番目 /
/ n=2 のとき -2+3 = 1 -> 1番目 /
/ n=3 のとき -3+3 = 0 -> 無視される /
/ つまり、最後から3つ目までの要素に適用したい時に便利! /
transform: scale(1.05); / 少し大きく表示 /
transition: transform 0.3s ease; / なめらかなアニメーション /
}
実行結果のイメージ:
- `2n`: 最後から2番目 (`img6.jpg`)、4番目 (`img4.jpg`)、6番目 (`img2.jpg`) に青い点線枠。
- `3n+1`: 最後から1番目 (`img7.jpg`)、4番目 (`img4.jpg`)、7番目 (`img1.jpg`) に影。
- `-n+3`: 最後から3番目 (`img5.jpg`)、2番目 (`img6.jpg`)、1番目 (`img7.jpg`) が少し大きく表示。
特に最後の `-n+3` は、「最後から数えて最初の3つの要素にスタイルを当てたい」という時に、とってもスマートに書けるワザです。
例えば、新着記事のプレビューで、最新の3件だけ目立たせたい、なんて時に使えますよね。
`:nth-last-child()` と `:nth-child()` の違いを理解しよう
ここで、多くの人が少しだけ混乱しやすいポイントをお話ししましょう。
`:nth-last-child()` と、以前に触れたかもしれない `:nth-child()` は、何が違うのでしょうか?
答えはシンプルです。「どちらの方向から数え始めるか」です。
- `:nth-child(n)`: 親要素の中の最初(一番上、一番左)から数えて `n` 番目の要素にスタイルを適用します。
- `:nth-last-child(n)`: 親要素の中の最後(一番下、一番右)から数えて `n` 番目の要素にスタイルを適用します。
イメージしてみてください。
あなたは映画館にいます。
「前から3番目の席に座ってね」と言われたら、スクリーンの前から数えますよね。これが `:nth-child()`。
「後ろから3番目の席に座ってね」と言われたら、入り口に近い一番後ろの列から数えますよね。これが `:nth-last-child()`。
どちらも「親要素の中での順番」を数えているという点は同じですが、その「数え始めの視点」が真逆なんです。
この違いをしっかり理解しておくと、CSSの設計がグッと楽になりますよ。
知っておくとさらに「なるほど!」:兄弟要素について
`:nth-last-child()` も、他の構造的疑似クラスと同様に、「親要素の直下にある兄弟要素の中で何番目か」を数えます。
これはどういうことかというと、例えばこんなHTMLがあったとします。
タイトル
最初の段落です。
小さな情報
真ん中の段落です。
最後の段落です。
ここで、`p:nth-last-child(1)` と指定した場合、どの要素が選ばれると思いますか?
「最後の段落です。」の`
`タグが選ばれる、と思った方は正解です!
なぜなら、その`
`タグは、親要素である`
もし「`
`タグの中で、最後から1番目の`
`タグ」を選びたい場合は、`:nth-last-of-type()` という別のセレクタを使います。
今日は深掘りしませんが、「そういうものもあるんだな」と頭の片隅に置いておくと、いつか役に立つ日が来るでしょう。
まとめ:`:nth-last-child()` でCSSの可能性を広げよう!
今日は、`:nth-last-child()` という、ちょっとニザいけど超便利なCSSセレクタについて深掘りしてきました。
- `:nth-last-child()` は、親要素の最後から数えて特定の順番の要素にスタイルを適用するセレクタ。
- 特定の数字 (`:nth-last-child(3)`) や、`odd`/`even`、そして `n` を使った `an+b` 形式で柔軟に指定できる。
- 要素の数が変動するようなリストやグリッドで、「最後から数える」という視点が、デザインの柔軟性を格段に高めてくれる。
- `:nth-child()` とは「数え始める方向」が逆!
CSSは、ただ見た目を整えるだけでなく、要素の並びや構造そのものに「意味」を持たせてスタイルを適用できる、本当に奥深い言語です。
今回学んだ `:nth-last-child()` は、その奥深さに触れる第一歩。
最初は戸惑うこともあるかもしれません。私も現場で、時に頭を抱えながらCSSと向き合ってきましたから、その気持ち、よく分かります。でも、実際にコードを書いて、ブラウザで動きを確認するたびに、きっと「なるほど!」という感動が待っています。
ぜひ、今日学んだことを活かして、皆さんのWebサイトやアプリケーションを、もっともっと魅力的に、そして使いやすくしてみてください。
CSSの学習は、Web制作の旅路において、きっと強力な武器となるはずです。応援していますよ!

コメント