标题
正文1
正文2
时间:2026-03-16 17:31:28 263浏览 收藏
CSS中的`nth-of-type`是一个精准但常被误解的选择器,它只在**同标签名的兄弟元素中独立计数**,非目标标签虽“占位”却不参与计数,这与按全局位置排序的`nth-child`有本质区别;文章深入剖析了二者核心差异、典型误用场景(如`div:nth-of-type(2)`失效的真相)、参数书写规范(空格/大小写敏感)、安全使用技巧(如`n+3`的正确含义)及性能优化建议,帮你避开踩坑、精准控制样式,真正掌握这个强大却娇气的伪类选择器。

这个伪类只在**同种标签名**的兄弟元素中计数,不是按 DOM 顺序全局排号。比如 A C,两个 是 p:nth-of-type(1) 和 p:nth-of-type(2);但 span:nth-of-type(1) 只匹配 B,因为它是唯一的 兄弟。
常见错误现象: 示例: 正文1 正文2 想从第 3 个 CSS 解析器对 最常被忽略的是:你以为在数“第几个元素”,其实 CSS 在数“第几个同标签兄弟”——这个前提不成立,后面所有计算都是白忙。 终于介绍完啦!小伙伴们,这篇关于《CSS nth-of-type 选择特定元素方法》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!div:nth-of-type(2) 没生效,其实是父容器下第一个 或 —— 它们不参与 div 的计数,但会“占位”,导致你误判序号。nth-of-type(n) 和 nth-child(n) 到底差在哪?别混着用
nth-of-type 看标签名,nth-child 看位置序号(不管标签)。同一个元素可能同时满足两者,也可能只满足其一。标题
article p:nth-of-type(1) { color: red; } /* 匹配第一个 <p>,即“正文1” */
article p:nth-child(2) { color: blue; } /* 匹配父下第 2 个子元素且是 <p>,也是“正文1” */
article p:nth-child(3) { color: green; } /* 匹配第 3 个子元素且是 <p>,“正文2” */
article :nth-child(2) { font-weight: bold; } /* 匹配任意标签的第 2 个子元素,即“正文1” */nth-of-type(2n) 选所有偶数位的同标签元素;nth-child(2n) 选所有偶数位置的子元素(哪怕类型不同)li:nth-of-type(odd) 却发现没效果——可能 前面有 用 nth-of-type 做“跳过前 N 个”的安全写法
开始统一设 margin,别直接写 section:nth-of-type(n+3) —— 这其实等价于“第 3 个及之后所有”,但很多人误以为它能“排除前两个”。它确实能,但前提是这些 是连续的同类型兄弟。section:nth-of-type(n+3) 是标准写法,表示从第 3 个开始计数(n=0 时为 3),那么 section:nth-of-type(n+3) 实际只会匹配最后一个 (它是第 3 个 ).section--styled,再用 .section--styled 直接选择nth-of-type(3n+1) 不影响渲染速度,但可读性差,团队协作时建议加注释说明意图伪类里的关键字和数字怎么写才不报错?
nth-of-type 的参数非常敏感,空格、符号、大小写都可能导致整条规则失效(浏览器静默忽略)。nth-of-type(2)、nth-of-type(2n)、nth-of-type(2n+1)、nth-of-type(odd)、nth-of-type(even)nth-of-type( 2 )(前后空格)、nth-of-type(2n +1)(+ 前后有空格)、nth-of-type(2N+1)(N 大写)、nth-of-type(2n+ 1)(+ 后空格)