:first-child不生效的主因是目标元素并非父元素的第一个子节点,因空白文本或注释节点被计入DOM;应检查开发者工具确认结构,或改用:first-of-type、修正空格、排查优先级与JS动态插入影响。
:first-child 选择器不生效,最常见的原因是它匹配的不是你“以为的第一个子元素”,而是严格按 HTML 结构中**父元素下的第一个子节点**来判断的。它不看元素类型,只看 DOM 树中的位置顺序。
比如以下 HTML:
如果 开头有换行、空格或注释,浏览器会把它们解析为文本节点(或注释节点),那么 就不是 :first-child 了。
:first-child 要求元素既是第一个子节点,又要是指定标签;:first-of-type 只要求是该类型中第一个出现的,对前面的其他标签不敏感。
中第一
个 ?用 p em:first-of-type
,且它必须是
下第一个子元素?才用 ul li:first-child
:first-of-type 更符合直觉,也更稳定即使结构正确,样式也可能被覆盖或写错:
:first-child(不是 :firstchild 或 ::first-child —— 伪类用单冒号):first-child 样式如果元素是 JS 动态插入的,要确保 CSS 规则在插入前已加载,且插入时结构符合 :first-child 的条件。
innerHTML 插入多个 ,但没包裹在
内,或插入后第一个子节点不是目标元素el.classList.add('first')),再用 .first 控制样式,更可控