是,NVDA 2022+ 原生支持 headers 属性,但要求 id 显式存在、完全匹配且唯一;若 headers 失效则静默降级为行列推断,不报错。
id 关联、且 headers 值完全匹配的单元格。NVDA 2022+ 版本已原生支持 headers 属性,不再依赖 scope 回退;但若写法松散(比如大小写不一致、空格混入、ID未声明),它会静默降级为按视觉行列推断,读出“第2行第3列”,而非语义化内容。headers 必须指向真实存在的 th 元素的 id,不能是 class 或任意字符串 headers 值要用空格分隔,不是逗号或制表符:headers="col1 row2" ✅,headers="col1,row2" ❌ th 必须有 id,且该 id 在整个页面唯一 id,NVDA 只取第一个,其余忽略 th 缺少 id,或 id 值含空格/特殊字符(如 id="hospitalization fee") td 的 headers 指向了一个不存在的 id,浏览器控制台无报错,但 NVDA 完全跳过该关联 table 里再套 table),导致 headers 引用跨表失效(HTML 规范不允许跨表引用) id 和 headers,NVDA 只读初始渲染状态 scope="col" 是隐式推导:NVDA 向上找最近的 th,不校验 ID,适合简单线性表头 headers 是显式绑定:必须精确匹配 id,适合多级、非线性、跨列合并的复杂表头(如“费用类型”下并列“医保支付”“自付金额”) headers;若 headers 失效,则 fallback 到 scope(前提是 scope 写法合规) scope 无法表达“某单元格同时属于行标题 + 列标题 + 分组标题”这种三维关系,headers 可以(如 headers="group1 col3 row5") td,手动加上 headers="test-col test-row" th,分别加 id="test-col" 和 id="test-row" th 文本非空(如 <th id="test-col">单价</th>) headers 已命中;若只报行列号,检查 ID 是否拼错或重复 复杂表头真正难的不是写对属性,而是让每个 id 在语义上可区分、在结构上不冲突——比如“费用”和“住院费用”不能共用 id="fee",否则 NVDA 无法分辨上下文。