2011-04-01 37 views
42

我有以下標記爲剃刀圖的一部分:HTML5是否禁止tbody的細胞?

<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

您的操作代碼是否包含任何無效的嵌套代碼而不是''?例如''沒有''? – Gareth 2011-04-01 05:20:14

+0

Gareth,很好的問題,但沒有。我只是想表明,有不止一個類似的行。我只用了一個,它只減少了同樣警告的重複副本(每個這樣的單元格都有一個副本)。 – 2011-04-01 11:22:48

回答

49

我的理解是,使用<th>爲行頭不僅是合法的,但鼓勵

據我所知,這總是在HTML 4法律(也可能是其前身),和不是招」沒有改變HTML5。

W3C's HTML5 validator,雖然仍然是實驗性的,但不報告任何警告或錯誤。然後,我相信Visual Studio使用的HTML5驗證也是實驗性的,因爲HTML5本身尚未完成。

上加上標記,表格數據,特別是section 4.9.13HTML5 spec,說明了如何使用<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> 

所以這是完全合法的,以有內部無論是內部<tr>元素<th>元素<tbody><tfoot>。無論如何,因爲表格標題不只是在表格標題中找到。

+19

我同意。我創建了[問題656626](http://connect.microsoft.com/VisualStudio/feedback/details/656626/html5-validation-reports-spurious-error-when-th-tags-appear-within-tbody-tags)到報告這一點。 – 2011-04-01 11:35:56

+2

+1因爲被打擾報告! – enashnash 2011-06-24 09:40:18

+0

@Doug McClean:VS11的HTML5驗證器上的任何單詞?我不確定它是否與VS2010有什麼不同。 – BoltClock 2012-03-19 17:22:45

3

一般在THEAD一個TH將有"col"一個scope值,而在TBODY一個TH將有"row"一個scope值。