【CSS】擬似クラスの:(hoge)-child系と:(hoge)-type系の違いをここいらでしっかり覚えておこうか。

【CSS】擬似クラスの:(hoge)-child系と:(hoge)-type系の違いをここいらでしっかり覚えておこうか。

去年収穫した朝顔のタネが見つからないhakoishiです。
今年も鉢で買うかー。

さて、今回は擬似クラスの:(hoge)-child系と:(hoge)-type系の違いと、その覚え方についてです。

まず、どんなのがあったっけ?

一覧にしました。
:first-childだけはIE7から使えますが、他はIE9以降の対応です。

  :(hoge)-child :(hoge)-type
最初 :first-child :first-of-type
最後 :last-child :last-of-type
n番目 :nth-child(n) :nth-of-type(n)
最後からn番目 :nth-last-child(n) :nth-last-of-type(n)
1つだけ :only-child :only-of-type

対象になるグループの範囲は?

:(hoge)-child系、:(hoge)-type系のいずれもグループ内での順番を判定します。
その対象となるグループは、同じ階層に並んでいるひと続きの要素群となります。
図にするとこのような感じ。

直属の親要素が異なると、別グループになります。
また、グループ内の要素の種類は一種類に限りません。

「:(hoge)-child」は並び順→要素、「:(hoge)-type」は要素→並び順

ポイントはここ。
:(hoge)-child系と:(hoge)-type系では、並び順と要素の判定順が逆になります。

:(hoge)-child系はまず並び順を見て、次にそれが要素と一致するかを見ます。
:(hoge)-type系は指定の要素だけにしぼって、その上で並び順を見ます。

最後のdt、1つ目のddにスタイルがあたらなくて困った場合、


dt:last-child { /* 最後のdtを黄色くしたい(→しかし最後の要素はdd) */
	color: #FF0;
}
dd:first-child { /* 1つ目のddをピンクにしたい(→しかし1つ目の要素はdt) */
	color: #F00;
}
1つ目のdt
1つ目のdd
2つ目のdt
2つ目のdd
3つ目のdd
3つ目のdt
4つ目のdd
5つ目のdd
6つ目のdd

本当に書くべきはdd:first-of-type、dt:last-of-typeだったのかもしれません。


dt:last-of-type { /* 最後のdtを黄色くしたい */
	color: #FF0;
}
dd:first-of-type { /* 1つ目のddをピンクにしたい */
	color: #F00;
}
1つ目のdt
1つ目のdd
2つ目のdt
2つ目のdd
3つ目のdd
3つ目のdt
4つ目のdd
5つ目のdd
6つ目のdd
  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ