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

Wil*_*tin 22 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>
Run Code Online (Sandbox Code Playgroud)

但是这个不会:

<!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>
Run Code Online (Sandbox Code Playgroud)

有效的是HEAD,FOOT,BODY; 这没有任何意义.

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

谁知道为什么?

Liz*_*aly 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