RGAA 4.1.2 · Tableaux · Critère 5.7
Pour chaque tableau de données, la technique appropriée permettant d’associer chaque cellule avec ses en-têtes est-elle utilisée (hors cas particuliers) ?
Déclarer un en-tête ne suffit pas : encore faut-il dire ce qu'il gouverne, faute de quoi le lecteur d'écran ne peut pas annoncer « Chiffre d'affaires, 2024, 1 240 » en arrivant sur la cellule.
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.7.1 Pour chaque contenu de balise
<th>s’appliquant à la totalité de la ligne ou de la colonne, la balise<th>respecte-t-elle une de ces conditions (hors cas particuliers) ?- La balise
<th>possède un attributidunique ; - La balise
<th>possède un attributscope; - La balise
<th>possède un attribut WAI-ARIArole="rowheader"ourole="columnheader".
- La balise
- 5.7.2 Pour chaque contenu de balise
<th>s’appliquant à la totalité de la ligne ou de la colonne et possédant un attributscope, la balise<th>vérifie-t-elle une de ces conditions ?- La balise
<th>possède un attributscopeavec la valeur"row"pour les en-têtes de ligne ; - La balise
<th>possède un attributscopeavec la valeur"col"pour les en-têtes de colonne.
- La balise
- 5.7.3 Pour chaque contenu de balise
<th>ne s’appliquant pas à la totalité de la ligne ou de la colonne, la balise<th>vérifie-t-elle ces conditions ?- La balise
<th>ne possède pas d’attributscope; - La balise
<th>ne possède pas d’attribut WAI-ARIArole="rowheader"ourole="columnheader"; - La balise
<th>possède un attributidunique.
- La balise
- 5.7.4 Pour chaque contenu de balise
<td>ou<th>associée à un ou plusieurs en-têtes possédant un attributid, la balise vérifie-t-elle ces conditions ?- La balise possède un attribut
headers; - L’attribut
headerspossède la liste des valeurs d’attributiddes en-têtes associés.
- La balise possède un attribut
- 5.7.5 Pour chaque balise pourvue d’un attribut WAI-ARIA
role="rowheader"ourole="columnheader"dont le contenu s’applique à la totalité de la ligne ou de la colonne, la balise vérifie-t-elle une de ces conditions ?- La balise possède un attribut WAI-ARIA
role="rowheader"pour les en-têtes de ligne ; - La balise possède un attribut WAI-ARIA
role="columnheader"pour les en-têtes de colonne.
- La balise possède un attribut WAI-ARIA
Comment le vérifier
- Pour les en-têtes qui couvrent toute une ligne ou toute une colonne, vérifier que le
<th>porte au moins l'une des trois marques acceptées : unscope, unidunique, ou un rôlecolumnheader/rowheader. Aucune n'est obligatoire en propre — c'est leur absence à toutes les trois qui fait échouer, et déclarer non conforme un tableau qui emploie le rôle sansscopeest une fausse non-conformité. - Quand la marque employée porte un sens de lecture —
scopeou le rôle — vérifier qu'elle désigne le bon :coloucolumnheaderpour un en-tête de colonne,rowourowheaderpour un en-tête de ligne. - Pour un tableau complexe — en-têtes sur plusieurs niveaux, cellules fusionnées —
scopene suffit plus : chaque<th>doit porter unidunique, et chaque cellule unheaderslistant lesidde ses en-têtes. - Vérifier que chaque
idcité dans unheadersexiste bien, et dans le même tableau : une faute de frappe casse l'association en silence. - Vérifier qu'aucun
<th>n'est laissé sans cellule à gouverner — c'est le signe d'unscopeinversé ou d'une structure qui a dérivé.
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.
Le moteur tranche deux fautes vérifiables, et deux seulement : un headers qui pointe hors du tableau ou vers un id inexistant, et un en-tête auquel aucune cellule n'est rattachée. La première règle ne regarde que les cellules portant déjà un headers, la seconde que les éléments exposant déjà un rôle d'en-tête : un <th> nu — ni scope, ni id, ni rôle — n'entre dans le champ d'aucune des deux. L'assistant prend le relais sur ce point et tranche quatre manquements qui ne demandent aucun jugement : un headers désignant un identifiant qu'aucune cellule ne porte, un même id partagé par plusieurs en-têtes alors que le référentiel le veut unique, une valeur de scope hors row, col, rowgroup et colgroup, et des en-têtes répartis sur deux axes sans aucune technique d'association déclarée — le manquement le plus courant du critère. Ce qu'il vous laisse : savoir si la position suffit, ce que le référentiel admet quand les en-têtes tiennent sur une seule ligne ou une seule colonne. Le moteur ne dit pas non plus si scope="col" a été mis là où il fallait scope="row" quand les deux produisent une structure cohérente — cela demande de savoir ce que le tableau raconte.
Règles ACT du W3C mises en œuvre : a25f45, d0f69e
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.
scopeetheaderssur le même tableau ne se cumulent pas utilement : choisir l'un des deux, et le tenir.headerssur un tableau simple est du zèle inutile, et une source de fautes :scopesuffit.- Un
iddupliqué dans la page — deux tableaux copiés-collés avec les mêmesidd'en-tête — associe les cellules du second aux en-têtes du premier. axisest obsolète et n'associe plus rien : le voir dans un tableau signale du code ancien à reprendre.