使用替代仅实现视觉表头,必须配合、scope属性和才能确保语义化、可访问性和结构健壮性。

直接用 <th> 替代 <code><td> 就能添加表头,但仅靠加粗居中远远不够——语义缺失、屏幕阅读器无法识别、复杂表格错位,这些问题都会在你忽略 <code>scope 或 <thead> 时集中爆发。
<h3>用 <code><th> 替换第一行的 <code><td> 是最简方式
<p>浏览器默认把 <code><th> 渲染为加粗+居中,视觉上立刻区分表头和数据。但这只是表象,背后没做任何语义声明。
<ul><li>必须放在 <code><tr> 内,不能单独存在;<code><th> 和 <code><td> 数量要严格对应列数,否则表格结构会塌陷
<li>如果表头跨多行(比如“销售部”下面再分“Q1”“Q2”),只靠 <code><th> 不够,得配合 <code>rowspan 或 colspan
<tr> 里混用 <code><th> 和 <code><td> ——哪怕只是想让某列标题加粗,也该统一用 <code><th>,否则可访问性检测工具会报错
<h3><code><thead> + <code><th> 才算真正语义化
<p>单纯用 <code><th> 只解决样式,<code><thead> 才告诉浏览器“这部分是表头区”,对打印分页、滚动固定表头、CSS 选择器定位都起决定作用。
<ul><li><code><thead> 必须是 <code><table> 的直接子元素,且只能出现一次;后面紧跟 <code><tbody> 放数据行
<li>写成 <code><table>
<thead><tr><th>姓名</th></tr></thead>
<tbody><tr><td>张三</td></tr></tbody>
</table>,比裸写 <tr><th>姓名</th></tr> 更健壮thead th 单独控制表头样式,而不用依赖 class,减少冗余类名
scope 属性不是可选,而是复杂表格的刚需
当表格既有列标题(如“姓名”“年龄”),又有行标题(如“部门A”“部门B”),不加 scope,屏幕阅读器根本分不清某个 <td> 对应的是哪行哪列的标题。
<ul><li>
<code>scope="col":加在列标题 <th> 上,表示它管整列;常见于第一行
<li>
<code>scope="row":加在行标题 <th> 上,表示它管整行;常见于第一列
<li>不要滥用 <code>scope="auto"(浏览器自动推断)——尤其在嵌套表头或合并单元格后,自动推断大概率出错
别漏掉 <caption></caption>:表格的“标题党”但很关键
<caption></caption> 不是装饰,它是表格的唯一官方标题,会被搜索引擎索引、被辅助技术优先读出,而且默认居中显示在表格上方。
- 必须紧贴
<table> 开始标签之后,不能塞进 <code><thead> 里 <li>避免写成 <code><caption>员工信息表</caption>这种空泛描述,最好带上下文,比如<caption>2026年Q2销售团队绩效统计</caption> - 如果表格需要隐藏标题(比如用于布局),用 CSS 的
visually-hidden类,而不是删掉<caption></caption>——语义不能丢
真正容易被跳过的不是怎么写 <th>,而是后续三件事:<code><thead> 的包裹、<code>scope 的显式声明、<caption></caption> 的存在感。这三处一缺,表格就从“结构化数据”退化成“看起来像表格的 div 堆砌”。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











