當我想要完美的使用:nth-child或者:nth-of-type的時候有點兒頭暈。你越理解它們,就能寫出越好的CSS規則!
在這些簡單的”秘方”(實際上是表達式)中我將重復的使用一個簡單的列表並隨即選擇數字。但是很明顯很容易改變它們以獲得類似的選擇器。
:nth-child規定屬於其父元素的第二個子元素的每個 p 的背景色:
p:nth-child(2)
{
background:#ff0000;
}
只選擇第五個元素

li:nth-child(5){
color: green;
}
要選擇第一個元素,你可以使用:first-child,或者我相信你也可以改下上面的例子來實現。
選擇除了前面的五個之外的所有元素

如果有超過10個元素,它將會選中超過5個。
只選擇前面的5個

li:nth-child(-n+5){
color: green;
}
從開始的那個,選擇每第四個

li:nth-child(4n-7) {
/* or 4n+1 */
color: green;
}
選擇奇數或者偶數

li:nth-child(odd){
color: green;
}

li:nth-child(even){
color: green;
}
當然這里也有另外兩種實現,你懂的——神飛
選擇最后一個元素

li:last-child {
color: green;
}
選擇倒數第二個

li:nth-last-child(2){
color: green;
}
從這個例子可看出,上面那個例子也有第二種實現方法。
瀏覽器支持
有趣的是,:first-child 和:last-child被IE 7支持,但是知道IE9才支持剩下的選擇器。如果你擔心IE,可以使用Selectivizr。
下面介紹的是 nth-child() 的語法和用法:語法: :nth-child(an+b) 描述:偽類:nth-child()的參數是an+b
舉例用法
tr:nth-child(odd)
tr:nth-child(2n)
第一種:簡單數字序號寫法
:nth-child(number)
直接匹配第number個元素。參數number必須為大於0的整數。
例子:
li:nth-child(3){background:orange;}
第二種:倍數寫法
:nth-child(an)
匹配所有倍數為a的元素。其中參數an中的字母n不可缺省,它是倍數寫法的標志,如3n、5n。
例子:
li:nth-child(3n){background:orange;}
第三種:倍數分組匹配
:nth-child(an+b) 與 :nth-child(an-b)
先對元素進行分組,每組有a個,b為組內成員的序號,其中字母n和加號+不可缺省,位置不可調換,這是該寫法的標志,其中a,b均為正整數或0。如3n+1、5n+1。但加號可以變為負號,此時匹配組內的第a-b個。
例子:
li:nth-child(3n+1){background:orange;}
li:nth-child(3n+5){background:orange;}
li:nth-child(5n-1){background:orange;}
li:nth-child(3n±0){background:orange;}
li:nth-child(±0n+3){background:orange;}
第四種:反向倍數分組匹配
:nth-child(-an+b)
此處一負一正,均不可缺省,否則無意義。這時與:nth-child(an+1)相似,都是匹配第1個,但不同的是它是倒着算的,從第b個開始往回算,所以它所匹配的最多也不會超過b個。
例子:
li:nth-child(-3n+8){background:orange;}
li:nth-child(-1n+8){background:orange;}
第五種:奇偶匹配
:nth-child(odd) 與 :nth-child(even)
分別匹配序號為奇數與偶數的元素。奇數(odd)與(2n+1)結果一樣;偶數(even)與(2n+0)及(2n)結果一樣。
衍生偽類
•E:nth-last-child(n): 選擇某個子元素,從最后一個數起
•E:nth-of-type(n): 選擇某個某種類型的子元素
•E:nth-last-of-type(n): 選擇某個某種類型的子元素,從最后一個符合條件的元素數起
•E:first-child: 選擇第一個子元素(這個偽類在CSS2里就有)
•E:last-child: 選擇最后一個子元素
