Tengo el siguiente marcado como parte de una vista de 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>
Con el “esquema de destino para la validación” establecido en HTML5, Visual Studio se queja así:
Advertencia 1 Validación (HTML5): El elemento ‘th’ no debe estar anidado dentro del elemento ‘tbody tfoot’.
¿Es esto realmente cierto? Si es así, ¿alguien podría vincular a la especificación?
Mi entendimiento fue que usar <th>
para los encabezados de fila no solo era legal sino que se alentaba. Ciertamente parece bastante común, podría vincular docenas de tutoriales explicando (aparentemente con sensatez) que ayuda con la accesibilidad.
¿Es esto un error VS? ¿Se avecina un cambio real con HTML5 (¿uno bueno? ¿uno malo?)? ¿Cuál es la historia?
PernoReloj
Mi entendimiento fue que usar
<th>
para los encabezados de fila no solo era legal sino que se alentaba
Hasta donde yo sé, esto siempre fue legal en HTML 4 (y posiblemente en sus predecesores) y no ha cambiado en HTML5.
Validador HTML5 de W3C, aunque aún es experimental, no informa advertencias ni errores. Por otra parte, estoy seguro de que la validación de HTML5 que utiliza Visual Studio también es experimental, ya que HTML5 aún no se ha finalizado.
los especificación HTML5 en el marcado de datos tabulares, específicamente sección 4.9.13muestra el uso de <th>
dentro de <tbody>
y <tfoot>
para medir el alcance de los datos de la fila:
<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>
Así que es perfectamente legítimo tener <th>
elementos dentro <tr>
elementos dentro de un <tbody>
o <tfoot>
. Como debería ser de todos modos, ya que los encabezados de las tablas no solo se encuentran en los encabezados de las tablas.
-
Estoy de acuerdo. yo creé problema 656626 para reportar esto.
– Doug McClean
1 de abril de 2011 a las 11:35
-
@Doug McClean: ¿Algún comentario sobre el validador HTML5 de VS11? No estoy seguro si es diferente del VS2010.
– BoltClock
19 de marzo de 2012 a las 17:22
-
@BoltClock Todavía no he tenido la oportunidad de jugar con VS11.
– Doug McClean
19 de marzo de 2012 a las 18:36
-
Podría arreglar las advertencias en VS2010 cambiando el
html_5.xsd
yxhtml_5.xsd
, basado en la respuesta de Chris. Abre el archivo, encuentra la línea.<xsd:element ref="th" vs:disallowedancestor="tbody tfoot" />
y cambiarlo a<xsd:element ref="th" />
.– Corbata
29 de abril de 2013 a las 0:35
La especificación HTML5 solo requiere que sea dentro de un tr
y la especificación en realidad incluye un ejemplo con un th
anidado dentro de un tbody
.
Generalmente un TH
en un THEAD
tendrá un scope
valor de "col"
mientras que un TH
en un TBODY
tendrá un scope
valor de "row"
.
¿Su código de acción, en lugar de
<!-- etc -->
, contiene algún código anidado no válido? A<th>
sin un<tr>
¿por ejemplo?– Gareth
1 de abril de 2011 a las 5:20
Gareth, buena pregunta, pero no, no es así. Solo quería sugerir que hay más de una fila similar. Lo probé solo con uno y solo redujo las copias duplicadas de la misma advertencia (una para cada una de esas celdas).
– Doug McClean
1 de abril de 2011 a las 11:22