Le WordPress d'aujourd'hui, décodé pour les développeurs

Accessibilité

role= »presentation » posé sur un vrai tableau de données pour simplifier le style

Un antipatron discret repéré en audit : un rôle ARIA qui retire toute sémantique de tableau à un contenu qui en a pourtant réellement besoin, juste pour éviter des bordures indésirables.

Par WordPress Développement • 30 septembre 2021 • 5 min de lecture • Aucun commentaire
role="presentation" posé sur un vrai tableau de données pour simplifier le style

Un tableau de bord affiche des indicateurs financiers en colonnes : chiffre d’affaires mensuel, marge, nombre de commandes. Visuellement, aucune bordure ne sépare les cellules, la mise en page ressemble à une simple grille de chiffres alignés. En inspectant le code source, le tableau porte un attribut role="presentation", ajouté par l’intégrateur pour, selon son commentaire dans le code, « éviter que le navigateur applique son style de tableau par défaut ».

Ce qu’on voit dans le code

<table role="presentation">
  <thead>
    <tr>
      <th>Mois</th>
      <th>Chiffre d'affaires</th>
      <th>Marge</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Janvier</td>
      <td>42 300 €</td>
      <td>18 %</td>
    </tr>
  </tbody>
</table>

La structure HTML reste correcte : un vrai <table>, des <th> pour les en-têtes, des <td> pour les données. Mais le rôle ARIA posé sur l’élément racine indique explicitement aux technologies d’assistance de ne pas traiter ce contenu comme un tableau de données, mais comme une simple mise en forme sans relation sémantique entre les cellules.

Pourquoi c’est un problème

Le rôle presentation, tel que défini par les spécifications WAI-ARIA, indique à l’arbre d’accessibilité qu’un élément et ses enfants n’ont aucune signification structurelle à restituer. Appliqué à un tableau qui contient réellement des données croisées, il supprime toutes les relations entre une cellule et son en-tête de colonne ou de ligne. Un utilisateur de lecteur d’écran qui navigue de cellule en cellule avec les raccourcis dédiés à la lecture de tableaux n’entend plus « Chiffre d’affaires, 42 300 euros », mais un texte brut, isolé, sans repère de colonne.

Ce manquement correspond directement à la thématique 5 du RGAA 4.1, consacrée aux tableaux, dont le premier critère demande que chaque tableau de mise en forme soit correctement identifié comme tel, et implique en creux qu’un tableau de données ne soit jamais dégradé en tableau de mise en forme. Un tableau qui croise des mois et des indicateurs financiers relève sans ambiguïté de la catégorie « tableau de données », pas « tableau de mise en forme ».

Ce qui a motivé cette erreur

L’intention initiale n’était pas malveillante : l’intégrateur cherchait uniquement à retirer les bordures et le style par défaut que certains navigateurs appliquent aux tableaux HTML sans feuille de style associée. Le rôle ARIA a été confondu avec un outil de style, alors qu’il n’agit que sur la couche sémantique, invisible à l’écran mais essentielle pour les technologies d’assistance.

/* Ce que l'intégrateur cherchait réellement à obtenir */
table {
  border-collapse: collapse;
  border: none;
}
table th,
table td {
  border: none;
  padding: 0.5rem 1rem;
}

Cette feuille de style suffisait entièrement à obtenir le rendu visuel souhaité, sans toucher à un seul attribut ARIA. Le rôle presentation n’avait donc aucune utilité réelle dans ce cas, il ne faisait que retirer une information dont personne n’avait mesuré la valeur.

Quoi faire à la place

  • Ne jamais poser un rôle ARIA pour résoudre un problème de style : chercher d’abord la propriété CSS correspondante.
  • Réserver role="presentation" aux tableaux réellement utilisés à des fins de mise en page pure, un usage aujourd’hui déconseillé au profit de CSS Grid ou Flexbox, mais qui subsiste dans certains gabarits d’e-mail par exemple.
  • Vérifier, avant toute publication, la restitution du tableau avec un lecteur d’écran en mode navigation par tableau, pas seulement en lecture linéaire.
  • Documenter dans le code, par un commentaire, l’intention exacte derrière tout rôle ARIA ajouté, pour éviter qu’un futur intégrateur le supprime ou le copie sans en comprendre la portée.
L'essentiel à retenir : role=presentation retire la sémantique de tableau à l'arbre d'accessibilité ; Un tableau de bord chiffré perd alors toute relation cellule-en-tête ; Le style se corrige en CSS, jamais en supprimant la sémantique

Un antipatron qui se propage facilement

Ce genre de correction, une fois trouvée par un développeur pressé et publiée dans un gabarit réutilisé, se copie ensuite d’un projet à l’autre par imitation du code existant, sans que personne ne revérifie sa pertinence. Le tableau de bord initial a servi de modèle à trois autres tableaux du même projet, tous corrigés en une seule passe une fois l’antipatron identifié.

Un repère simple à partager avec une équipe d’intégration : un rôle ARIA ne devrait jamais apparaître comme solution à un problème de rendu visuel. Si le style pose problème, la réponse se trouve en CSS, jamais dans l’arbre d’accessibilité.

Ce que ce cas ne couvre pas

Les tableaux réellement décoratifs, utilisés uniquement pour organiser visuellement des blocs sans aucune donnée tabulaire à restituer, constituent un cas distinct où role="presentation" reste pertinent. La distinction entre les deux usages ne se fait jamais sur l’apparence du tableau, mais sur la nature réelle du contenu qu’il transporte.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi