HTML tbody tag


The tbody element in HTML represents the body of a table, encapsulating a set of rows <tr> that actually contain data, as opposed to the table’s header (thead) and footer (tfoot) which define the table’s structure. The use of tbody is especially important for large tables or for tables whose data is dynamically generated, as it allows browsers to render the table progressively. This can significantly improve the user experience by displaying content faster and more efficiently.


The primary purpose of the tbody tag is to group the body content of a table. While it may seem optional for small tables, its true utility is realized in more complex table structures. For instance, a table can contain multiple tbody elements, each acting as a separate section or grouping of rows within the table. This is particularly useful for semantic organization and can aid screen readers and other assistive technologies in navigating the table content. Additionally, some CSS styling properties, especially those related to positioning and visibility, can be uniquely applied to tbody to affect all rows within it collectively.


The tbody element is used within a <table> tag and can follow <thead> and precede <tfoot> elements, if they are present. The basic syntax is straightforward:

    <!-- Header rows go here -->
    <!-- Table body rows go here -->
    <!-- Footer rows go here -->

Note that while the <thead> and <tfoot> are optional, including at least one tbody in a table is necessary to adhere to HTML standards.


The tbody element itself doesn’t support any unique attributes; it only supports global attributes common to all HTML tags, such as class, id, style, and event attributes. However, understanding its relation to table styling and manipulation in conjunction with these attributes can be valuable. For example, assigning a class to a tbody can be used to apply specific styling rules or to manipulate table sections via JavaScript or CSS.


Styling the tbody element can significantly enhance table readability and aesthetic appeal. CSS properties applied to tbody affect all contained table rows and cells. This collective styling capability is useful for setting font sizes, colors, and background styles consistently across rows. For example:

tbody {
  background-color: #f2f2f2;
  color: black;

This CSS snippet sets a background color and text color for all rows encapsulated within tbody. For zebra striping or other row-specific styling, CSS nth-child selectors can be employed within the tbody context.

Accessibility Considerations

When using tbody to structure table data, consider its impact on accessibility. Screen readers and other assistive technologies rely on the proper semantic structuring of tables to navigate and interpret content for users. Specifically, a well-structured table with thead, tbody, and tfoot allows these technologies to understand the context and significance of the data being presented. Therefore, ensuring that tbody is used appropriately and in conjunction with header (th) tags within the thead section is critical for creating accessible content.

Best Practices

  • Always use tbody to encapsulate the main body of your table, even if it seems redundant for smaller tables. This maintains consistency and ensures your tables are rendered correctly across different browsers and devices.
  • Consider using multiple tbody elements to semantically group rows of data within large tables. This not only improves readability but also enhances accessibility by providing more structure.
  • Use CSS classes and id attributes in conjunction with tbody to style and manipulate sections of your table more efficiently.


The tbody element is a fundamental part of structuring and styling tables in HTML. Its proper use ensures that tables are accessible, efficiently rendered, and stylistically consistent. By understanding and implementing tbody in accordance with best practices, web developers can create complex, data-rich tables that are both attractive and user-friendly.