table tr:first-child 失效是因为浏览器自动插入 tbody,使 tr 不是 table 的直接子元素;应显式使用 thead>tr 或 tbody>tr:first-child 等语义化选择器。

tr:first-child 看似合理,但实际在大多数表格结构中根本选不到第一行——因为 通常不是 的直接第一个子元素。为什么 table tr:first-child 常常失效
浏览器解析 HTML 表格时,会自动补全缺失的语义容器。即使你写的是:
实际 DOM 中, 往往被包裹进 (除非你显式写了 或 )。所以 的第一个子元素是 ,而不是 ,tr:first-child 自然不匹配。- 检查开发者工具 Elements 面板,确认
的父节点是不是 或
- 若第一行是表头,应使用
thead tr:first-child 或更稳妥的 thead > tr
- 若第一行是数据行且没写
,浏览器仍可能自动插入,不能依赖手写结构
可靠写法:用 thead > tr 或 tbody > tr:first-child
真正可控的方式是主动定义语义结构:
- 把表头明确包在
里 → 用 thead > tr 选中它(无需伪类,更稳定)
- 把首行数据明确包在
里 → 用 tbody > tr:first-child(注意 > 子选择器,避免误中嵌套 )
- 如果必须兼容无
/
的旧 HTML,可加一层 wrapper 类,比如
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!