td-has-header
Las celdas de datos en tablas grandes deben tener un encabezado asociado
Comprueba que cada <td> de una tabla grande y simple (sin colspan/rowspan) tiene un encabezado asociado, mediante un atributo headers, un <th> de columna implícito por encima, o un <th> de fila implícito a su izquierda.
Ámbito de aplicación. Elementos <table> con al menos 4 filas y al menos 4 columnas (una tabla "grande", donde la asociación implícita de encabezados de fila/columna resulta útil; las tablas pequeñas suelen ser evidentes por sí mismas), y SIN colspan/rowspan en ningún lugar de la tabla (un rowspan de 0, que extiende la celda hasta el final de su grupo de filas, es una expansión; un colspan de 0 equivale a 1). Se excluye una tabla cuyo rol (el primer token conocido y no abstracto del atributo role, sin distinguir mayúsculas de minúsculas) es cualquiera salvo table, grid o treegrid, como una tabla de maquetación con role="presentation": no tiene celdas de datos.
Resultado esperado. Por una tabla sin ninguna celda de cabecera se pregunta una vez, en la tabla: el marcado no permite distinguir una tabla de maquetación, que no necesita cabeceras, de una tabla de datos sin ellas. En una tabla con celdas de cabecera, cada <td> no vacío tiene una cabecera asociada, mediante una de estas vías:
- un atributo
headersno vacío (aquí se confía en él; si resuelve a ids de<th>reales es asunto detable-headers-attr-valid, no de esta regla), O - una cabecera de columna implícita: una celda de cabecera en la misma columna, en una fila anterior, O
- una cabecera de fila implícita: una celda de cabecera anterior en la misma fila.
Una celda de cabecera es un <th> sin otro rol, o cualquier celda con role="columnheader" o role="rowheader" (ese <td> es una cabecera, no una celda de datos). Un <td> sin texto y sin contenido que pueda llevar un nombre (una imagen, un control, un elemento con etiqueta ARIA) no contiene datos, así que no necesita cabecera; la celda de esquina vacía sobre las cabeceras de fila es el caso habitual.
Qué informa un hallazgo.
row,column: dónde está la celda en la tabla, contando desde 0: las filas desde arriba, las celdas desde la izquierda dentro de la fila.
Estos campos de data.details ayudan a leer y reproducir un hallazgo. Salvo reasonCode y los pocos campos que Esquema de salida indica como estables, no son un contrato estable: un campo puede cambiar de nombre o desaparecer en una versión menor, así que no construyas sobre ellos.
Ejemplos
<table><tr><th></th><th>Q1</th><th>Q2</th><th>Q3</th></tr><tr><th>North</th><td>1</td><td>2</td><td>3</td></tr><tr><th>South</th><td>4</td><td>5</td><td>6</td></tr><tr><th>East</th><td>7</td><td>8</td><td>9</td></tr></table>
Cada <td> tiene tanto un encabezado de fila implícito (<th> anterior en su fila) como un encabezado de columna implícito (<th> anterior en su columna). El tamaño mínimo 4x4 no es opcional. Esta regla no es aplicable a tablas más pequeñas.
<table><tr><th>Name</th><th>Team</th><th>Room</th><td></td></tr><tr><td>Ana</td><td>Sales</td><td>2.01</td><td>Mon</td></tr><tr><td>Bo</td><td>Legal</td><td>2.04</td><td>Tue</td></tr><tr><td>Chen</td><td>IT</td><td>3.10</td><td>Fri</td></tr></table>
La fila de cabecera se queda una columna corta: las celdas de la última columna no tienen asociación de fila, columna, ni de atributo headers. Por una tabla sin ninguna celda de cabecera se pregunta en su lugar, ya que puede ser una tabla de maquetación, que no necesita ninguna.
Cómo comprobarlo
Cuando esta regla no puede decidir, informa cantTell y deja la pregunta a una persona. Cada pregunta que puede plantear aparece aquí bajo su código de motivo, con los pasos para responderla. Un hallazgo lleva los mismos pasos en howToCheck, en el idioma del análisis. Consulta Esquema de salida.
TD_TABLE_NO_HEADERS
- Observar en pantalla la tabla que indica el informe.
- Decidir si presenta datos en filas y columnas, con una fila superior o una primera columna que etiqueta el resto, o si solo dispone contenido uno al lado de otro.
- Si contiene datos, inspeccionar la fila o la columna de etiquetas y comprobar si usa elementos <th> (o atributos headers).
Se cumple. La tabla solo dispone contenido (y debería indicarlo con role="presentation"), o sus celdas de etiqueta están marcadas como encabezados.
No se cumple. La tabla contiene datos pero ninguna celda está marcada como encabezado, así que a quienes usan lector de pantalla no se les dice qué significa cada valor, lo que incumple WCAG 1.3.1 (F46).