nth-child和nth-of-type是css的兩個(gè)偽選擇符。應(yīng)用中,這兩者常常容易混淆。這里把它們拿出來(lái)仔細(xì)做個(gè)對(duì)比,看看這兩者是怎么查找元素的。
看這個(gè)定義也許還不是很清楚他們的區(qū)別,我們一點(diǎn)點(diǎn)來(lái)區(qū)分。
p:nth-child(2) 與 p:nth-pf-type(2)
HTML代碼如下
<div><div style="float:left;width:200px;"> <p>pgh1</p> <p>pgh2</p> <p>pgh3</p> <p>pgh4</p></div><div style="float:left;width:200px;"> <h5>div1</h5> <h5>div2</h5> <h5>div3</h5> <h5>div4</h5></div>
分別應(yīng)用兩個(gè)樣式, 都是找第二個(gè)元素
p:nth-child(2) { color: red; font-weight:bold;}h5:nth-of-type(2) { color: blue; font-weight:bold;}
結(jié)果:兩者都應(yīng)用成功。
現(xiàn)在我們對(duì)HTML代碼做點(diǎn)改動(dòng),讓他們出現(xiàn)一些不同。我們將第一個(gè)p元素和第一個(gè)h5元素改為label,代碼如下:
<div><div style="float:left;width:200px;"> <label>pgh1</label> <p>pgh2</p> <p>pgh3</p> <p>pgh4</p></div><div style="float:left;width:200px;"> <label>div1</label> <h5>div2</h5> <h5>div3</h5> <h5>div4</h5></div>
樣式不變,這時(shí)再來(lái)看效果,發(fā)現(xiàn)nth-of-type(2)結(jié)果變了,這時(shí)高亮的是div3。到這里也算符合我們的邏輯。h5:nth-of-type(2)要找的是第二個(gè)h5類型的元素,也就是div3。
繼續(xù)改動(dòng)HTML代碼。我們恢復(fù)第一個(gè)p元素和第一個(gè)h5元素,將第二個(gè)p元素和第二個(gè)h5元素改為label,樣式仍保持不變,結(jié)果會(huì)怎樣呢?
HTML如下:
<div><div style="float:left;width:200px;"> <p>pgh1</p> <label>pgh2</label> <p>pgh3</p> <p>pgh4</p></div><div style="float:left;width:200px;"> <h5>div1</h5> <label>div2</label> <h5>div3</h5> <h5>div4</h5></div>
CSS 不變:
p:nth-child(2) { color: red; font-weight:bold;}h5:nth-of-type(2) { color: blue; font-weight:bold;}
結(jié)果:nth-child沒(méi)有效果,nth-of-type高亮的是div3。
為什么會(huì)這樣呢?
所以,nth-child和nth-of-type的不同之處就是查找元素的方式不同。前者是查找兄弟元素中某個(gè)絕對(duì)位置的元素,后者是查找同類型元素中某個(gè)絕對(duì)位置的元素。相同之處是,兩者都是找到元素之后再與前面的選擇符進(jìn)行匹配,這里的匹配方式是一樣的。
稍微往下延伸,清楚了查找方式,那么不管前面的選擇符怎么變,最后都是先查找到元素再與前面的選擇符進(jìn)行匹配。也就是說(shuō)選擇符與他們的查找方式?jīng)]有關(guān)系。弄清楚這個(gè)就不會(huì)被不同的組合混淆了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選