前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库table th scope screen reader
HTML语义与文档

表格里的 th 和 scope 怎样帮读屏找到表头?

<th> 标记表头;scope="col" 表示这格给一列作表头,scope="row" 表示给一行作表头。读屏读取数据格时可结合相关表头解释数值。

前端进阶之旅 · 一题精讲更新于 2026.09.29
HTML#语义与文档
先看核心答案读代码示例
理解线索

每个数字需要行列上下文

  1. <th>声明表格标题单元格
  2. scope指出表头作用于行还是列
  3. <td>承载对应的数据单元格

scope 适合结构清楚的表格;多层交叉表头可能需要显式 headers。

核心回答

先记住这个答案

表格中的 <th> 不只是把文字加粗,它告诉浏览器和辅助技术这格是表头。简单表格里,列名写 <th scope="col">,每行的名称写 <th scope="row">,数据格就能与行列上下文联系起来。scope 是关联方向,而不是控制视觉样式;复杂表格如果一个数据格对应多层表头,再考虑 id 与 headers 明确列出所有表头。

  • <th> 提供表头语义
  • scope="col" 对应列
  • scope="row" 对应行
  • 复杂跨层表头可用 headers 精确关联

商品价格表要能知道哪一格是什么

只读出“39 元”,用户不知道是哪个商品、哪个字段。加上列头“价格”和行头“茶杯”,这格才有明确含义。

明确行头和列头HTML
<table>
  <caption>商品报价</caption>
  <thead><tr><th scope="col">商品</th><th scope="col">价格</th></tr></thead>
  <tbody>
    <tr><th scope="row">茶杯</th><td>39 元</td></tr>
    <tr><th scope="row">水壶</th><td>129 元</td></tr>
  </tbody>
</table>

阅读茶杯这一行的价格时,数据格能关联“茶杯”和“价格”。<caption> 说明整张表是什么,<th> 与 scope 说明内部各格的关系,职责不同。 鼠标用户可以靠横竖位置看出 39 元对应茶杯;读屏用户逐格移动时,原来的视觉位置不会自然变成语音上下文。这里把商品名写成行头,能让数据格在脱离整张表的视觉网格后仍有含义。若表格第一行只是装饰性标题,不应为了加粗而把它误写成列头。 表头也可以不用浏览器默认的粗体样式,CSS 怎么画不改变语义。别为了视觉效果把普通 <td> 写成 <th>,那会误导辅助技术。

复杂层级别硬套单层规则

有些报表把“第一季度”横跨一月、二月、三月,再在下面细分“收入”和“成本”。这时一个数据格可能需要关联多个表头,单个行列方向未必足够明确。

先尝试简化表结构;如果确实需要复杂多层表头,就给表头唯一 id,在对应数据格的 headers 属性里列出关联 ID。结构越复杂,越要用读屏实际走一遍。

scope="col" 适合列头管辖同一列的数据,scope="row" 适合每一行的行名。若一组数据被跨列的表头统管,还可按表结构考虑 colgroup 或 rowgroup,但前提是分组关系在标记中确实存在。给所有 <th> 一律写 scope="col" 看似省事,行名仍会被错误地解释为列头。

表格的视觉样式也要配合语义检查:响应式页面把列隐藏后,读屏关联仍按当前 DOM 表格结构工作。不要只在桌面宽度看一次,移动端若把表格改成卡片,也要确认每个数值旁仍有可理解的名称。

回答前,多想一步

容易答错的地方

只用加粗样式做表头
视觉加粗不会给数据格建立表头语义,应使用 <th>。
把 scope 当成 CSS 位置
它描述关联方向,不负责排版、宽度或固定表头。
试着用自己的话回答

面试官还会怎么问?

行头写在 <td> 里可以吗?

可以显示,但会失去明确的行表头语义;适合表头的格子应写 <th scope="row">。

什么时候用 headers?

一个数据格需要关联多个跨行跨列表头,scope 难以准确描述时使用。

<caption> 和列头是一回事吗?

不是。<caption> 给整张表命名,列头解释每列的数据含义。

从一道题,走向一组知识

把知识连起来

语义与文档

表格有多层表头时,td 的 headers 该怎么写?

多层表头可通过 id 和 headers 精确关联每个数据格。

语义与文档

time 的 datetime 怎样把“明天下午”变成机器可读时间?

表格数据中的日期可用 <time datetime> 提供机器可读值。

参考资料

  • HTML:语义与文档参考资料

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 商品价格表要能知道哪一格是什么
  3. 复杂层级别硬套单层规则
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑