两个都是伪类选择器,效果近似,但又不同。
例1:HTML部分
<div class="cl1">
<p>第一个p标签</p>
<p>第二个p标签</p><!-- 想要这个变色 -->
</div>
<div class="cl2">
<p>第一个p标签</p>
<p>第二个p标签</p><!-- 想要这个变色 -->
</div>
css部分
.cl1 p:nth-child(2){
color: red;
}
.cl2 p:nth-of-type(2){
color: red;
}
上面例子中实现效果一致,都做到了将第二个p标签变色
尽管效果相同,但两个选择器存在差异
p:nth-child(2)表示:
1、查找段落标签
2、查找父元素第二个标签
第二个p标签 正好满足1、2条件,p标签并且是父元素的第二个标签
p:nth-of-type(2)表示:
父元素的第二个p标签
第二个p标签 正好满足条件
上面的例子正好满足条件,下面换个例子:
例2:HTML部分
<div class="cl1">
<span>这是一个span标签</span>
<p>第一个p标签</p>
<p>第二个p标签</p><!-- 想要这个变色 -->
</div>
<div class="cl2">
<span>这是一个span标签</span>
<p>第一个p标签</p>
<p>第二个p标签</p><!-- 想要这个变色 -->
</div>
css部分
.cl1 p:nth-child(2){
color: red;
}
.cl2 p:nth-of-type(2){
color: red;
}
这时渲染出来的效果就不同了
可以看到css条件相同但是效果却不同了
p:nth-child(2)渲染的不是第二个p标签了,而是第一个p标签。
因为对于p:nth-child(2)表示这个元素要是p标签,且是第二个子元素,是两个必须满足的条件。于是,就是第一个p标签变色。如果在span标签后面再添加一个span标签,这时p:nth-child(2)将不再渲染标签。
而p:nth-of-type(2)表示父标签下的第二个p元素,显然,无论在span标签后面再插入几个span标签,还是其他标签,都是第二个p标签中的文字变红。