视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
解析CSS3伪类选择器nth-of-type和nth-child的用法,以及两者的区别
2020-11-02 22:07:41 责编:小采
文档
 在工作中,经常会用到CSS中的选择器,选择器也分为很多种,比如:ID选择器,类选择器,标签选择器,伪类选择器等等,那今天就着重讲讲伪类选择器中的nth-child是什么意思,nth-child怎么使用,以及他与nth-of-type的不同,他们都是CSS3中的伪类选择器,而且很多人认为意思差不多,其实不然,他们还是有区别的,那接下里,就和大家聊聊CSS3 nth-of-type和nth-child的使用方法,以及他们之间的区别。

一、nth-child( ) 与 nth-of-type( )的定义与用法

nth-child(n) : 匹配父元素中的第 n 个子元素,元素类型没有。
nth-of-type(n) : 匹配同类型中的第n个同级兄弟元素。
n可以是一个数字,一个关键字,或者一个公式,比如:nth-child(odd) 奇数 ,nth-child(even) 偶数。

nth-child和nth-of-type的不同之处就是查找元素的方式不同。前者是查找兄弟元素中某个绝对位置的元素,后者是查找同类型元素中某个绝对位置的元素。相同之处是,两者都是找到元素之后再与前面的选择符进行匹配,这里的匹配方式是一样的。
稍微往下延伸,清楚了查找方式,那么不管前面的选择符怎么变,最后都是先查找到元素再与前面的选择符进行匹配。也就是说选择符与他们的查找方式没有关系。弄清楚这个就不会被不同的组合混淆了。

看这个定义也许还不是很清楚他们的区别,接下来我们通过代码和图片来一点点来区分。

二、举例说明 nth-of-type和nth-child的区别

1、给第一个div五个P标签,给第二个div五个H5标签,分别用nth-child(2)与nth-of-type(2),看看结果是不是一样的,都是第二个变色。

<style type="text/css">
 p:nth-child(2){color: red ;}
 h5:nth-of-type(2){color: blue;}
 </style>
 <body>
 <div>
 <p>星期一</p>
 <p>星期二</p>
 <p>星期三</p>
 <p>星期四</p>
 <p>星期五</p>
 </div>
 <div>
 <h5>段落一</h5>
 <h5>段落二</h5>
 <h5>段落三</h5>
 <h5>段落四</h5>
 <h5>段落五</h5> 
 </div>
 </body>

效果图:

2、现在我们对HTML代码做点改动,让他们出现一些不同,CSS样式不变。我们将第一个p元素和第一个h5元素改为h4,代码如下:

<div>
 <h4>星期一</h4>
 <p>星期二</p>
 <p>星期三</p>
 <p>星期四</p>
 <p>星期五</p>
 </div>
 <div>
 <h4>段落一</h4>
 <h5>段落二</h5>
 <h5>段落三</h5>
 <h5>段落四</h5>
 <h5>段落五</h5> 
 </div>

效果图:

看看,现在是不是发现nth-of-type(2)结果变了,段落3变色了。h5:nth-of-type(2)要找的是第二个h5类型的元素,也就是段落3。

3、继续改动HTML代码。我们恢复第一个p元素和第一个h5元素,将第二个p元素和第二个h5元素改为h4,样式仍保持不变,结果会怎样呢?

<div>
 <p>星期一</p>
 <h4>星期二</h4>
 <p>星期三</p>
 <p>星期四</p>
 <p>星期五</p>
 </div>
 <div>
 <h5>段落一</h5>
 <h4>段落二</h4>
 <h5>段落三</h5>
 <h5>段落四</h5>
 <h5>段落五</h5> 
 </div>

效果图:

结果可以看到nth-child没有效果,nth-of-type高亮的是段落3。

为什么会这样?

nth-child 是查找一堆兄弟元素里的第二个元素,不管那元素是什么,只要它排行第二就行。这里前一个div找到的是 <h4>星期二</h4>
,后一个div找到的是<h4>段落二</h4>。找到之后,再和前面的选择符进行匹配,如果匹配对了,那就应用样式。前面的选择符是p,也就是要求元素是p类型,但这里都是h4,不匹配,两个元素都不会应用这个样式。

nth-of-type 是在一堆兄弟元素里找到相同HTML标记类型元素中排行第二的元素。在第一个div中 <p>星期三</p>是p类型里排行第二的元素;在后一个div中<h5>段落三</h5>是h5类型里排行第二的元素。找到之后,再和前面的选择符进行匹配,如果匹配对了,那就应用样式。前面的选择符是h5, 那么只有后一个div中<h5>段落三</h5>元素应用了样式,前一个div的<h4>星期二</h4>则不会。

总结:以上详细介绍了nth-of-type和nth-child的区别,希望可以帮助到你!

下载本文
显示全文
专题