HTML5是否禁止tbody?

时间:2011-04-01 04:27:16

标签: html asp.net-mvc html5 web-standards

我将以下标记作为Razor视图的一部分:

<table>
  <caption>Presidents</caption>
  <thead>
    <tr>
      <th scope="col">Name</th>
      <th scope="col">Born</th>
      <th scope="col">Died</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th scope="row">Washington</th>
      <td>1732</td>
      <td>1799</td>
    </tr>
    <!-- etc -->
  </tbody>
</table>

将“验证的目标模式”设置为HTML5,Visual Studio就这样抱怨:

  

警告1验证(HTML5):元素'th'不得嵌套在元素'tbody tfoot'中。

这是真的吗?如果是这样,有人可以链接到规范吗?

我的理解是,对行标题使用<th>不仅合法而且鼓励。这当然看起来相当普遍,我可以链接几十个教程,解释(看似合理)它有助于可访问性。

这是VS的错误吗? HTML5真正的变化(一个好的?一个坏的?)?这是什么故事?

3 个答案:

答案 0 :(得分:59)

  

我的理解是,对行标题使用<th>不仅合法而且鼓励

据我所知,这在HTML 4(可能还有它的前身)中总是合法的,并且在HTML5中没有改变。

W3C's HTML5 validator虽然仍处于试验阶段,但未报告任何警告或错误。然后,我确信Visual Studio正在使用的HTML5验证也是实验性的,因为HTML5本身尚未最终确定。

标记表格数据的HTML5 spec,特别是section 4.9.13,显示了<th><tbody><tfoot>对范围行数据的使用:

<table>
 <thead>
  <tr>
   <th>
   <th>2008
   <th>2007
   <th>2006
 <tbody>
  <tr>
   <th>Net sales
   <td>$ 32,479
   <td>$ 24,006
   <td>$ 19,315
  <tr>
   <th>Cost of sales
   <td>  21,334
   <td>  15,852
   <td>  13,717
 <tbody>
  <tr>
   <th>Gross margin
   <td>$ 11,145
   <td>$  8,154
   <td>$  5,598
 <tfoot>
  <tr>
   <th>Gross margin percentage
   <td>34.3%
   <td>34.0%
   <td>29.0%
</table>

因此,<th><tr>内的<tbody>元素中包含<tfoot>元素是完全合法的。无论如何应该是这样,因为表格标题不只是在表格标题上找到。

答案 1 :(得分:11)

HTML5规范only requires that it be inside a tr,规范实际上包含th嵌套在tbody内的示例。

答案 2 :(得分:3)

通常THTHEAD的{​​{1}}值为scope,而"col"中的TH则为TBODY {1}} scope的值。