何番目の設定。nth-childとnth-of-typeの違いなど
- 要素に対して1番目だけは文字を大きくして、それ以外は小さくしよう。
- 最後だけはラインがいらない。
- 偶数と奇数で背景色を変えるなどなど。
●番目の要素に設定を加えたいケースがあります。一昔前は、classをせっせと付与していましたが、今では「nth-of-type」などであっさりと設定できてしまうようになりました。
●番目の要素に設定を加えたいケースがあります。一昔前は、classをせっせと付与していましたが、今では「nth-of-type」などであっさりと設定できてしまうようになりました。
この記事は「2021年01月06日」に書かれた記事です
最初にざっくり説明すると
| nth-child | 全体の何番目の要素かを指定 |
|---|---|
| nth-of-type | 同一要素の何番目かを指定 |

※samp-nthは仮のclass名(任意)です。
ちょっとしたキャッチコピー
ここを指定したい
どちらも「.samp-nth」の「pタグ」に対して背景色を設定していますが、背景色が指名しているpタグは別々です。一体どういうことなのか見てみましょう
HTML
<section class="samp-nth">
<h1>見出し</h1>
<p>ちょっとしたキャッチコピー</p>
<p>ここを指定したい</p>
</section>
CSS
.samp-nth p:nth-child(2) {background-color: #DDD; }
.samp-nth p:nth-of-type(2) { background-color: #FFF; }
nth-childは「全体の何番目の要素か」という指定でした。
つまり、「.samp-nth」の中の「2番目」の要素となるPタグに対して、背景色を#DDD(グレー)を変えてほしいという指定になっています。
1番目の要素は<h1>
2番目の要素は「ちょっとしたキャッチコピー」の<p>タグとなるため、背景色が#DDD(グレー)となっています。もし、2番目の要素にあたる箇所にpタグがなかった場合、設定は無視されます。
HTML <section class="samp-nth"> <h1>見出し</h1> <h2>見出し</h2>←2番目は<p>タグではないので背景色は変わらない <p>ちょっとしたキャッチコピー</p>←3番目の要素の<p>タグとなるため背景色は変わらない <p>ここを指定したい</p> </section> CSS .samp-nth p:nth-child(2) {background-color: #DDD; }
nth-of-typeは「同一要素の何番目か」を指定でした。
つまり「.samp-nth」の領域内にあるタグ(上記の場合「p」タグ)のうち、2番目のpタグという指示になるので「ここを指定したい」という文言が設定した#FFF(白背景)に変更されています。
nth-childとnth-of-typeの違いを確認したところで、よく使う設定を見てみましょう。
nth-child(1)やnth-of-type(1)でも設定としてはかかりますが、一番目については「first-child」「first-of-type」が用意されています。
:first-child :first-of-type
ちょっとしたキャッチコピー
ここを指定したい
HTML
<section class="samp-nth02">
<h2>見出し</h2>
<p>ちょっとしたキャッチコピー</p>
<p>ここを指定したい</p>
</section>
CSS
.samp-nth02 p:first-child {background-color: #DDD; }
.samp-nth02 p:first-of-type{background-color: #FFF; }
一番目の要素が<p>タグではなく<h2>のため無視されています。
HTML
<section class="samp-nth02b">
<h2>見出し</h2>
<p>ちょっとしたキャッチコピー</p>
<p>ここを指定したい</p>
</section>
CSS
.samp-nth02b h2:first-child {background-color: #DDD; }
ちょっとしたキャッチコピー
ここを指定したい
1番目の要素である<h2>に背景色を設定したので、背景色がグレーに変わりました。
Pタグの最初の要素に、背景色#FFF(白)がかかっています。
※以下同じような説明が続くため、割愛します。使い方は同じです。
:last-child :last-of-type
:nth-child(odd) :nth-of-type(odd)
:nth-child(even) :nth-of-type(even)
:nth-child(n) :nth-of-type(n)
ここは少し説明を加えたいと思います。
たとえば、3の倍数の時だけ(3 6 9 12…)指定したい場合は下記のように設定します。
:nth-child(3n) :nth-of-type(3n)
html
<ul class="samp-nth03">
<li>1番目の要素</li>
<li>2番目の要素</li>
<li>3番目の要素</li>
<li>4番目の要素</li>
<li>5番目の要素</li>
<li>6番目の要素</li>
<li>7番目の要素</li>
<li>8番目の要素</li>
<li>9番目の要素</li>
</ul>
CSS
ol.samp-nth03 li:nth-of-type(3n) {background-color: #DDD; }
:nth-child(3n+1)
指定したタグを、1から3つおきに設定がかかります。
html
<ul class="samp-nth04">
<li>1番目の要素</li>
<li>2番目の要素</li>
<li>3番目の要素</li>
<li>4番目の要素</li>
<li>5番目の要素</li>
<li>6番目の要素</li>
<li>7番目の要素</li>
<li>8番目の要素</li>
<li>9番目の要素</li>
</ul>
CSS
ul.samp-nth04 li:nth-of-type(3n+1) {background-color: #DDD; }
:nth-child(3n+2)
と設定するとどうなるのでしょうか。
html
<ul class="samp-nth05">
<li>1番目の要素</li>
<li>2番目の要素</li>
<li>3番目の要素</li>
<li>4番目の要素</li>
<li>5番目の要素</li>
<li>6番目の要素</li>
<li>7番目の要素</li>
<li>8番目の要素</li>
<li>9番目の要素</li>
</ul>
CSS
ul.samp-nth05 li:nth-of-type(3n+2) {background-color: #DDD; }
2から始まる3の倍数、2、5、8の背景色が変わりました。

ということもあるかもしれません。そんな時は下記のように設定します。
:nth-last-child(2) :nth-last-of-type(2)
もっと考えると、後ろから3番おきにということもあるかもしれません。
すみません。ちょっとどんなケース化は思いつきませんが。笑
そんな時は下記の設定になります。
:nth-last-child(3n) :nth-last-of-type(3n)
フッターなどで<li>タグでメニューを表示した際、

と思ったことありませんか?
もちろん、そんな時は下記で消すことが可能です。
HTML
<ul class="samp-nth06">
<li>メニュー1</li>
<li>メニュー2</li>
<li>メニュー3</li>
<li>メニュー4</li>
<li>メニュー5</li>
</ul>
CSS
ul.samp-nth06 li {border-left:2px solid #666;}
ul.samp-nth06 li:first-of-type {border-left:none; }
いちいち、打ち消すの面倒なんだなというときは「:not()」を使って取り除くことが可能です。
li:not(:first-child) {
border-left:1px solid #CCC;
}
表示
HTML
<ul class="samp-nth07">
<li>メニュー1</li>
<li>メニュー2</li>
<li>メニュー3</li>
<li>メニュー4</li>
<li>メニュー5</li>
</ul>
CSS
ul.samp-nth07 li:not(:first-child) { border-left:2px solid #666; }

気が付いちゃいました?
これ、最初のタグに対しても設定しておきたい場合は、別々に書かないといけないんですよね。
li {
padding: 0 1em;
}
li:not(:first-child) {
border-left:1px solid #CCC;
}
推奨的に「できるだけ打ち消さないCSSを書こう」という前提があるみたいなのですが、打ち消しが明確に禁止されているわけではありませんし、個人的には
ケースバイケースでよいのではないかと思います。
このほかにも3番目から5番目まではこの指定などの設定もありますが、この記事では割愛します。またいずれ書きたいと思います。
HOME > ホームページ制作 > CSSでホームページを1UP > 何番目の設定。nth-childとnth-of-typeの違いなど