我将以下标记作为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>
将“验证的目标模式”设置为HTML5,Visual Studio就这样抱怨:
警告1验证(HTML5):元素'th'不得嵌套在元素'tbody tfoot'中。
这是真的吗?如果是这样,有人可以链接到规范吗?
我的理解是,对行标题使用<th>
不仅合法而且鼓励。这当然看起来相当普遍,我可以链接几十个教程,解释(看似合理)它有助于可访问性。
这是VS的错误吗? HTML5真正的变化(一个好的?一个坏的?)?这是什么故事?
答案 0 :(得分:59)
我的理解是,对行标题使用
<th>
不仅合法而且鼓励
据我所知,这在HTML 4(可能还有它的前身)中总是合法的,并且在HTML5中没有改变。
W3C's HTML5 validator虽然仍处于试验阶段,但未报告任何警告或错误。然后,我确信Visual Studio正在使用的HTML5验证也是实验性的,因为HTML5本身尚未最终确定。
标记表格数据的HTML5 spec,特别是section 4.9.13,显示了<th>
和<tbody>
中<tfoot>
对范围行数据的使用:
<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>
因此,<th>
或<tr>
内的<tbody>
元素中包含<tfoot>
元素是完全合法的。无论如何应该是这样,因为表格标题不只是在表格标题上找到。
答案 1 :(得分:11)
HTML5规范only requires that it be inside a tr
,规范实际上包含th
嵌套在tbody
内的示例。
答案 2 :(得分:3)
通常TH
中THEAD
的{{1}}值为scope
,而"col"
中的TH
则为TBODY
{1}} scope
的值。