表格无障碍:scope、summary 与 caption
添加说明文字和 scope 属性,为屏幕阅读器提供支持。
表格无障碍:scope、summary 与 caption 是 CoddyKit 上的免费 HTML Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 HTML Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 HTML Academy 课程共包含 4 节课。
为什么表格无障碍访问很重要
屏幕阅读器用户会逐个单元格浏览数据表,因此每个数据单元格都需要有对应的表头上下文。
- 没有正确的标记时,屏幕阅读器只会读出原始值,而不会提供列或行的上下文
- 无障碍表格可以让所有人都理解数据
表格标题元素
<caption> 为表格提供可见的标题:
<table>
<caption>Q4 2024 Product Sales by Region</caption>
<thead>...</thead>
<tbody>...</tbody>
</table>
<!-- caption is the first child of table -->
<!-- Screen readers announce it when entering the table -->
<!-- Helps all users understand the table's purpose at a glance -->设置表格标题样式
使用 CSS 设置标题的样式和位置:
caption {
caption-side: bottom; /* or top (default) */
font-style: italic;
font-size: 0.875rem;
color: #666;
text-align: left;
padding: 0.5rem 0;
}表头单元格上的作用域属性
scope 属性会告知屏幕阅读器表头适用于哪些单元格:
<thead>
<tr>
<th scope="col">Name</th> <!-- header for a column -->
<th scope="col">Score</th>
<th scope="col">Grade</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">Alice</th> <!-- header for a row -->
<td>95</td>
<td>A</td>
</tr>
</tbody>作用域值
scope 属性的值:
col——表头适用于同一列中的单元格row——表头适用于同一行中的单元格colgroup——表头适用于列组中的单元格rowgroup——表头适用于行组中的单元格(tbody/thead)
复杂表头的作用域设置
跨列表头使用 colgroup 或 rowgroup 作用域:
<thead>
<tr>
<th rowspan="2" scope="col">Name</th>
<th colspan="2" scope="colgroup">2024</th> <!-- colgroup -->
</tr>
<tr>
<th scope="col">Q1</th>
<th scope="col">Q2</th>
</tr>
</thead>数据单元格上的标头关联属性
对于非常复杂的表格,请使用 headers 将单元格与其表头明确关联:
<thead>
<tr>
<th id="hname">Name</th>
<th id="hq1">Q1</th>
<th id="hq2">Q2</th>
</tr>
</thead>
<tbody>
<tr>
<th id="ralice" headers="hname">Alice</th>
<td headers="hq1 ralice">95</td>
<td headers="hq2 ralice">88</td>
</tr>
</tbody>何时使用作用域而非标头关联
使用建议:
- 带单行表头的简单表格 → 使用
scope="col"和scope="row" - 带复杂跨列表头的表格 → 使用
headers属性和 ID 引用 - WCAG 1.3.1 要求以编程方式将表头与其数据单元格关联起来
表格上的 ARIA 标签属性
当不希望在视觉上显示表格标题时,请使用 ARIA 标签属性:
<!-- caption with visually-hidden class -->
<table aria-label="Q4 2024 Product Sales by Region">
...
</table>
<!-- Or use aria-labelledby to reference a heading -->
<h2 id="table-title">Sales Data</h2>
<table aria-labelledby="table-title">...</table>测试表格的无障碍性
验证表格是否具备无障碍性的方法:
- 使用屏幕阅读器中的表格面板(VoiceOver、NVDA)
- 安装 axe DevTools 浏览器扩展
- 针对页面 URL 运行
pa11yCLI - W3C 标记验证器可以检测缺少表格标题的问题
摘要属性(已弃用)
summary 属性曾用于帮助屏幕阅读器理解复杂表格,现在已在 HTML5 中弃用:
<!-- Old HTML 4.01 — do not use: -->
<table summary="This table shows quarterly sales...">
<!-- Modern HTML5 replacement: -->
<table>
<caption>This table shows quarterly sales...</caption>
</table>
<!-- Or: aria-describedby to a paragraph -->无障碍表格检查清单
数据表格的无障碍检查清单:
- 使用
<caption>为表格添加标签 - 为所有表头单元格使用
<th> - 为所有
<th>元素添加scope - 使用
<thead>、<tbody>和<tfoot>组织结构 - 对于复杂表格,请使用
id+headers
快速检查
对于作为整列表头的 th,应使用哪个作用域值?
回顾:表格无障碍访问
无障碍表格要点:
<caption>——可见的表格标题,屏幕阅读器会播报scope="col"——列表头scope="row"——行表头scope="colgroup/rowgroup"——跨列表头id+headers——用于复杂的多级表头- 使用 axe、pa11y 或 VoiceOver 进行测试
常见问题解答
「表格无障碍:scope、summary 与 caption」课时是免费的吗?
是的 — 「表格无障碍:scope、summary 与 caption」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 HTML Academy 课程的其余内容,请升级到 CoddyKit PRO。 HTML Academy 课程共包含 4 节课。
「表格无障碍:scope、summary 与 caption」这节课中我会学到什么?
添加说明文字和 scope 属性,为屏幕阅读器提供支持。 你通过在浏览器中直接运行的动手代码来练习 HTML Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 HTML Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 HTML Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「表格无障碍:scope、summary 与 caption」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 HTML Academy 课中编写并运行代码吗?
能。每节 HTML Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- table、tr、td 与 th
- thead、tbody 与 tfoot 结构
- 用于跨越单元格的 colspan 与 rowspan
- 表格无障碍:scope、summary 与 caption