<tbody>: The TBODY Element
Last updated: 2026-10-13
<tbody>The TBODY Element
The table body wrapping data rows (tr); a table may have multiple tbody for grouping.
| Category | Tables |
|---|---|
| Content Model | Flow content |
| Allowed Parents | Any element that accepts flow content |
| Content Tag | Yes — requires closing </tbody> tag |
| Status | Standard |
📝 Syntax
<tbody>
<tr><td>...</td></tr>
</tbody>
▶ Example
Edit the code below and see the live result in the playground:
🌐 Browser Support
| Browser | |||||
|---|---|---|---|---|---|
| <tbody> | ✓ v1 | ✓ v12 | ✓ v1 | ✓ v1 | ✓ v1 |
| Supported in all major browsers | |||||
Tip: Browsers insert tbody implicitly if omitted; writing it explicitly helps scripting.
❓ FAQ
QCan there be multiple tbody elements?
AYes, and it is useful: group data rows into several
<tbody> blocks to color groups via CSS or stripe groups with tbody:nth-of-type(). Each tbody is an independent row group in the DOM.QWhy does tbody always appear in the DOM?
AThe HTML parser requires table rows to belong to a row group, so omitting
<tbody> makes the browser insert an implicit one. That is why table children in JS are tbody nodes, not tr — the DOM does not always mirror the source.QDoes the order of tbody, thead, and tfoot matter?
AWrite thead → tbody → tfoot in visual order. Historically tfoot could come first (so streaming renders got the footer early), but modern standards follow visual order. The browser sorts groups into place in the DOM, yet writing them correctly beats relying on the parser.
🏷️ Related Tags
💡 Related Cases
More case studies coming soon — check back later.