何番目の設定。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の違いなど