:nth-child(-n+3)匹配父元素中位置为第1、2、3的子节点(无论类型),依赖所有子节点(含文本、注释)的物理序号;混入非目标标签或空白节点时易失效,此时应改用:nth-of-type(-n+3)或显式声明。

什么是 :nth-child(-n+3) 的实际含义
这个伪类不是“选前三个”,而是“选所有满足 n ≤ 3 的第 n 个子元素”——它依赖于元素在父容器中的**物理位置**,且只匹配那些**恰好是第 1、2、3 个子节点**的元素,不管它们是什么类型或有没有 class。
常见误解是以为它像 它最适合结构干净、子元素全是目标类型且顺序可控的场景,比如手写列表、卡片容器、表格行( 如果父元素混有多种标签,比如: not a list item 那么: 最常见的“写了但没生效”,往往不是语法错,而是 DOM 结构干扰了子元素序号: 调试时可用浏览器开发者工具的 Elements 面板右键「Break on > subtree modifications」,再检查 真正想“稳稳选前三个目标元素”,多数情况下应优先考虑加 class(如 :nth-of-type() 那样按元素类型筛选,但它不是。比如父元素里第 1 个是
、第 3 个是 ,这三者都会被选中;但如果第 2 个是注释节点或文本节点(非元素节点),那第 2 个 什么时候用
:nth-child(-n+3) 真正有效)等。
:nth-child 在 IE9+ 支持)
:nth-child(-n+3) 和 :nth-of-type(-n+3) 的关键区别
li:nth-child(-n+3) → 只匹配第一个 (它是第 1 个子元素), 是第 2 个子元素所以不匹配,第二个 是第 3 个子元素 → 匹配,第三个 是第 4 个子元素 → 不匹配。结果:只选中 A 和 Bli:nth-of-type(-n+3) → 忽略 和 :A 是第 1 个 ,B 是第 2 个,C 是第 3 个 → 全部匹配
容易被忽略的 DOM 细节导致失效
)<script></script> 或 标签(虽不渲染,但算子节点)display: contents 的子元素不参与盒模型,但仍计入 :nth-child 计数childElementCount 和 childNodes.length 是否一致。.featured)或改用 JS 控制,而不是押注于 DOM 序号的稳定性。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











