使いこなせるようになると便利!n番目などの順位処理によく使うもの
「3番目だけ色を変えたい」「最初の行だけ太字にしたい」などn番目のみ何かを設定したい場合って以外と多いですよね。
一つ一つclassをつけていけばできるっちゃできるんですが、まぁ面倒だし、つけ忘れるし。。。
もちろんcmsなどを利用していると吐き出されるhtmlソースには手をつけられなかったりもしますね。
そんな時に使える擬似クラスです。
最初・最後などの単純な指定
:first-child
兄弟要素のグループの中で最初の要素を指定します。
[div_blok1]内の最初の[p]だけ背景が
オレンジ色
[div_blok1]内の[p]のデフォルトは背景が
水色
ここからクラス名[div_blok1]のdiv↓
[div class="div_blok1"]内の1行目の[p]テキスト
[div class="div_blok1"]内の2行目の[p]テキスト
[div class="div_blok1"]内の3行目の[p]テキスト
ここまでクラス名[div_blok1]のdiv↑
[div_blok3]内の最初の[li]だけ背景が
ピンク色
[div_blok3]内の[li]のデフォルトは背景が
緑色
ここからクラス名[div_blok2]のdiv↓
[div class="div_blok2"]内の1行目の[li]テキスト
[div class="div_blok2"]内の2行目の[li]テキスト
[div class="div_blok2"]内の3行目の[li]テキスト
ここまでクラス名[div_blok2]のdiv↑
<div class="div_blok1">
<p>[div_blok1]内の1行目の[p]テキスト</p>
<p>[div_blok1]内の2行目の[p]テキスト</p>
<p>[div_blok1]内の3行目の[p]テキスト</p>
</div>
<div class="div_blok2">
<ul>
<li>[div_blok2]内の1行目の[li]テキスト</li>
<li>[div_blok2]内の2行目の[li]テキスト</li>
<li>[div_blok2]内の3行目の[li]テキスト</li>
</ul>
</div>
.div_blok1 p {
background: #90CAF9;
}
.div_blok1 p:first-child {
background: #FFCCBC;
}
.div_blok2 li {
background: #A5D6A7;
}
.div_blok2 li:first-child {
background: #F8BBD0;
}
ただし「:first-child」を設定した要素の最初のアイテムAよりも前にの他の要素がある場合は適応されません。
「p:first-child」の場合、アイテムAは[p]となります。
本来1行目の[p]だけ水色にし、それ以外はオレンジ色にしたいのですが、1行目に[h2](指定している[p]以外)があるため適応されません。
こんな時は「:first-of-type」へ。
1行目の[h2]テキスト
1行目の[p]テキスト ここだけ水色にしたいのに...
2行目の[p]テキスト
3行目の[p]テキスト
<div class="div_blok3">
<h2>[div_blok3]内の1行目の[h2]テキスト</h2>
<p>[div_blok3]内の1行目の[p]テキスト</p>
<p>[div_blok3]内の2行目の[p]テキスト</p>
<p>[div_blok3]内の3行目の[p]テキスト</p>
</div>
.div_blok3 p {
background: #FFCCBC;
}
.div_blok3 p:first-child {
background: #90CAF9;
}
:first-of-type
兄弟要素のグループの中でその種類の最初の要素を指定します。
入れ子になっていても[div_blok1]のなかの最初の[p]だけが
水色 になる
デフォルトの[p]は
オレンジ色
1行目の[h2]テキスト
1行目の[p]テキスト ここだけ水色にしたい
2行目の[p]テキスト
3行目の[p]テキスト
<div class="div_blok1">
<h2>[div_blok1]内の1行目の[h2]テキスト</h2>
<p>[div_blok1]内の1行目の[p]テキスト</p>
<p>[div_blok1]内の2行目の[p]テキスト</p>
<p>[div_blok1]内の3行目の[p]テキスト</p>
</div>
.div_blok1 p {
background: #FFCCBC;
}
.div_blok1 p:first-of-type {
background: #90CAF9;
}
:last-child
兄弟要素のグループの中でその種類の最後の要素を指定します。
[div_blok1]内の最後の[p]だけ背景が
オレンジ色
[div_blok1]内の[p]のデフォルトは背景が
水色
ここからクラス名[div_blok1]のdiv↓
[div class="div_blok1"]内の1行目の[p]テキスト
[div class="div_blok1"]内の2行目の[p]テキスト
[div class="div_blok1"]内の3行目の[p]テキスト
ここまでクラス名[div_blok1]のdiv↑
[div_blok3]内の最後の[li]だけ背景が
ピンク色
[div_blok3]内の[li]のデフォルトは背景が
緑色
ここからクラス名[div_blok2]のdiv↓
[div class="div_blok2"]内の1行目の[li]テキスト
[div class="div_blok2"]内の2行目の[li]テキスト
[div class="div_blok2"]内の3行目の[li]テキスト
ここまでクラス名[div_blok2]のdiv↑
<div class="div_blok1">
<p>[div_blok1]内の1行目の[p]テキスト</p>
<p>[div_blok1]内の2行目の[p]テキスト</p>
<p>[div_blok1]内の3行目の[p]テキスト</p>
</div>
<div class="div_blok2">
<ul>
<li>[div_blok2]内の1行目の[li]テキスト</li>
<li>[div_blok2]内の2行目の[li]テキスト</li>
<li>[div_blok2]内の3行目の[li]テキスト</li>
</ul>
</div>
.div_blok1 p {
background: #90CAF9;
}
.div_blok1 p:last-child {
background: #FFCCBC;
}
.div_blok2 li {
background: #A5D6A7;
}
.div_blok2 li:last-child {
background: #F8BBD0;
}
ただし「:last-child」を設定した要素の最後のアイテムAよりも後に他の要素がある場合は適応されません。
「p:last-child」の場合、アイテムAは[p]となります。
本来[p]の最後行だけ水色にし、それ以外は水色にしたいのですが、最後行に[h2](指定している[p]以外)があるため適応されません。
こんな時は「:last-of-type」へ。
[p]1行目のテキスト
[p]2行目のテキスト
[p]最後行のテキスト ここだけ水色にしたいのに...
[h2]テキスト
<div class="div_blok3">
<p>[div_blok3]内の1行目の[p]テキスト</p>
<p>[div_blok3]内の2行目の[p]テキスト</p>
<p>[div_blok3]内の3行目の[p]テキスト</p>
<h2>[div_blok3]内の1行目の[h2]テキスト</h2>
</div>
.div_blok3 p {
background: #FFCCBC;
}
.div_blok3 p:first-child {
background: #90CAF9;
}
:last-of-type
兄弟要素のグループの中でその種類の最後の要素を指定します。
入れ子になっていても[div_blok1]のなかの最後の[p]だけが
水色 になる
デフォルトの[p]は
オレンジ色
[p]1行目のテキスト
[p]2行目のテキスト
[p]最後行のテキスト ここだけ水色にしたい
[h2]テキスト
<div class="div_blok1">
<p>[div_blok1]内の1行目の[p]テキスト</p>
<p>[div_blok1]内の2行目の[p]テキスト</p>
<p>[div_blok1]内の3行目の[p]テキスト</p>
<h2>[div_blok1]内の1行目の[h2]テキスト</h2>
</div>
.div_blok1 p {
background: #FFCCBC;
}
.div_blok1 p:last-of-type {
background: #90CAF9;
}
「***-child」と「***-of-type」は何が違う?
:first-childの場合
まずは並び順をみて、一番上の要素が指定した要素と一緒かどうかをみます。なので一番上に一致する要素が無いと「cssが効かない」ということになります。
:first-of-typeの場合
逆に、指定した要素だけを数えて最初のアイテムとなります。なので、「:first-child」で効かなかったものが効くようになります。
要素関係なく上から(下から)何番目を指定したいときは「***-child」、要素を限定して上から(下から)何番目を指定したいときは「***-of-type」ということになります。
何番目などの限定的な指定
:nth-child()/:nth-last-child()
:nth-child()も:nth-last-child()兄弟要素のグループの中での位置に基づいて選択です。
:nth-child()は最初から数え、:nth-last-child()最後から数えます。
odd/even
odd:奇数番目の要素
:nth-child(odd)は:nth-child(2n+1)と同様です。
even:偶数番目の要素
:nth-child(even)は:nth-child(2n)と同様です。
1つ目の[p] 奇数なので水色
2つ目の[p] 偶数なのでオレンジ色
1つ目の[div] 奇数なので水色
2つ目の[div] 偶数なのでオレンジ色
3つ目の[p] 奇数なので水色
3つ目の[div] 偶数なのでオレンジ色
4つ目の[div] 奇数なので水色
4つ目の[p] 偶数なのでオレンジ色
1つ目の[span] 奇数なので水色
<div class="div_blok1">
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
</div>
.div_blok1 :nth-child(odd) {
background: #90CAF9;
}
.div_blok1 :nth-child(even) {
background: #FFCCBC;
}
:nth-child(3) 上から3番目
1つ目の[p]
2つ目の[p]
1つ目の[div] 上から数えて3番目なのでこれだけ水色
2つ目の[div]
3つ目の[p]
3つ目の[div]
4つ目の[div]
4つ目の[p]
1つ目の[span]
<div class="div_blok1">
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
</div>
.div_blok1 :nth-child(3) {
background: #90CAF9;
}
:nth-child(3n) 3番目[3×1], 6番目[3×2], 9番目[3×3]…
1つ目の[p]
2つ目の[p]
1つ目の[div] 上から数えて3番目なのでオレンジ色
2つ目の[div]
3つ目の[p]
3つ目の[div] 上から数えて6番目なのでオレンジ色
4つ目の[div]
4つ目の[p]
1つ目の[span] 上から数えて9番目なのでオレンジ色
<div class="div_blok1">
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
</div>
.div_blok1 :nth-child(3n) {
background: #FFCCBC;
}
:nth-child(3n+4) 4番目[(3×0)+4], 7番目[(3×1)+4], 10番目[(3×2)+4]…
1つ目の[p]
2つ目の[p]
1つ目の[div]
3つ目の[p] 水色
2つ目の[div]
4つ目の[p]
1つ目の[span] 水色
3つ目の[div]
5つ目の[p]
6つ目の[p] 水色
<div class="div_blok1">
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
</div>
.div_blok1 :nth-child(3n+4) {
background: #90CAF9;
}
:nth-child(-n+4) 最初の4つの要素[-0+3,-1+3,-2+3,-3+3]
1つ目の[p] オレンジ色
2つ目の[p] オレンジ色
1つ目の[div] オレンジ色
3つ目の[p] オレンジ色
2つ目の[div]
4つ目の[p]
1つ目の[span]
3つ目の[div]
5つ目の[p]
6つ目の[p]
<div class="div_blok1">
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
</div>
.div_blok1 :nth-child(-n+4) {
background: #FFCCBC;
}
:nth-child(n+3):nth-child(-n+6) 要素の3〜6番目
1つ目の[p]
1つ目の[span]
2つ目の[p] 上から3〜6番以内なのでオレンジ色
3つ目の[p] 上から3〜6番以内なのでオレンジ色
1つ目の[div] 上から3〜6番以内なのでオレンジ色
4つ目の[p] 上から3〜6番以内なのでオレンジ色
2つ目の[div]
5つ目の[p]
<div class="div_blok1">
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
</div>
.div_blok1 :nth-child(n+3):nth-child(-n+6) {
background: #FFCCBC;
}
:nth-of-type()/:nth-last-of-type()
「***-of-type」なのでいずれも指定した要素だけを数えてから位置に基づいた要素に反映されます。
:nth-of-type()は最初から数え、:nth-last-of-type()は最後から数えます。
odd/even
odd:奇数番目の要素
:nth-of-type(odd)は:nth-of-type(2n+1)と同様です。
even:偶数番目の要素
:nth-of-type(even)はtr:nth-of-type(2n)と同様です。
[p]で偶数なら
オレンジ色 、[p]で奇数なら
水色 に指定
1つ目の[p] [p]で奇数なので水色
1つ目の[span] [p]じゃないので無色
2つ目の[p] [p]で偶数なのでオレンジ色
3つ目の[p] [p]で奇数なので水色
1つ目の[div] [p]じゃないので無色
4つ目の[p] [p]で偶数なのでオレンジ色
2つ目の[div] [p]じゃないので無色
5つ目の[p] [p]で奇数なので水色
<div class="div_blok1">
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
</div>
.div_blok1 p:nth-of-type(odd) {
background: #90CAF9;
}
.div_blok1 p:nth-of-type(even) {
background: #FFCCBC;
}
:nth-of-type(3) 指定の要素だけをみてその要素の3番目
[p]のみを上から数えて3番目を
水色 に指定
1つ目の[p]
2つ目の[p]
1つ目の[div]
2つ目の[div]
3つ目の[p] これだけ水色
3つ目の[div]
4つ目の[div]
4つ目の[p]
1つ目の[span]
<div class="div_blok1">
<p>テキスト</p>
<p>テキスト</p>
<div>テキスト</div>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
<p>テキスト</p>
</div>
.div_blok1 p:nth-of-type(3) {
background: #90CAF9;
}
:nth-of-type(3n) 3番目[3×1], 6番目[3×2], 9番目[3×3]…
[p]のみを上から数えて3番目,6番目,9番目...を
オレンジ色 に指定
1つ目の[p]
2つ目の[p]
1つ目の[div]
3つ目の[p] オレンジ色
2つ目の[div]
4つ目の[p]
1つ目の[span]
3つ目の[div]
5つ目の[p]
6つ目の[p] オレンジ色
4つ目の[div]
7つ目の[p]
8つ目の[p]
2つ目の[span]
9つ目の[p] オレンジ色
10個目の[p]
<div class="div_blok1">
<p>テキスト</p>
<p>テキスト</p>
<div>テキスト</div>
<p>テキスト</p>
<div>テキスト</div>
<p>テキスト</p>
<span>テキスト</span>
<p>テキスト</p>
<p>テキスト</p>
<span>テキスト</span>
<div>テキスト</div>
<p>テキスト</p>
<p>テキスト</p>
<div>テキスト</div>
<p>テキスト</p>
<p>テキスト</p>
</div>
.div_blok1 p:nth-of-type(3n) {
background: #FFCCBC;
}
:nth-of-type(3n+4) 4番目[(3×0)+4], 7番目[(3×1)+4], 10番目[(3×2)+4]…
[p]のみを上から数えて4番目,7番目,10番目...を
水色 に指定
1つ目の[p]
2つ目の[p]
1つ目の[div]
3つ目の[p]
2つ目の[div]
4つ目の[p] 水色
1つ目の[span]
3つ目の[div]
5つ目の[p]
6つ目の[p]
4つ目の[div]
7つ目の[p] 水色
8つ目の[p]
2つ目の[span]
9つ目の[p]
10個目の[p] 水色
<div class="div_blok1">
<p>テキスト</p>
<p>テキスト</p>
<div>テキスト</div>
<p>テキスト</p>
<div>テキスト</div>
<p>テキスト</p>
<span>テキスト</span>
<p>テキスト</p>
<p>テキスト</p>
<span>テキスト</span>
<div>テキスト</div>
<p>テキスト</p>
<p>テキスト</p>
<div>テキスト</div>
<p>テキスト</p>
<p>テキスト</p>
</div>
.div_blok1 p:nth-of-type(3n+4) {
background: #90CAF9;
}
:nth-of-type(-n+4) 最初の4つの要素[-0+3,-1+3,-2+3,-3+3]
[p]のみを上から数えて最初の4つを
オレンジ色 に指定
1つ目の[p] オレンジ色
2つ目の[p] オレンジ色
1つ目の[div]
3つ目の[p] オレンジ色
2つ目の[div]
4つ目の[p] オレンジ色
1つ目の[span]
3つ目の[div]
5つ目の[p]
6つ目の[p]
4つ目の[div]
7つ目の[p]
8つ目の[p]
2つ目の[span]
9つ目の[p]
10個目の[p]
<div class="div_blok1">
<p>テキスト</p>
<p>テキスト</p>
<div>テキスト</div>
<p>テキスト</p>
<div>テキスト</div>
<p>テキスト</p>
<span>テキスト</span>
<p>テキスト</p>
<p>テキスト</p>
<span>テキスト</span>
<div>テキスト</div>
<p>テキスト</p>
<p>テキスト</p>
<div>テキスト</div>
<p>テキスト</p>
<p>テキスト</p>
</div>
.div_blok1 p:nth-of-type(-n+4) {
background: #FFCCBC;
}
:nth-of-type(n+3) nth-of-type(-n+6)はグループ内の指定した要素の3〜6番目
[p]のみを上から数えて3〜6番目を
オレンジ色 に指定
1つ目の[p]
2つ目の[p]
1つ目の[div]
3つ目の[p] オレンジ色
2つ目の[div]
4つ目の[p] オレンジ色
1つ目の[span]
3つ目の[div]
5つ目の[p] オレンジ色
6つ目の[p] オレンジ色
4つ目の[div]
7つ目の[p]
8つ目の[p]
2つ目の[span]
9つ目の[p]
10個目の[p]
<div class="div_blok1">
<p>テキスト</p>
<p>テキスト</p>
<div>テキスト</div>
<p>テキスト</p>
<div>テキスト</div>
<p>テキスト</p>
<span>テキスト</span>
<p>テキスト</p>
<p>テキスト</p>
<span>テキスト</span>
<div>テキスト</div>
<p>テキスト</p>
<p>テキスト</p>
<div>テキスト</div>
<p>テキスト</p>
<p>テキスト</p>
</div>
.div_blok1 p:nth-of-type(n+3):nth-of-type(-n+6) {
background: #FFCCBC;
}
:only-child
兄弟要素がない要素を表します。親グループの中に子要素が一つしかないものに対して適用させることができます。
同じグループ内に兄弟要素のないアイテムを
水色 に指定
1つ目の[p] 同じグループに他にも要素があるので無色
1つ目の[div] 同じグループに他にも要素があるので無色
2つ目の[div] 同じグループに他にも要素があるので無色
2つ目の[div] の中の唯一の[p] 2つ目の[div]グループ内に他に要素がないので水色
3つ目の[div] 同じグループに他にも要素があるので無色
3つ目の[div] の中の唯一の[span] 3つ目の[div]グループ内に他に要素がないので水色
<div class="div_blok1">
<p>テキスト</p>
<div>テキスト</div>
<div>テキスト
<p>テキスト</p>
</div>
<div>テキスト
<span>テキスト</span>
</div>
</div>
.div_blok1 :only-child {
background: #90CAF9;
}
:only-of-type
同じ型の兄弟要素がない要素を表します。つまりグループのなかで唯一の要素を探して適用させることができます。
同じグループ内に唯一の要素のみ
オレンジ色
1つ目の[div]
唯一の[p]なのでオレンジ色
2つ目の[div]
3つ目の[div]
3つ目の[div]の中の唯一の[i]なのでオレンジ色
3つ目の[div]の中の1つ目の[em]
3つ目の[div]の中の2つ目の[em]
<div class="div_blok1">
<div>テキスト</div>
<p>テキスト</p>
<div>テキスト</div>
<div>テキスト
<i>テキスト</i>
<em>テキスト</em>
<em>テキスト</em>
</div>
</div>
.div_blok1 :only-of-type {
background: #FFCCBC;
}