Является ли HTML5 запретными ящиками?

У меня есть следующая разметка как часть представления 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 (хороший? Плохой?)? Какая история?

Ответ 1

Я понял, что использование <th> для заголовков строк было не просто законным, а поощряемым

Насколько я знаю, это всегда было законным в HTML 4 (и, возможно, его предшественниках) и не изменилось в HTML5.

W3C HTML5 validator, пока еще экспериментальный, не сообщает никаких предупреждений или ошибок. Опять же, я уверен, что проверка HTML5, используемая Visual Studio, является экспериментальной, так как сам HTML5 еще не завершен.

спецификация HTML5 для маркировки табличных данных, в частности 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>. Как и должно быть, так как заголовки таблиц не просто найдены в заголовках таблиц.

Ответ 3

Обычно a TH в THEAD будет иметь значение scope "col", тогда как a TH в TBODY будет иметь значение scope "row".