HTML5是否禁止tbody的细胞?
作为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>
将“validation的目标模式”设置为HTML5,Visual Studio将如此抱怨:
警告1validation(HTML5):元素“th”不能嵌套在元素“tbody tfoot”中。
这是真的吗? 如果是这样,有人可以链接到规范?
我的理解是,使用<th>
行标题不仅是合法的,而且是鼓励的。 这似乎是相当普遍的,我可以链接几十个教程(看起来明智)解释,它有助于可访问性。
这是一个VS错误? 一个真正的改变与HTML5(一个好的?坏的?)? 发生了什么?
我的理解是,使用
<th>
行标题不仅是合法的,而且是鼓励的
据我所知,这在HTML 4(以及可能的前身)中总是合法的,并且在HTML5中没有改变。
W3C的HTML5validation器虽然仍然是实验性的,但没有报告警告或错误。 然后,我相信Visual Studio所使用的HTML5validation也是实验性的,因为HTML5本身还没有最终确定。
关于标记表格数据的HTML5规范 ,特别是第4.9.13节 ,展示了在<tbody>
和<tfoot>
使用<th>
限定行数据的范围:
<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>
因此,在<tbody>
或<tfoot>
<tr>
元素内部有<th>
元素是完全合法的。 无论如何,因为表格标题不是只能在表格标题中find。
HTML5规范只要求它在tr
,而spec实际上包含了一个嵌套在tbody
的例子。
通常, THEAD
的TH
将具有"col"
的scope
值,而TBODY
的TH
具有"row"
的scope
值。