首页 > 编程笔记

CSS :nth-child()和:nth-of-type()的区别

:nth-of-type() 和 :nth-child() 伪类的相同之处是它们的语法一样。

1) 关键字值的形式如下:
2) 函数符号的形式如下:
例如:
/* 第奇数个<p>元素的背景色为灰色 */
p:nth-of-type(2n + 1) {
   background-color: #ddd;
}
/* 将第4的倍数个<p>元素加粗同时显示深天蓝色 */
p:nth-of-type(4n) {
   color: deepskyblue;
   font-weight: bold;
}
<article>
   <h3>标题1</h3>
   <p>段落内容1</p>
   <p>段落内容2</p>
   <h3>标题2</h3>
   <p>段落内容3</p>
   <p>段落内容4</p>
</article>
结果“段落内容1”和“段落内容3”有背景色,“段落内容4”被加粗同时显示深天蓝色,如下图所示:


图 1 :nth-of-type() 伪类的匹配效果

:nth-of-type() 和 :nth-child() 伪类的不同之处是,:nth-of-type() 伪类的匹配范围是所有相同标签的相邻元素,而 :nth-child() 伪类会匹配所有相邻元素,忽略标签类型。

如果上面的示例改成使用 :nth-child() 伪类:
/* 第奇数个元素,同时是<p>标签 */
p:nth-child(2n + 1) {
   background-color: #ddd;
}
/* 第4的倍数个<p>元素,同时是<p>标签 */
p:nth-child(4n) {
   color: deepskyblue;
   font-weight: bold;
}
那么匹配的元素会大不一样,p:nth-child(4n) 选择器没有匹配,如下图所示:


图 2 对比 :nth-child() 伪类的匹配效果

推荐阅读