为什么内部TABLE部分必须进行THAD TFOOT TBODY验证?

时间:2011-04-06 23:11:24

标签: html validation xhtml w3c-validation

我经常使用THEAD,TBODY和TFOOT元素将我的数据表划分为可以使用CSS单独处理的部分。我也明白,总有一个隐含的TBODY标签。

令我困惑的是这些必须进行验证的顺序。该表将验证:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Table Validation Test</title>
</head>
<body>

<table>

<thead>
<tr>
    <th scope="col">Enemies List</th>
</tr>
</thead>

<tfoot>
<tr>
    <td>&copy; Bomb Voyage</td>
</tr>
</tfoot>

<tbody>
<tr>
    <td>Mr. Incredible</td>
    <td>Elastigirl</td>
    <td>Gazer Beam</td>
</tr>
</tbody>

</table>
</body>
</html>

但是这个不会:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Table Validation Test</title>
</head>
<body>

<table>

<thead>
<tr>
    <th scope="col">Enemies List</th>
</tr>
</thead>

<tbody>
<tr>
    <td>Mr. Incredible</td>
    <td>Elastigirl</td>
    <td>Gazer Beam</td>
</tr>
</tbody>


<tfoot>
<tr>
    <td>&copy; Bomb Voyage</td>
</tr>
</tfoot>

</table>
</body>
</html>

有效的一个是HEAD,FOOT,BODY;没有任何意义。

将脚放在桌子的底部将保持桌子和人体之间的类比。但由于某种原因,此订单被视为无效。

任何人都知道为什么?

1 个答案:

答案 0 :(得分:45)

规范提供了一个理由:

  

TFOOT必须出现在TABLE定义中的TBODY之前,以便用户代理可以在接收所有(可能很多)数据行之前渲染脚。

http://www.w3.org/TR/html401/struct/tables.html#h-11.2.3

我不知道是否有任何浏览器实际上遵循此行为,并且在HTML5中更改它以处理HTML 4顺序和更合理的顺序:

  

按此顺序:可选择一个标题元素,后跟零个或多个colgroup元素,后跟可选的元素,后跟可选的tfoot元素,后跟零个或多个tbody元素或一个或多个tr元素,可选地通过tfoot元素(但总共只有一个tfoot元素子元素。)

http://www.w3.org/TR/html5/tabular-data.html