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

Jit*_*yas 2 html xhtml accessibility semantic-markup screen-readers

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

表有3个其他标签<thead> <tbody> <tfoot>是否有必要使用所有即使我没有任何表页脚.Firefox默认在代码中添加所有这些.

并且它是必要的,<th>总是应该在一个<thead>

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

如上表所示

<h3>Heading of table<h3>
<table>......</table>
Run Code Online (Sandbox Code Playgroud)

作为表格的标题

<table>
<thead><tr rowspan=3><th>Heading of table</th></tr></thead>
Run Code Online (Sandbox Code Playgroud)

或作为表格的标题

<table>
<caption> Heading of table</caption>
Run Code Online (Sandbox Code Playgroud)

哪个对屏幕阅读器有好处并且语义正确?

cle*_*tus 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-->
Run Code Online (Sandbox Code Playgroud)

所以这是非法的语法:

<thead><th>Heading of table</th></thead>
Run Code Online (Sandbox Code Playgroud)

它应该是:

<thead><tr><th>Heading of table</th></tr></thead>
Run Code Online (Sandbox Code Playgroud)

<th>任何地方都不需要元素.它们只是<td>您可以在表格行中使用的两种单元格类型之一(另一种).A <thead>是可选的表部分,可以包含一行或多行.

编辑:至于为什么使用<thead>有几个原因:

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

作为(5)的一个例子,你可以这样做:

$("table > tbody > tr:nth-child(odd)").addClass("odd");
Run Code Online (Sandbox Code Playgroud)

<thead>元素是指那些行将不会被造型的方式.或者你可以这样做:

$("table > tbody > tr").hover(function() {
  $(this).addClass("hover");
}, function() {
  $(this).removeClass("hover");
});
Run Code Online (Sandbox Code Playgroud)

有:

tr.hover { background: yellow; }
Run Code Online (Sandbox Code Playgroud)

这又排除了<thead>行.

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

  • `<th>`标签对可访问性很有用.当屏幕阅读器用户位于表格的第14行时,他们可以让屏幕阅读器读出当前单元格的标题,以帮助他们记住数字的含义.(这假设您正确使用`scope`属性,以指示`<th>`标签适用于哪些单元格.) (2认同)

Ray*_*Ray 5

<th>如果要显示表格数据,请使用s - 每列使用一个。它对您的普通用户很好,对屏幕阅读器必不可少。<th>如果您将表格用于布局目的(或其他邪恶的计划......),请不要使用s

  • 一个笑话——意思是“邪恶的计划”——bwaa-haa-haa-haa(邪恶的笑) (3认同)