← Back to All Tags

<th>

Establishes introductory header content cell in a table

Definition and Usage

The <th> element establishes a header cell in an HTML table.

An HTML table has two kinds of cells:

  • Header cells - contains header information (created with the <th> element)
  • Data cells - contains data (created with the <td> element)

The text in <th> elements are bold and centered by default.

The text in <td> elements are regular and left-aligned by default.

Tip: Use the scope attribute to specify whether a header cell is a header for a column, row, or group of columns or rows.
Accessibility Note: The <th> element with the scope attribute helps screen readers understand the table structure better.

Browser Support

The <th> tag is supported in all major browsers:

Chrome
Chrome
Yes
Firefox
Firefox
Yes
Safari
Safari
Yes
Edge
Edge
Yes
Opera
Opera
Yes

Attributes

Attribute Value Description
scope col
row
colgroup
rowgroup
Specifies whether a header cell is a header for a column, row, or group of columns or rows
colspan number Specifies the number of columns a header cell should span
rowspan number Specifies the number of rows a header cell should span
headers header_id Specifies one or more header cells a cell is related to
abbr text Specifies an abbreviated version of the content in a header cell

Deprecated Attributes

The following attributes are deprecated in HTML5 and should not be used. Use CSS instead:

Attribute Value Description
Deprecated align left
right
center
justify
char
Deprecated in HTML5 specifications. Use CSS instead. Specifies the horizontal alignment
Deprecated bgcolor rgb(x,x,x)
#xxxxxx
colorname
Deprecated in HTML5 specifications. Use CSS instead. Specifies the background color
Deprecated height pixels
%
Deprecated in HTML5 specifications. Use CSS instead. Specifies the height
Deprecated width pixels
%
Deprecated in HTML5 specifications. Use CSS instead. Specifies the width
Deprecated valign top
middle
bottom
baseline
Deprecated in HTML5 specifications. Use CSS instead. Specifies the vertical alignment

Examples

Basic Table with Header Cells

Create a simple table with header cells:

Example

<table>
  <tr>
    <th>Name</th>
    <th>Age</th>
    <th>Country</th>
  </tr>
  <tr>
    <td>John Doe</td>
    <td>30</td>
    <td>USA</td>
  </tr>
  <tr>
    <td>Jane Smith</td>
    <td>25</td>
    <td>Canada</td>
  </tr>
</table>

Using the Scope Attribute

Use the scope attribute for better accessibility:

Example

<table>
  <thead>
    <tr>
      <th scope="col">Product</th>
      <th scope="col">Price</th>
      <th scope="col">Quantity</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Laptop</td>
      <td>$999</td>
      <td>5</td>
    </tr>
    <tr>
      <td>Mouse</td>
      <td>$29</td>
      <td>15</td>
    </tr>
  </tbody>
</table>

Header Cell with Colspan

Span header cells across multiple columns:

Example

<table>
  <tr>
    <th colspan="2">Personal Information</th>
  </tr>
  <tr>
    <th scope="col">Name</th>
    <th scope="col">Email</th>
  </tr>
  <tr>
    <td>John Doe</td>
    <td>john@example.com</td>
  </tr>
</table>

Using the Abbr Attribute

Provide abbreviated versions for screen readers:

Example

<table>
  <tr>
    <th scope="col" abbr="Prod">Product Name</th>
    <th scope="col" abbr="Desc">Description</th>
    <th scope="col" abbr="Qty">Quantity Available</th>
  </tr>
  <tr>
    <td>Wireless Keyboard</td>
    <td>Ergonomic wireless keyboard with backlight</td>
    <td>25</td>
  </tr>
</table>

Row Headers with Scope

Use header cells for rows:

Example

<table>
  <tr>
    <th scope="row">Monday</th>
    <td>Closed</td>
  </tr>
  <tr>
    <th scope="row">Tuesday</th>
    <td>9:00 AM - 5:00 PM</td>
  </tr>
  <tr>
    <th scope="row">Wednesday</th>
    <td>9:00 AM - 5:00 PM</td>
  </tr>
</table>

Complex Table with Headers

Create a complex table with both column and row headers:

Example

<table>
  <thead>
    <tr>
      <th></th>
      <th scope="col">Q1</th>
      <th scope="col">Q2</th>
      <th scope="col">Q3</th>
      <th scope="col">Q4</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Sales</th>
      <td>$50,000</td>
      <td>$65,000</td>
      <td>$72,000</td>
      <td>$85,000</td>
    </tr>
    <tr>
      <th scope="row">Expenses</th>
      <td>$35,000</td>
      <td>$40,000</td>
      <td>$38,000</td>
      <td>$42,000</td>
    </tr>
  </tbody>
</table>

Try it Yourself

Interactive Example

Here's a live example of a table with header cells:

Product Price Stock
Laptop $999 12
Mouse $29 45
Keyboard $79 23

th vs td - Understanding the Difference

Feature <th> <td>
Purpose Header cell containing header information Data cell containing actual data
Default Styling Bold and centered Regular and left-aligned
Scope Attribute Can use scope="col" or scope="row" Not applicable
Accessibility Helps screen readers identify headers Regular data content
Typical Use Column headers, row headers, table titles Data values in table body

Accessibility with Scope and Headers Attributes

The scope and headers attributes are crucial for accessibility:

  • scope="col" - Indicates the header applies to a column
  • scope="row" - Indicates the header applies to a row
  • scope="colgroup" - Indicates the header applies to a group of columns
  • scope="rowgroup" - Indicates the header applies to a group of rows
  • headers - Associates data cells with specific header cells by ID
Accessibility Tip: Always use the scope attribute on <th> elements in data tables. This helps screen reader users understand the table structure and navigate more efficiently.

Best Practices

  • Always use <th> for header cells and <td> for data cells
  • Include the scope attribute on all <th> elements for better accessibility
  • Use scope="col" for column headers and scope="row" for row headers
  • Place column headers inside <thead> for better semantic structure
  • Use the abbr attribute to provide abbreviated versions for long headers
  • Avoid using deprecated attributes like align, bgcolor, or valign - use CSS instead
  • For complex tables, consider using the headers attribute to explicitly associate data cells with header cells
  • Keep header text concise and descriptive

Default CSS Settings

Most browsers will display the <th> element with the following default values:

Default CSS

th {
  display: table-cell;
  vertical-align: inherit;
  font-weight: bold;
  text-align: center;
}

Related Tags