scope属性是表格语义必需声明,非可选装饰;必须按管辖方向正确使用scope="col"(管整列)或scope="row"(管整行),跨行跨列表头须显式声明,复杂结构应改用headers/id绑定。

scope 属性不是可选的装饰,而是表格语义的必需声明——没写或写错,屏幕阅读器就无法把“张三”和“销售额”正确配对,但浏览器完全不报错,你根本察觉不到问题。
scope="col" 和 scope="row" 怎么选?只看它“管谁”,不看文字内容
判断依据非常直接:这个 <th> 是横着管一整列(下方所有 <code><td>),还是竖着管一整行(右侧所有 <code><td>)。
<ul><li>
<code>scope="col" 必须用在 <thead> 里的 <code><th>,且该单元格正下方是同一列的数据 —— 比如顶部的 <code><th scope="col">姓名、<code><th scope="col">入职时间
<li>
<code>scope="row" 必须用在 <tbody> 每行第一个 <code><th>,且该单元格右侧是本行数据 —— 比如首列的 <code><th scope="row">华东区、<code><th scope="row">华南区
<li>左上角那个空 <code><th>(第1行第1列)既不属某列也不属某行,不要加 <code>scope;加了反而误导读屏逻辑
scope 写在 <td> 上完全无效,HTML5 明确禁止,浏览器会忽略
<h3>带 rowspan 或 colspan 的表头必须显式加 scope</h3>
<p>仅靠 <code>rowspan="2" 或 colspan="3",屏幕阅读器无法推断语义。它不会自动认为“这个合并的表头管下面两行”,必须人工声明。- 一个跨两行的列标题,比如
<th rowspan="2" scope="col">部门,<code>scope="col"不可省 - 一个跨三列的季度总标题,比如
<th colspan="3" scope="colgroup">Q1 业绩,此时必须配合 <code><colgroup></colgroup>使用,否则scope="colgroup"白写 - 常见错误:只写
<th colspan="2">销售额 却漏掉 <code>scope,结果读屏时把第二列数据全归到第一列标题下复杂嵌套表头别硬撑,改用 headers/id 绑定
当表格出现“大类 → 小类 → 指标”三级结构,或表头交叉覆盖(比如某个
<th> 同时影响多行多列),<code>scope已经力不从心。立即学习“前端免费学习笔记(深入)”;
-
scope最多支持单向管辖(只管行或只管列),无法表达二维绑定关系 - 正确做法:给每个
<th> 加 <code>id,再给对应<td> 加 <code>headers属性,用空格分隔多个 id,例如<td headers="q1_sales q1_region"> <li> <code>scope="rowgroup"和scope="colgroup"不是视觉分组开关,只有真实存在<tbody> 或 <code><colgroup></colgroup>结构时才生效;没包<tbody> 却设 <code>scope="rowgroup",等于没写最容易被跳过的点:哪怕只是个两列表格,只要用了
rowspan="2",就必须补scope;最常被误加的地方,是把scope塞进<td> 里——它只对 <code><th> 生效,写在哪都没用。</th>
-



















