aria-colindex必须写在role="gridcell"、role="columnheader"或role="rowheader"元素上,表示逻辑表格中的绝对列号,需配合role="grid"或role="treegrid"使用,且应与aria-colcount语义一致。

aria-colindex 必须配合 role="grid" 或 role="treegrid" 使用,不能用于原生 <table>;它声明的是单元格在**逻辑表格中的绝对列号**,不是视觉位置或 DOM 顺序。
<h3>aria-colindex 应该写在哪个元素上</h3>
<p>只写在具有 <code>role="gridcell"、role="columnheader" 或 role="rowheader" 的元素上。常见错误是加在 <tr>、<code><tbody> 或外层 <code><div role="grid"> 上——这些地方加了无效。
<ul>
<li>✅ 正确:<code><div role="gridcell" aria-colindex="3">销售额</div>
<div role="row"><div aria-colindex="3">...</div></div>(aria-colindex 不属于 role="row")<table><tr><td aria-colindex="2">...</td></tr></table>(原生表格不支持该属性)多列表格中怎么填数值:从 1 开始,不能跳号或重复
如果逻辑上总共有 50 列,当前单元格是第 7 列,就写 aria-colindex="7";哪怕这一行只渲染了其中 3 个单元格,只要它们分别对应逻辑列 1、7、49,就得如实写 aria-colindex="1"、aria-colindex="7"、aria-colindex="49"。
- 必须是正整数,且 ≤
aria-colcount值(如果设了) - 不能为 0、负数或小数
- 同一行内允许“稀疏”(比如只渲染第 1、12、48 列),但每个渲染出的
gridcell都必须带准确的aria-colindex - 没渲染的列不要留空占位;要么不渲染,要么用
aria-hidden="true"+ 占位元素并设对应aria-colindex
和 aria-colcount 配合时容易踩的坑
aria-colcount 是全局声明总列数,aria-colindex 是单个单元格的定位坐标——两者必须语义一致,否则屏幕阅读器会报错或跳列。
- 如果
aria-colcount="100",但某单元格写了aria-colindex="101",NVDA 会忽略该单元格或播报异常 - 动态表格中,
aria-colcount不能靠 JS 算 DOM 子节点数来设——得按业务逻辑列数写死(比如后端定义共 32 列,即使前端只显示前 5 列) - 隐藏列(
display: none或aria-hidden="true")仍计入aria-colcount,但对应单元格若未渲染,就不该出现aria-colindex
最常被忽略的一点:没有 aria-colcount 时,辅助技术会尝试按 DOM 顺序推断列数,一旦遇上 flex/grid 布局或异步加载,推断结果大概率错——所以只要用了 aria-colindex,几乎都该同步设 aria-colcount。











