国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > CSS > 正文

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

2024-07-11 08:58:56
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

nth-child和nth-of-type是css的兩個(gè)偽選擇符。應(yīng)用中,這兩者常常容易混淆。這里把它們拿出來(lái)仔細(xì)做個(gè)對(duì)比,看看這兩者是怎么查找元素的。

  1. nth-child(n) —— 尋找第n個(gè)子元素
  2. nth-of-type(n) —— 尋找同一類型元素里的第n個(gè)元素

看這個(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ì)這樣呢?

  1. nth-child 是查找一堆兄弟元素里的第二個(gè)元素,不管那元素是什么,只要它排行老二。這里左側(cè)div找到的是<label>pgh2</label>,右側(cè)div找到的是<label>div2</label>。找到之后,再和前面的選擇符進(jìn)行匹配,如果匹配對(duì)了,那就應(yīng)用樣式。前面的選擇符是p,也就是要求元素是p類型,但這里都是label,不匹配,兩個(gè)元素都不會(huì)應(yīng)用這個(gè)樣式。
  2. nth-of-type 是在一堆兄弟元素里找到相同HTML標(biāo)記類型(Markup Type)元素中排行第二的元素。在左側(cè)的div中,<p>pgh3</p>是p類型里排行第二的元素;在右側(cè)的div中,<h5>div3</h5>是h5類型里排行第二的元素。找到之后,再和前面的選擇符進(jìn)行匹配,如果匹配對(duì)了,那就應(yīng)用樣式。前面的選擇符是h5, 那么只有右側(cè)div的<h5>div3</h5>元素應(yīng)用了樣式,左側(cè)div的<p>pgh3</p>則不會(huì)。

所以,nth-child和nth-of-type的不同之處就是查找元素的方式不同。前者是查找兄弟元素中某個(gè)絕對(duì)位置的元素,后者是查找同類型元素中某個(gè)絕對(duì)位置的元素。相同之處是,兩者都是找到元素之后再與前面的選擇符進(jìn)行匹配,這里的匹配方式是一樣的。

稍微往下延伸,清楚了查找方式,那么不管前面的選擇符怎么變,最后都是先查找到元素再與前面的選擇符進(jìn)行匹配。也就是說(shuō)選擇符與他們的查找方式?jīng)]有關(guān)系。弄清楚這個(gè)就不會(huì)被不同的組合混淆了。

  1. p:nth-child(2) 正確:查找第二個(gè)元素,且這個(gè)元素是p。錯(cuò)誤:查找第二個(gè)為p的元素
  2. .info:nth-child(2) 正確:查找第二個(gè)元素,且這個(gè)元素的class包含"info"。錯(cuò)誤:查找第二個(gè)class包含"info"的元素。
  3. p:nth-of-type(2) 查找相同HTML標(biāo)記類型中排行第二的元素,且這個(gè)元素是p(或者直觀的說(shuō)查找第二個(gè)p類型元素)
  4. .info:nth-of-type(2) 查找相同HTML標(biāo)記類型中排行第二的元素,且這個(gè)元素的class包含"info"

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 丹棱县| 日照市| 酉阳| 卓资县| 漳平市| 凭祥市| 天水市| 新龙县| 界首市| 南召县| 宣城市| 鄂伦春自治旗| 汝州市| 囊谦县| 梁河县| 绥江县| 定边县| 郓城县| 广平县| 田阳县| 洪泽县| 乐都县| 来安县| 定陶县| 衡东县| 岗巴县| 屏东县| 高平市| 哈巴河县| 依安县| 商城县| 莲花县| 普兰店市| 通州市| 巴彦淖尔市| 独山县| 襄垣县| 新平| 福泉市| 元谋县| 涟源市|