RGAA 4.1.2 · Tableaux · Critère 5.6
Pour chaque tableau de données, chaque en-tête de colonne et chaque en-tête de ligne sont-ils correctement déclarés ?
Sans en-têtes déclarés, un tableau de données devient une suite de valeurs nues : « 1 240 » sans savoir si c'est un chiffre d'affaires, une année ou un nombre d'habitants.
Ce que dit le référentiel
Transcription du RGAA 4.1.2, sans interprétation. C’est ce texte qui fait foi, et celui que vous citez dans un rapport.
- 5.6.1 Pour chaque tableau de données, chaque en-tête de colonne s’appliquant à la totalité de la colonne vérifie-t-il une de ces conditions ?
- L’en-tête de colonnes est structuré au moyen d’une balise
<th>; - L’en-tête de colonnes est structuré au moyen d’une balise pourvue d’un attribut WAI-ARIA
role="columnheader".
- L’en-tête de colonnes est structuré au moyen d’une balise
- 5.6.2 Pour chaque tableau de données, chaque en-tête de ligne s’appliquant à la totalité de la ligne vérifie-t-il une de ces conditions ?
- L’en-tête de lignes est structuré au moyen d’une balise
<th>; - L’en-tête de lignes est structuré au moyen d’une balise pourvue d’un attribut WAI-ARIA
role="rowheader".
- L’en-tête de lignes est structuré au moyen d’une balise
- 5.6.3 Pour chaque tableau de données, chaque en-tête ne s’appliquant pas à la totalité de la ligne ou de la colonne est-il structuré au moyen d’une balise
<th>? - 5.6.4 Pour chaque tableau de données, chaque cellule associée à plusieurs en-têtes est-elle structurée au moyen d’une balise
<td>ou<th>?
Comment le vérifier
- Identifier, dans chaque tableau de données, quelles cellules sont des en-têtes : celles qui nomment ce que contiennent les autres.
- Vérifier comment elles sont structurées : une balise
<th>convient dans tous les cas. Le repli sur une cellule portantrole="columnheader"ourole="rowheader"n'est accepté que pour un en-tête qui couvre la totalité d'une colonne ou d'une ligne. - Ne pas oublier les en-têtes de ligne : la première colonne d'un tableau est très souvent un en-tête, et presque toujours codée en
<td>. - Distinguer les en-têtes qui couvrent toute une ligne ou toute une colonne de ceux qui n'en couvrent qu'une partie : un en-tête partiel doit être un
<th>, sans repli possible sur un rôle ARIA — et le 5.7 ne traite pas les deux cas de la même façon.
Ce que notre outil fait
Assisté
Le moteur repère les éléments concernés et vous pose la question. Il ne conclut pas à votre place.
L'outil repère les tableaux de données dépourvus de tout <th> — le cas le plus fréquent et le plus grave — et tranche seul ce cas-là. Partout ailleurs il regarde les deux endroits où vivent les en-têtes et vous les rapporte : combien de cellules de la première ligne sont en <th>, combien de la première colonne. Le cas classique se voit alors d'un coup d'œil — colonnes en <th>, lignes en <td> stylé. Savoir si ces cellules sont des en-têtes suppose de comprendre les données, et cela vous revient : un tableau peut n'avoir que des en-têtes de colonne, et des <td> en première colonne y sont corrects.
Comment nous mesurons ce que l'outil sait faire · ce critère s'audite dans l'extension RGAA Lab.
Les pièges
Les erreurs qu’on rencontre vraiment, relevées au fil des audits.
- Une première colonne en gras via CSS n'est pas un en-tête. Le style ne déclare rien.
- Un
<th>employé pour une cellule vide en haut à gauche d'un tableau à double entrée est correct, et courant. - Un tableau produit par un tableur exporté en HTML n'a presque jamais de
<th>: c'est un cas à vérifier systématiquement.