<tfoot>
Groups the footer content in a table
Definition and Usage
The <tfoot> tag is used to group footer content
in an HTML table.
The <tfoot> element is used in conjunction with
the <thead> and
<tbody> elements to specify each part of a
table (footer, header, body).
Browsers can use these elements to enable scrolling of the table body independently of the header and footer. Also, when printing a large table that spans multiple pages, these elements can enable the table header and footer to be printed at the top and bottom of each page.
<tfoot> element must
have one or more <tr> tags inside.
<tfoot> element must
be a child of a <table> element, and it can be
placed before or after <tbody> elements in the
HTML source, but it will always be rendered at the bottom of the
table.
Browser support and standards
Browser rendering and modern HTML conformance are different questions. Check the current element reference for the browsers and features your project needs; the older source version table is not a current compatibility guarantee.
Read the MDN element referenceAttributes
The <tfoot> tag supports the
Global Attributes in HTML.
The <tfoot> tag also supports the
Event Attributes in HTML.
Deprecated Attributes
The following attributes are deprecated and should not be used. Use CSS instead:
| Attribute | Value | Description |
|---|---|---|
| align | left right center justify char |
Deprecated in HTML5 specifications. Specifies alignment of content |
| char | character | Deprecated in HTML5 specifications. Specifies alignment character |
| charoff | number | Deprecated in HTML5 specifications. Specifies character offset |
| valign | top middle bottom baseline |
Deprecated in HTML5 specifications. Specifies vertical alignment |
Examples
Basic Table with Tfoot
Create a simple table with header, body, and footer:
Example
<table>
<thead>
<tr>
<th>Month</th>
<th>Savings</th>
</tr>
</thead>
<tbody>
<tr>
<td>January</td>
<td>$100</td>
</tr>
<tr>
<td>February</td>
<td>$80</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>Total</td>
<td>$180</td>
</tr>
</tfoot>
</table>
Summary Totals in Footer
Use tfoot to display calculation summaries:
Example
<table border="1">
<thead>
<tr>
<th>Product</th>
<th>Quantity</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr>
<td>Laptop</td>
<td>2</td>
<td>$2,000</td>
</tr>
<tr>
<td>Mouse</td>
<td>5</td>
<td>$50</td>
</tr>
<tr>
<td>Keyboard</td>
<td>3</td>
<td>$150</td>
</tr>
</tbody>
<tfoot>
<tr>
<td colspan="2"><strong>Grand Total</strong></td>
<td><strong>$2,200</strong></td>
</tr>
</tfoot>
</table>
Multiple Footer Rows
Include multiple rows in the table footer:
Example
<table border="1">
<thead>
<tr>
<th>Item</th>
<th>Amount</th>
</tr>
</thead>
<tbody>
<tr>
<td>Product A</td>
<td>$500</td>
</tr>
<tr>
<td>Product B</td>
<td>$300</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>Subtotal</td>
<td>$800</td>
</tr>
<tr>
<td>Tax (10%)</td>
<td>$80</td>
</tr>
<tr>
<td><strong>Total</strong></td>
<td><strong>$880</strong></td>
</tr>
</tfoot>
</table>
Styled Table Footer
Apply custom CSS styling to the table footer:
Example
Approved-page light CSS-variable defaults are supplied: --border-color. The snippet includes CSS inside its HTML.
<style>
table {
width: 100%;
border-collapse: collapse;
}
thead {
background-color: #745af2;
color: white;
}
tfoot {
background-color: #f4f4f4;
font-weight: bold;
border-top: 3px solid #745af2;
}
th, td {
padding: 12px;
text-align: left;
border: 1px solid var(--border-color);
}
tbody tr:nth-child(even) {
background-color: #f9f9f9;
}
</style>
<table>
<thead>
<tr>
<th>Department</th>
<th>Budget</th>
</tr>
</thead>
<tbody>
<tr>
<td>Marketing</td>
<td>$50,000</td>
</tr>
<tr>
<td>Engineering</td>
<td>$100,000</td>
</tr>
</tbody>
<tfoot>
<tr>
<td>Total Budget</td>
<td>$150,000</td>
</tr>
</tfoot>
</table>
Sticky Footer Table
Create a table with a sticky footer that remains visible when scrolling:
Example
Approved-page light CSS-variable defaults are supplied: --text-primary, --border-color. The snippet includes CSS inside its HTML.
<style>
.table-container {
max-height: 300px;
overflow-y: auto;
position: relative;
}
table {
width: 100%;
border-collapse: collapse;
}
tfoot {
position: sticky;
bottom: 0;
background-color: var(--text-primary);
color: white;
z-index: 10;
}
th, td {
padding: 12px;
border: 1px solid var(--border-color);
}
</style>
<div class="table-container">
<table>
<thead>
<tr>
<th>Item</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<!-- Many rows here -->
<tr>
<td>Item 1</td>
<td>$10</td>
</tr>
<!-- ... more rows ... -->
</tbody>
<tfoot>
<tr>
<td>Total</td>
<td>$500</td>
</tr>
</tfoot>
</table>
</div>
Complex Table with All Sections
Create a comprehensive table using thead, tbody, and tfoot:
Example
<table border="1">
<thead>
<tr>
<th>Student Name</th>
<th>Math</th>
<th>Science</th>
<th>English</th>
<th>Average</th>
</tr>
</thead>
<tbody>
<tr>
<td>John Doe</td>
<td>85</td>
<td>90</td>
<td>88</td>
<td>87.7</td>
</tr>
<tr>
<td>Jane Smith</td>
<td>92</td>
<td>88</td>
<td>95</td>
<td>91.7</td>
</tr>
<tr>
<td>Bob Johnson</td>
<td>78</td>
<td>82</td>
<td>80</td>
<td>80.0</td>
</tr>
</tbody>
<tfoot>
<tr>
<td><strong>Class Average</strong></td>
<td><strong>85.0</strong></td>
<td><strong>86.7</strong></td>
<td><strong>87.7</strong></td>
<td><strong>86.5</strong></td>
</tr>
</tfoot>
</table>
Try it Yourself
Interactive Example
Here's a live example of a table with tfoot:
| Product | Quantity | Price |
|---|---|---|
| Laptop | 1 | $1,000 |
| Mouse | 2 | $40 |
| Keyboard | 1 | $75 |
| Total | $1,115 | |
Table Structure: thead, tbody, tfoot
A well-structured HTML table consists of three main sections:
- <thead>: Contains the header rows with column titles
- <tbody>: Contains the main data rows
- <tfoot>: Contains the footer rows, typically summaries or totals
Structure Example
<table>
<thead>
<!-- Header rows with <th> elements -->
</thead>
<tbody>
<!-- Data rows with <td> elements -->
</tbody>
<tfoot>
<!-- Footer rows with summary data -->
</tfoot>
</table>
Placement in HTML Source
An important feature of <tfoot> is that it can
be placed before <tbody> in the HTML source
code, but browsers will always render it at the bottom of the
table:
Example
<table>
<thead>
<tr><th>Header</th></tr>
</thead>
<!-- tfoot appears before tbody in source -->
<tfoot>
<tr><td>Footer</td></tr>
</tfoot>
<tbody>
<tr><td>Row 1</td></tr>
<tr><td>Row 2</td></tr>
<!-- Many more rows... -->
</tbody>
</table>
<!-- Browser renders as: Header → Rows → Footer -->
<tfoot> before
<tbody> allows the footer to be downloaded and
displayed before all the body rows are loaded, improving perceived
performance.
Accessibility Benefits
Using <tfoot> provides important accessibility
benefits:
- Screen readers: Can identify and announce footer content separately from body data
- Navigation: Users can jump directly to footer summaries
- Context: Helps users understand table structure and organization
- Semantic meaning: Clearly indicates summary or total information
- Print formatting: Browsers can repeat footer on each printed page for long tables
Best Practices
-
Use
<tfoot>for summary information, totals, averages, or concluding data -
Always use
<tfoot>together with<thead>and<tbody>for well-structured tables -
The
<tfoot>element should contain at least one<tr>element -
Use
colspanin footer cells to span multiple columns for summary labels - Style footer rows differently from body rows to make summaries stand out
-
Consider using
<th>elements in footer for column labels - Make footer content bold or visually distinct for better readability
- For long scrollable tables, consider using sticky positioning for the footer
- Ensure footer data is semantically meaningful and provides value to users
Default CSS Settings
Most browsers will display the <tfoot> element
with the following default values:
Default CSS
Unavailable or blocked: markup context “Matching lesson markup is not supplied; this fragment uses a generic HTML scaffold.”. Provide inline styles and scripts, embedded images or the missing HTML context. External requests and browser dialogs stay blocked.
tfoot {
display: table-footer-group;
vertical-align: middle;
border-color: inherit;
}