是否有必要在任何表格中?

时间:2010-02-17 02:55:44

标签: html xhtml accessibility semantic-markup screen-readers

是否有必要在任何表中使用<th>?即使表没有标题?

表有3个其他标记<thead> <tbody> <tfoot>即使我没有任何表格页脚,也必须使用所有标记。 Firefox默认情况下会在代码中添加所有这些内容。

并且有必要,<th>始终应该在<thead>

如果我在客户收到的内容中有标题,并且标题来自表外但与表有关,那么我应该如何将该标题放在表中

如上表

<h3>Heading of table<h3>
<table>......</table>

作为表格的标题

<table>
<thead><tr rowspan=3><th>Heading of table</th></tr></thead>

或作为表格的标题

<table>
<caption> Heading of table</caption>

哪种屏幕阅读器有用,语义正确?

7 个答案:

答案 0 :(得分:13)

根据HTML DTD,这是HTML表格的内容模型:

<!ELEMENT TABLE - -
     (CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)>
<!ELEMENT CAPTION  - - (%inline;)*     -- table caption -->
<!ELEMENT THEAD    - O (TR)+           -- table header -->
<!ELEMENT TFOOT    - O (TR)+           -- table footer -->
<!ELEMENT TBODY    O O (TR)+           -- table body -->
<!ELEMENT COLGROUP - O (COL)*          -- table column group -->
<!ELEMENT COL      - O EMPTY           -- table column -->
<!ELEMENT TR       - O (TH|TD)+        -- table row -->
<!ELEMENT (TH|TD)  - O (%flow;)*       -- table header cell, table data cell-->

所以这是非法语法:

<thead><th>Heading of table</th></thead>

应该是:

<thead><tr><th>Heading of table</th></tr></thead>
任何地方都不需要

<th>元素。它们只是您可以在表格行中使用的两种单元格类型之一(另一种是<td>)。 <thead>是一个可选的表格部分,可以包含一行或多行。

修改关于为什么使用<thead>,有以下几个原因:

  1. 语义:您要区分表格内容和“元数据”。这通常用于在列标题和数据行之间进行描述;
  2. 辅助功能:它可以帮助使用屏幕阅读器的人了解表格的内容;
  3. 非屏幕媒体:打印多页表可能允许您将<thead>内容放在每个页面的顶部,这样人们就可以了解列的含义而不会轻弹几页;
  4. 样式: CSS可以应用于<tbody>元素,<thead>元素,两者或其他组合。它为你提供了一些其他东西来编写选择器;
  5. Javascript:这在使用jQuery和类似的库时经常会出现。额外的信息有助于编写代码。
  6. 作为(5)的一个例子,你可以这样做:

    $("table > tbody > tr:nth-child(odd)").addClass("odd");
    

    <thead>元素表示这些行不会以这种方式设置样式。或者你可以这样做:

    $("table > tbody > tr").hover(function() {
      $(this).addClass("hover");
    }, function() {
      $(this).removeClass("hover");
    });
    

    使用:

    tr.hover { background: yellow; }
    

    再次排除<thead>行。

    最后,许多相同的参数适用于在<th>元素上使用<td>元素:您指出此单元格不是数据而是某种标题。这些单元格通常会在<thead>部分的一行或多行中组合在一起,或者是每行中的第一个单元格,具体取决于表格的结构和性质。

答案 1 :(得分:4)

如果要显示表格数据,请使用<th> - 每列使用一个。这对普通用户来说很好,对屏幕阅读器也很重要。如果您将表格用于布局目的(或其他恶意方案......),请不要使用<th>

答案 2 :(得分:2)

不,没有必要。但它看起来并不像你正确使用它。通常,每列都有一个。正确使用的一个简单示例是:

<table>
<tr><th>Breed</th><th>Name</th></tr>
<tr><td>Pekingese</td><td>Pluto</td></tr>
<tr><td>Lab</td><td>Buddy</td></tr>
</table>

你也可以这样做:

<table>
<thead><tr><th>Breed</th><th>Name</th></tr></thead>
<tr><td>Pekingese</td><td>Pluto</td></tr>
<tr><td>Lab</td><td>Buddy</td></tr>
</table>

答案 3 :(得分:1)

答案是

YES!

如果您使用表格来显示表格数据

表格数据由于某种原因被组织成行和列。 表格单元格中数据的含义由列的含义及其出现的行定义。

重要的是要识别那些对行和列有意义的单元格,而不是仅包含数据的单元格。

例如,下表绝对没有传达任何有意义的信息:

34 56 90 15
45 65 85 30
50 55 70 35

如果行和列具有名称,则数字仅具有意义。这些名称使用<th>标记:

    Feb May Aug Nov
ITH
JFK
IST

当然,我们仍然不知道这些数字是什么意思,这就是为什么需要<caption>

Average Temperatures by Month at Selected Airports
    Feb May Aug Nov
ITH
JFK
IST

最后,重要的是要注意诸如测量单位,数据源等细节。这种信息通常在表格的页脚中出现:

Average Temperatures by Month at Selected Airports
    Feb May Aug Nov
ITH
JFK
IST
Temperatures in °F. Source: Publication #456 MNMO

表的标题进入<caption>。当表变大时,<thead><tfoot>部分特别有用。有关示例,请参阅How to deal with page breaks when printing a large HTML table

您可以使用<colgroups>将逻辑相关的数据组合在一起。

答案 4 :(得分:0)

您希望最好地使用描述数据的内容。

<caption>将描述整个表格。 th将创建一个单元格,通常用于描述一列(但也可用于行标题)。

theadtfoottbody。所有都可以使用,并且都是可选的,只要它们按顺序排列(如果使用),并且您只有一个thead和一个tfoot(但您可以有多个tbody。许多浏览器如果不这样做,(全部?)将隐式添加它们,但规范说它们是可选的。

无论th位于何处,

tr都可以显示在任何tr内。

答案 5 :(得分:0)

<table>
     <tr>
        <td>text</td>
     </tr>      
</table>

这是我能想到的最小表格。

答案 6 :(得分:0)

好处是语义。 <th>表示 T 能够 H eader。用它来标记列的标题。通常在<thead>内。