博客 / 詳情

返回

真正理解nth-of-type,只知道nth-of-type和nth-child的區別?怕是不夠哦!

nth-of-typenth-child的區別我這裏就不説了,只説nth-of-type。

首先我們設定下面這樣一個結構,然後通過下面四個例子真正理解nth-of-type

1.<div>這是div</div>
2.<div class="common">這是div.common</div>
3.<p class="common">這是p.common</p>
4.<div class="common">這是div.common</div>
5.<p class="common">這是p.common</p>

一、通過div標籤選擇第2個div

div:nth-of-type(2) {
    background: red;
}

clipboard.png

顯然這是符合我們預期的,是廣大人民羣眾喜聞樂見的情形。

二、通過common類名選擇第3個.common

.common:nth-of-type(3) {
    background: red;
}

clipboard.png
同樣也是符合我們預期的——選中擁有common類名的第三個元素。
可能有些朋友看到這,嘴角已經微微上揚,露出輕蔑而天真的笑容,心想:標題取得咋咋呼呼,結果都是些嘗龜操作,不值一提不值一提~

好,那就來點不那麼嘗龜的!

三、通過common類名選擇第1個.common

.common:nth-of-type(1) {
    background: red;
}

clipboard.png
是的,你沒有看錯,我的圖也沒錯,她確實選中了第2個.common,什麼原因呢?這個例子暫時看不出來,我們結合下面的第四個例子應該能看出些端倪。

四、通過common類名選擇第2個.common

.common:nth-of-type(2) {
    background: red;
}

clipboard.png
有些朋友看到這更絕望了,明明括號裏只有2沒帶n,卻選中了2個!
剛剛露出天真笑容的朋友臉上的笑容凝固了,心想:nth-of-type變了,變得陌生了,不再是我認識的那個單純的nth-of-type了。
但是朋友你不用垂頭喪氣,仔細觀察會發現:這兩個被選中的元素都是.common,但是他們的標籤名卻不同,而且恰好是各自標籤名的第二個!

由此我們大膽推測:

nth-of-type以類名選擇元素時,會根據第一個擁有此類名的元素的標籤類型(假設為div)來確定候選元素的標籤(div),即使元素未擁有此類名,但只要是此標籤類型(div)就可成為候選元素,然後根據序列號在候選元素中確定一個元素,如果被確定的這個元素也擁有此類名則此元素被選中,否則不選中任何元素;
另外,若擁有此類名的元素標籤類型不同,則將不同標籤分組,分別應用上述規則。

根據這個結論,再看三、四兩個例子,縈繞在我們眼前的迷霧漸漸消散了。

有些朋友可能會猛然想起第二個例子一開始就是符合我們原先的“想當然規則”的,但仔細對比會發現那只是個美麗的巧合,第二個例子仍然符合我們的推論,進一步證明了推論的正確性。

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.