我经常使用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>© 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>© Bomb Voyage</td>
</tr>
</tfoot>
</table>
</body>
</html>
有效的一个是HEAD,FOOT,BODY;没有任何意义。
将脚放在桌子的底部将保持桌子和人体之间的类比。但由于某种原因,此订单被视为无效。
任何人都知道为什么?
答案 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元素子元素。)