html tables: thead vs th

HtmlHtml Table

Html Problem Overview


It looks like (according to the examples on this page, anyways) that if you're using THEAD, you don't need to use TH.

Is that true? If so, what are the advantages/disadvantages of THEAD vs TH?

Html Solutions


Solution 1 - Html

The <thead> tag is used to group the header content in an HTML table. The thead element should be used in conjunction with the tbody and tfoot elements.

More : thead

You use <thead> to encapsulate an entire row (or rows) to designate them as the Table Header. According to the spec,

> "This division enables user agents to > support scrolling of table bodies > independently of the table head and > foot. When long tables are printed, > the table head and foot information > may be repeated on each page that > contains table data."

<th>, on the other hand, is used to style a specific cell as a header cell rather than an ordinary data cell.

Solution 2 - Html

<th> actually is a replacement for <td> when you want to mark a cell as a header cell.

If you want to use <thead> and <th> don't forget to nest <th> inside <tr>. Otherwise the code may not be valid.
Example:

<table>
  <thead>
    <tr>
      <!-- scope="col" is optional if the th is inside a thead -->
      <th scope="col">Season</th>
      <th scope="col">Goals</th>
      <th scope="col">Assists</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <!-- scope="row" indicates that the th is a header for that row -->
      <th scope="row">2009-2010</th>
      <td>25</td>
      <td>43</td>
    </tr>
    <tr>
      <th scope="row">2011-2012</th>
      <td>40</td>
      <td>20</td>
    </tr>
  </tbody>
</table>

Solution 3 - Html

th is more specific than what may reside inside of thead. A th cell is to specify the header of the corresponding td cells. In fact you can add a headers attribute to a td cell which points to the id of a th cell (for screen readers). So th is directly related to the tds of that column.

However, thead can include any information...commonly yes it does include the th cells but it can also include anything that you might deem to be appropriate as information at the top of the table (other than a caption, because this has its own tag as well).

Solution 4 - Html

<thead>

Table rows may be grouped into a table head, table foot, and one or more table body sections, using the THEAD, TFOOT and TBODY elements, respectively. This division enables user agents to support scrolling of table bodies independently of the table head and foot. When long tables are printed, the table head and foot information may be repeated on each page that contains table data.

The table head and table foot should contain information about the table's columns. The table body should contain rows of table data.

When present, each THEAD, TFOOT, and TBODY contains a row group. Each row group must contain at least one row, defined by the TR element.

<th>

Table cells may contain two types of information: header information and data. This distinction enables user agents to render header and data cells distinctly, even in the absence of style sheets. For example, visual user agents may present header cell text with a bold font. Speech synthesizers may render header information with a distinct voice inflection.

The TH element defines a cell that contains header information. User agents have two pieces of header information available: the contents of the TH element and the value of the abbr attribute. User agents must render either the contents of the cell or the value of the abbr attribute. For visual media, the latter may be appropriate when there is insufficient space to render the full contents of the cell. For non-visual media abbr may be used as an abbreviation for table headers when these are rendered along with the contents of the cells to which they apply.

> Source: http://www.w3.org/TR/html4/struct/tables.html

Solution 5 - Html

<thead> is special in that it can be used to repeat the header row at the top of the page in printed versions.

Solution 6 - Html

As far as I can tell from experience, there is no difference in rendering unless you're using CSS to specify a difference in rendering. A <td> inside of a <thead> will render the same as a <th> inside of a <table> or a <tbody>.

Solution 7 - Html

There are no hard rules here. The <thead> element is just another way to group your columns and rows, just like <tbody> and <tfoot> is. So you have more possibilities for scripting and formatting.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionchrisView Question on Stackoverflow
Solution 1 - HtmlSaurabh GokhaleView Answer on Stackoverflow
Solution 2 - HtmlrflwView Answer on Stackoverflow
Solution 3 - HtmlNick ManningView Answer on Stackoverflow
Solution 4 - HtmlsmartrahatView Answer on Stackoverflow
Solution 5 - HtmlDiodeus - James MacFarlaneView Answer on Stackoverflow
Solution 6 - HtmlamphetamachineView Answer on Stackoverflow
Solution 7 - HtmlDanManView Answer on Stackoverflow