# Table columns in range X…Y established by element “td” have no cells beginning in them.

> Canonical HTML version: https://rocketvalidator.com/html-validation/table-columns-in-range-x-y-established-by-element-td-have-no-cells-beginning-in-them
> Attribution: Rocket Validator (https://rocketvalidator.com)
> License: CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/)

When a table cell uses `colspan` to span multiple columns, the HTML specification requires that the columns being spanned actually exist and are accounted for in the table's column structure. If a cell's `colspan` creates columns that no other row has cells beginning in, the validator flags those empty columns. For example, if your widest row has 3 columns but another row contains a cell with `colspan="6"`, columns 4 through 6 are established by that cell but are essentially phantom columns — no cell in any other row starts in them.

This matters for several reasons. Screen readers and assistive technologies rely on a coherent table structure to navigate cells and announce column/row relationships. An inconsistent column count can confuse these tools, leading to a poor experience for users who depend on them. Browsers may render the table without visible errors, but the underlying structure is invalid, which can cause unpredictable layout behavior across different rendering engines.

## How to Fix

1. **Identify the offending row.** Look for `<td>` or `<th>` elements whose `colspan` value creates more columns than the rest of the table defines.
2. **Reduce the `colspan` value** so it matches the actual number of columns in the table.
3. **Alternatively, add cells to other rows** if you genuinely need more columns — make sure every column has at least one cell that begins in it.

A good rule of thumb: the `colspan` of any cell, combined with its starting column position, should never exceed the total column count of the table.

## Examples

### Incorrect: `colspan` exceeds the table's column count

This table has 2 columns (established by the first row), but the second row's `colspan="5"` tries to span 5 columns. Columns 3 through 5 have no cells beginning in them in any row.

```html
<table>
  <tr>
    <td>First</td>
    <td>Second</td>
  </tr>
  <tr>
    <td colspan="5">Spans too many columns</td>
  </tr>
</table>
```

### Correct: `colspan` matches the table's column count

Set the `colspan` to `2` so the cell spans exactly the columns that exist.

```html
<table>
  <tr>
    <td>First</td>
    <td>Second</td>
  </tr>
  <tr>
    <td colspan="2">Spans both columns</td>
  </tr>
</table>
```

### Incorrect: mixed rows with mismatched column counts

Here the first row establishes 3 columns, but the second row creates a cell starting at column 1 that spans 5 columns, leaving columns 4 and 5 with no cells beginning in them.

```html
<table>
  <tr>
    <td>A</td>
    <td>B</td>
    <td>C</td>
  </tr>
  <tr>
    <td colspan="5">Too wide</td>
  </tr>
</table>
```

### Correct: expand the table or reduce the span

**Option A:** Reduce the `colspan` to match the existing 3 columns.

```html
<table>
  <tr>
    <td>A</td>
    <td>B</td>
    <td>C</td>
  </tr>
  <tr>
    <td colspan="3">Spans all three columns</td>
  </tr>
</table>
```

**Option B:** If you truly need 5 columns, add cells to the other rows so every column has a cell beginning in it.

```html
<table>
  <tr>
    <td>A</td>
    <td>B</td>
    <td>C</td>
    <td>D</td>
    <td>E</td>
  </tr>
  <tr>
    <td colspan="5">Spans all five columns</td>
  </tr>
</table>
```
