いや~なまじjqueryをいじりまくっていたんで勘違いしてました。
nth-childとnth-of-typeの違い
ここはh3要素
ここはp要素
ここはp要素
ここはh3要素
ここはp要素
ここはp要素
例えば上記のようなhtmlがあったとする。
○番目のp要素をだけを赤くしたい場合は下記の用になる。
/* 2番目のp要素 */
div.box p:nth-child(2){
color:red;
}
/* 4番目のp要素 */
div.box p:nth-child(4){
color:red;
}
そうするとbox要素の子要素の2番目のpタグが赤くなるが4番目の場合は、赤くなりません。それはbox要素の子要素の4番目はh3要素だからです。
なので特定のタグで○番目と指定したいときは「nth-of-type」で下記のように指定するといい。
div.box p:nth-of-type(4){
color:red;
}
逆に特定のタグではなくてすべての要素の○番目を赤いにしたい!と言った場合には「nth-child」で「*」(アスタリスク)で指定するといい。下記のようにすると上記のhtmlではh3要素が赤くなる。
/* boxの子要素の4番目を赤にする */
div.box *:nth-child(4){
color:red;
}
first-childとfirst-of-typeの違い
基本的にはnth-childとnth-of-typeと原理は同じなので下記に纏めて記載します。
/* p要素の中で最初のp要素を赤くしたい場合 */
div.box p:first-of-type{
color:red;
}
/* div.box内のすべての子要素で最初の要素を赤くしたい場合 (上記のhtmlではh3が赤くなる)*/
div.box *:first-child{
color:red;
}
nth-childにせよfirst-childにせよ何番目に要素があるのが分かってたりするんであれば、その順番を指定してしまえばいいんですけどねw 例えばdiv.boxの子要素の6番目はp要素と分かってるんであれば「div.box p:nth-child(6)」としちゃってもいいんですww