HTML Guides for row group
Learn how to identify and fix common HTML validation errors flagged by the W3C Validator — so your pages are standards-compliant and render correctly across every browser. Also check our Accessibility Guides.
When you use the rowspan attribute on a table cell, you’re telling the browser that cell should vertically span across multiple rows. However, each row group element — <thead>, <tbody>, and <tfoot> — acts as a boundary. A cell’s rowspan cannot extend beyond the row group that contains it. If a <tbody> has 2 rows and a cell in the first row declares rowspan="4", the cell tries to span into rows that don’t exist within that group. The validator reports that the cell span is “clipped to the end of the row group.”
This matters for several reasons. First, assistive technologies like screen readers rely on accurate table structure to navigate cells and announce row/column relationships. A rowspan that overshoots its row group creates a mismatch between the declared structure and the actual rendered table, which can confuse users. Second, browsers handle this inconsistently — most will silently clip the span, but the rendered result may not match your intent. Third, if you later add a separate <tbody> or <tfoot> after the current group, the clipped span won’t bridge into it, potentially breaking your layout in unexpected ways.
To fix this, you have two options: reduce the rowspan value to match the number of remaining rows in the row group, or add enough rows to the group so the span fits. You should also check whether your row group boundaries (<thead>, <tbody>, <tfoot>) are placed where you actually intend them.
Note that this same issue applies to colspan exceeding the column count of a row group, though the warning message specifically mentions rowspan clipping to the end of the row group established by a <tbody> (or <thead> / <tfoot>) element.
Examples
Incorrect: rowspan exceeds available rows in <tbody>
This <tbody> has only 2 rows, but the first cell declares rowspan="4":
<table>
<tbody>
<tr>
<td rowspan="4">Spans too far</td>
<td>Row 1</td>
</tr>
<tr>
<td>Row 2</td>
</tr>
</tbody>
</table>
The cell tries to span 4 rows, but only 2 exist in the <tbody>. The browser clips it to 2 rows, and the validator reports the error.
Fixed: Reduce rowspan to match available rows
<table>
<tbody>
<tr>
<td rowspan="2">Spans two rows</td>
<td>Row 1</td>
</tr>
<tr>
<td>Row 2</td>
</tr>
</tbody>
</table>
Fixed: Add rows to accommodate the span
If you actually need the cell to span 4 rows, add the missing rows:
<table>
<tbody>
<tr>
<td rowspan="4">Spans four rows</td>
<td>Row 1</td>
</tr>
<tr>
<td>Row 2</td>
</tr>
<tr>
<td>Row 3</td>
</tr>
<tr>
<td>Row 4</td>
</tr>
</tbody>
</table>
Incorrect: rowspan crosses a row group boundary
This is a common source of the error — a span in one <tbody> trying to reach into the next:
<table>
<tbody>
<tr>
<td rowspan="3">Tries to cross groups</td>
<td>Group 1, Row 1</td>
</tr>
<tr>
<td>Group 1, Row 2</td>
</tr>
</tbody>
<tbody>
<tr>
<td>Group 2, Row 1</td>
</tr>
</tbody>
</table>
The cell with rowspan="3" cannot span from the first <tbody> (2 rows) into the second <tbody>. Each group is independent.
Fixed: Merge the row groups or adjust the span
If the rows logically belong together, combine them into a single <tbody>:
<table>
<tbody>
<tr>
<td rowspan="3">Spans all three rows</td>
<td>Row 1</td>
</tr>
<tr>
<td>Row 2</td>
</tr>
<tr>
<td>Row 3</td>
</tr>
</tbody>
</table>
Ready to validate your sites?
Start your free trial today.