References

Beginner-friendly references for web development, with live, editable examples.

The HTML aria-colindextext attribute

ARIA Accessibility
In short

With aria-colindextext, a cell can report a column label such as AA where the number would be 27. It's a WAI-ARIA 1.3 draft addition that 1.2 lacks, and it shouldn't replace aria-colindex.

Overview

The aria-colindextext attribute defines a human-readable text alternative for the number in aria-colindex. Only WAI-ARIA 1.3 has it, in a draft dated June 4, 2026, and version 1.2, the W3C Recommendation, stops at the number.

Use it only when the provided or calculated aria-colindex isn't meaningful or doesn't reflect the displayed index, as in spreadsheets and chess boards. Column 27 of a spreadsheet is labeled AA, so the number and the label disagree.

A sales sheet that shows 3 of its 40 columns can give column 31 aria-colindextext="Q3 total", so assistive technology can announce that phrase instead of column 31.

It goes on cells, meaning the draft's cell role and the header and grid cell roles that inherit from it. A native <td> qualifies too, and the text is exposed there with or without aria-colindex beside it.

Chrome and Firefox don't pass a value on a <th> down to the cells below it, so repeat the label on each cell of the column.

Syntax

<div role="grid" aria-label="Budget sheet" aria-colcount="702">
  <div role="row">
    <span role="gridcell" aria-colindex="27"
          aria-colindextext="AA">AA1</span>
  </div>
</div>

Values

Value
A string.

Example

Live example
<form id="jump" novalidate>
  <label for="col">Jump to column (1 to 700)</label>
  <input id="col" type="number" min="1" max="700" value="27" style="width: 5em">
  <button>Go</button>
</form>
<table id="sheet" aria-colcount="702" aria-label="Budget sheet" style="border-collapse: collapse; margin-top: 8px">
  <thead id="head"></thead>
  <tbody id="rows"></tbody>
</table>
<p role="status" id="state"></p>
<script>
const input = document.getElementById('col');
const head = document.getElementById('head');
const rows = document.getElementById('rows');
const state = document.getElementById('state');

function letters(n) {
  let text = '';
  while (n > 0) {
    n -= 1;
    text = String.fromCharCode(65 + n % 26) + text;
    n = Math.floor(n / 26);
  }
  return text;
}

function addCell(row, tag, column, text) {
  const cell = document.createElement(tag);
  cell.textContent = text;
  cell.style.padding = '2px 10px';
  cell.setAttribute('aria-colindex', column);
  cell.setAttribute('aria-colindextext', letters(column));
  if (tag === 'th') cell.scope = 'col';
  row.appendChild(cell);
}

function show() {
  const n = Number(input.value);
  if (input.value === '' || !Number.isInteger(n) || n < 1 || n > 700) {
    state.textContent = 'Enter a whole number from 1 to 700.';
    return;
  }
  const kept = [n, n + 1, n + 2];
  head.replaceChildren();
  rows.replaceChildren();
  const top = head.insertRow();
  kept.forEach(column => addCell(top, 'th', column, letters(column)));
  [1, 2].forEach(number => {
    const row = rows.insertRow();
    kept.forEach(column => addCell(row, 'td', column, letters(column) + number));
  });
  state.textContent = 'Column ' + n + ' is labeled ' + letters(n) + '. Its cells carry aria-colindex ' + n + ' and aria-colindextext ' + letters(n) + '.';
}

document.getElementById('jump').addEventListener('submit', event => {
  event.preventDefault();
  show();
});
show();
</script>

Best practices

  • Add aria-colindextext where the column number and the visible label disagree. Leave it off ordinary tables, where the calculated aria-colindex already fits.
  • Match the label people see when the column shows one. A column headed AA takes the text AA.
  • Translate the value when you localize the page, since the draft lists it as a translatable attribute.
  • Keep the text on cells even if aria-colindex sits on the row. The row form of aria-colindex has no text counterpart.

Frequently asked questions

Why can't aria-colindextext go on a row?
The WAI-ARIA 1.3 draft leaves aria-colindextext off rows, because browsers can't reliably calculate it for each cell. Firefox still lists a row's value as an attribute of the row, and its cells don't get it.
Can aria-colindextext replace aria-colindex?
No, aria-colindextext shouldn't replace aria-colindex. Some assistive technologies rely on the number to track the user's position or to offer alternative table navigation.
Do browsers support aria-colindextext?
Chrome and Firefox both expose aria-colindextext on cells in their accessibility trees. How the text reaches the user depends on the assistive technology.
Does aria-colindextext have a DOM property?
Yes, aria-colindextext maps to the ariaColIndexText property. It's available in Chrome 128, Firefox 119 and Safari 26.2.
What can aria-colindextext contain?
The value of aria-colindextext is a string, so it can be a short label or a phrase. AA works, and so does a phrase such as Q3 total.