首頁  >  文章  >  web前端  >  CSS nth-child與nth-of-type的元素查找方式詳解

CSS nth-child與nth-of-type的元素查找方式詳解

小云云
小云云原創
2018-01-24 10:59:301764瀏覽

nth-child和nth-of-type是css的兩個偽選擇子。在應用中,這兩者常常容易混淆。這裡把它們拿出來仔細做個對比,看看這兩者是怎麼找出元素的。本文主要介紹了詳解CSS nth-child與nth-of-type的元素查找方式的相關資料,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧,希望能幫助大家。

  1. nth-child(n) —— 尋找第n個子元素

  2. nth-of-type(n) —— 尋找相同類型元素裡的第n個元素

看這個定義也許還不是很清楚他們的差別,我們一點點來區分。

p:nth-child(2) 與p:nth-pf-type(2)

HTML程式碼如下


<p>
<p style="float:left;width:200px;">
    <p>pgh1</p>
    <p>pgh2</p>
    <p>pgh3</p>
    <p>pgh4</p>
</p>
<p style="float:left;width:200px;">
    <h5>p1</h5>
    <h5>p2</h5>
    <h5>p3</h5>
    <h5>p4</h5>
</p>

分別套用兩個樣式, 都是找第二個元素


p:nth-child(2) {
    color: red;
    font-weight:bold;
}
h5:nth-of-type(2) {
    color: blue;
    font-weight:bold;
}

結果:兩者都套用成功。

現在我們對HTML程式碼做點改動,讓他們出現一些不同。我們將第一個p元素和第一個h5元素改為label,程式碼如下:


<p>
<p style="float:left;width:200px;">
    <label>pgh1</label>
    <p>pgh2</p>
    <p>pgh3</p>
    <p>pgh4</p>
</p>
<p style="float:left;width:200px;">
    <label>p1</label>
    <h5>p2</h5>
    <h5>p3</h5>
    <h5>p4</h5>
</p>

樣式不變,這時再來看效果,發現nth-of -type(2)結果變了,這時高亮的是p3。到這裡也算符合我們的邏輯。 h5:nth-of-type(2)要找的是第二個h5類型的元素,也就是p3。

繼續改變HTML程式碼。我們恢復第一個p元素和第一個h5元素,將第二個p元素和第二個h5元素改為label,樣式仍不變,結果會怎麼樣呢?

HTML如下:


<p>
<p style="float:left;width:200px;">
    <p>pgh1</p>
    <label>pgh2</label>
    <p>pgh3</p>
    <p>pgh4</p>
</p>
<p style="float:left;width:200px;">
    <h5>p1</h5>
    <label>p2</label>
    <h5>p3</h5>
    <h5>p4</h5>
</p>

CSS 不變:


p:nth-child(2) {
    color: red;
    font-weight:bold;
}
h5:nth-of-type(2) {
    color: blue;
    font-weight:bold;
}

結果:nth-​​child沒有效果,nth-of-type高亮的是p3。

為什麼會這樣呢?

  1. nth-child 是尋找一堆兄弟元素裡的第二個元素,不管那個元素是什麼,只要它排行老二。這裡左側p找到的是2e1cf0710519d5598b1f0f14c36ba674pgh28c1ecd4bb896b2264e0711597d40766c,右側p找到的是2e1cf0710519d5598b1f0f14c36ba674p28c1ecd4bb896b2264e0711597d40766c。找到之後,再和前面的選擇符進行匹配,如果匹配對了,那就套用樣式。前面的選擇符是p,也就是要求元素是p類型,但這裡都是label,不匹配,兩個元素都不會套用這個樣式。

  2. nth-of-type 是在一堆兄弟元素裡找到相同HTML標記類型(Markup Type)元素中排行第二的元素。在左側的p中,e388a4556c0f65e1904146cc1a846beepgh394b3e26ee717c64999d7867364b1b4a3是p類型裡排行第二的元素;在右側的p中,39318b6f72ed39310530dfd69d0078e1p346eb22d0a433f22cff9940d34d5612bf是h5類型裡排行第二的元素。找到之後,再和前面的選擇符進行匹配,如果匹配對了,那就套用樣式。前面的選擇符是h5, 那麼只有右側p的39318b6f72ed39310530dfd69d0078e1p346eb22d0a433f22cff9940d34d5612bf元素應用了樣式,左側p的e388a4556c0f65e1904146cc1a846beepgh394b3e26ee717c64999d7867364b1b4a3則不會。

所以,nth-child和nth-of-type的不同之處就是找出元素的方式不同。前者是找出兄弟元素中某個絕對位置的元素,後者是尋找同類型元素中某個絕對位置的元素。同樣之處是,兩者都是找到元素之後再與前面的選擇符進行匹配,這裡的匹配方式是一樣的。

稍微往下延伸,清楚了查找方式,那麼不管前面的選擇符怎麼變,最後都是先查找到元素再與前面的選擇符進行匹配。也就是說選擇符與他們的尋找方式沒有關係。弄清楚這個就不會被不同的組合混淆了。

  1. p:nth-child(2) 正確:找出第二個元素,而這個元素是p。錯誤:找出第二個為p的元素

  2. .info:nth-child(2) 正確:找出第二個元素,而這個元素的class包含"info"。錯誤:尋找第二個class包含"info"的元素。

  3. p:nth-of-type(2) 尋找相同HTML標記類型中排行第二的元素,且這個元素是p(或直覺的說尋找第二個p類型元素)

  4. .info:nth-of-type(2) 尋找相同HTML標記類型中排行第二的元素,且這個元素的class包含"info"

相關推薦;

PHP的數組中提高元素查找與元素去重的效率的技巧解析,php數組_PHP教程

淺析jQuery中常用的元素查找方法總結_jquery

#CSS3中nth-child與nth-of-type的區別詳解

#

以上是CSS nth-child與nth-of-type的元素查找方式詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn