【发布时间】:2011-03-05 22:05:13
【问题描述】:
是否有必要在每个表中都有<tbody>?符合标准。
【问题讨论】:
标签: xhtml w3c semantic-markup w3c-validation
是否有必要在每个表中都有<tbody>?符合标准。
【问题讨论】:
标签: xhtml w3c semantic-markup w3c-validation
根据HTML 3.2 spec(table 不在 HTML 2 规范中)table 元素没有 tbody、thead、tfoot(它们是 HTML 4 的东西),只有可选的 @ 987654327@ 和tr / th 的列表。
虽然您可能会认为您在谈论 1997 年和 2021 年的 HTML 3.2 到底是什么鬼,但考虑使用原始或过时 HTML 引擎的电子邮件客户端,tbody 在这里毫无意义。
【讨论】:
Dumb Guy 给了an answer for HTML4(是)。 Arwym 给an answer for HTML5 to a related question(否):
tabular data spec for HTML5 不需要它们:
可以使用此元素 (
tr) 的上下文:
- 作为
thead元素的子元素。- 作为
tbody元素的子元素。- 作为
tfoot元素的子元素。- 作为
table元素的子元素,在任何caption、colgroup和thead元素之后,但前提是没有tbody作为表格元素的子元素的元素。尽管我认为划分行是一个好习惯 在
thead、tbody和tfoot标记内,因为它使表格的行 更容易识别。最后,浏览器总会为你添加至少
tbody。
【讨论】:
对于仍在使用 IE7 的一小部分用户,如果您要使用 DOM 方法构建表,则必须添加将 tr 封装在 tbody 标记中!
这适用于所有主流浏览器:
var table = document.createElement('table');
var tbody = document.createElement('tbody');
var tr = document.createElement('tr');
tbody.appendChild(tr);
table.appendChild(tbody);
这在 IE7 中不起作用:
var table = document.createElement('table');
var tr = document.createElement('tr');
table.appendChild(tr);
我关于构建表的快速博客文章:
http://blog.svidgen.com/2012/05/building-tables-in-ie7-with-javascript.html
值得注意的是,我不再努力在自己的项目中支持 IE7。在这一点上,对于大多数网站来说,IE
【讨论】:
引用HTML 4 spec:“TBODY 开始标记始终是必需的,除非表格仅包含一个表格主体且没有表格头部或底部部分。TBODY 结束标记始终可以安全地省略。”
所以,如果你有一个<thead>,你必须有一个<tbody>标签或<tfoot>
另见:MDN
【讨论】:
大多数浏览器都是宽容的,但即便如此,我还是在我现在使用的所有表格中添加了这对。即使是琐碎的桌子。尤其是现在我越来越多地使用 CSS 来装饰这些表格。
话虽如此,我的旧表格仍然可以在最新的浏览器上正常工作。我正在努力学习,但从长远来看,我会花一些额外的微秒来在这里和那里添加可选标签,最终会为您节省金钱/时间。
戴夫
【讨论】:
仅当您定义 thead 和 tfoot 时。它主要用于表格具有多个内容主体的情况。如果表格中的数据很容易理解为tbody,那么您可以放心地省略它。
【讨论】:
<th> 是否允许在tbody tr 内部使用?
<th>,那么您应该使用<thead>,尽管您这样做不是必需。如果您将它们用作列的标题,则不应将它们放在tbody 中,但如果它们是行的标题,则可以。
<thead>、<tfoot> 和多个 <tbodies>,Firefox 总是将 tbody 添加到表中