Aller au contenu principal
Technique7 décembre 20258 min

Aria-label et aria-labelledby : Guide pratique avec exemples

En Bref : L'essentiel à retenir

  • aria-label fournit un nom accessible directement dans l'attribut, idéal pour les boutons icônes sans texte visible.
  • aria-labelledby référence l'ID d'un élément existant, permettant de réutiliser du texte visible comme nom accessible.
  • La règle "premier choix" : préférez toujours le texte visible au texte ARIA caché pour une meilleure cohérence.
  • aria-describedby complète le label en ajoutant des informations secondaires comme les instructions de format.
ARIADevRGAAAccessibilitéHTML

Les attributs aria-label et aria-labelledby sont essentiels pour l'accessibilité des interfaces modernes. Mal utilisés, ils peuvent rendre votre site moins accessible. Ce guide vous montre comment les maîtriser.

Comprendre le "nom accessible"

Chaque élément interactif (bouton, lien, champ de formulaire) doit avoir un nom accessible : le texte lu par les lecteurs d'écran.

Le navigateur calcule ce nom selon un ordre de priorité :

  1. aria-labelledby (le plus fort)
  2. aria-label
  3. Contenu textuel de l'élément
  4. Attribut title (dernier recours)

[!NOTE] ARIA signifie "Accessible Rich Internet Applications". C'est une spécification W3C qui ajoute des informations sémantiques au HTML.

aria-label : Le label invisible

aria-label définit un nom accessible directement dans l'attribut. Le texte n'est pas visible à l'écran mais lu par les technologies d'assistance.

Cas d'usage idéal : Bouton icône

CODE
<!-- Mauvais : Aucun nom accessible -->
<button>
  <svg><!-- icône hamburger --></svg>
</button>

<!-- Bon : aria-label explicite -->
<button aria-label="Ouvrir le menu de navigation">
  <svg aria-hidden="true"><!-- icône hamburger --></svg>
</button>

Autres exemples aria-label

CODE
<!-- Bouton de fermeture -->
<button aria-label="Fermer la fenêtre">×</button>

<!-- Lien réseau social -->
<a href="https://twitter.com/..." aria-label="Suivez-nous sur Twitter">
  <svg aria-hidden="true"><!-- icône Twitter --></svg>
</a>

<!-- Champ de recherche -->
<input type="search" aria-label="Rechercher sur le site">

aria-labelledby : Réutiliser du texte existant

aria-labelledby pointe vers l'ID d'un autre élément dont le contenu textuel devient le nom accessible.

Cas d'usage idéal : Formulaire avec légende

CODE
<h2 id="section-contact">Nous contacter</h2>
<form aria-labelledby="section-contact">
  <!-- Le formulaire est nommé "Nous contacter" -->
</form>

Combiner plusieurs éléments

aria-labelledby peut référencer plusieurs IDs (séparés par des espaces) :

CODE
<span id="prenom-label">Prénom</span>
<span id="requis">(obligatoire)</span>
<input type="text" aria-labelledby="prenom-label requis">
<!-- Lecteur d'écran lit : "Prénom (obligatoire)" -->

Tableau comparatif

Critèrearia-labelaria-labelledby
VisibilitéInvisibleRéférence texte visible
SyntaxeTexte directID(s) d'éléments
Priorité2ème niveau1er niveau (le plus fort)
MaintenanceDuplication possibleCentralisation du texte
TraductionÀ traduire manuellementSuit la traduction de la page

aria-describedby : Le complément

aria-describedby ne remplace pas le label mais ajoute une description complémentaire.

CODE
<label for="password">Mot de passe</label>
<input type="password" id="password" 
       aria-describedby="password-help password-error">
<p id="password-help">Minimum 8 caractères, 1 majuscule, 1 chiffre</p>
<p id="password-error" class="error">Le mot de passe est trop court</p>

Le lecteur d'écran lit :

"Mot de passe, champ de texte. Minimum 8 caractères, 1 majuscule, 1 chiffre. Le mot de passe est trop court."

Les règles d'or

1. Préférez le texte visible

Si le texte peut être affiché, affichez-le. ARIA est un dernier recours quand le design ne peut pas montrer le texte.

CODE
<!-- 👍 Préférable : Texte visible -->
<button>Menu</button>

<!-- 👎 Acceptable si design impose une icône seule -->
<button aria-label="Menu">
  <svg aria-hidden="true">...</svg>
</button>

2. N'utilisez pas aria-label sur les éléments non-interactifs

CODE
<!-- Incorrect : div n'est pas interactif -->
<div aria-label="Section importante">...</div>

<!-- Correct : Utilisez un heading -->
<section aria-labelledby="section-title">
  <h2 id="section-title">Section importante</h2>
</section>

3. Masquez les icônes décoratives

Quand un bouton a un aria-label, l'icône devient décorative et doit être masquée :

CODE
<button aria-label="Supprimer l'article">
  <svg aria-hidden="true"><!-- icône poubelle --></svg>
</button>

4. Respectez "Label in Name"

Le texte visible doit être inclus dans le nom accessible (WCAG 2.5.3) :

CODE
<!-- Incohérent : Le texte visible "Envoyer" n'est pas dans aria-label -->
<button aria-label="Valider le formulaire">Envoyer</button>

<!-- Cohérent -->
<button aria-label="Envoyer le formulaire de contact">Envoyer</button>

Erreurs courantes

1. Duplication inutile

CODE
<!-- Redondant : Le contenu text suffit -->
<button aria-label="Envoyer">Envoyer</button>

<!-- Simple et efficace -->
<button>Envoyer</button>

2. aria-label sur des images

CODE
<!-- aria-label ne fonctionne pas bien sur img -->
<img src="logo.png" aria-label="Logo de l'entreprise">

<!-- Utilisez alt -->
<img src="logo.png" alt="Logo de l'entreprise">

3. Oublier de cacher l'icône

CODE
<!-- L'icône est lue deux fois -->
<button aria-label="Menu">
  <svg><title>Menu</title>...</svg>
</button>

<!-- L'icône est masquée -->
<button aria-label="Menu">
  <svg aria-hidden="true">...</svg>
</button>

Critères RGAA concernés

CritèreTitreAttributs concernés
1.1Alternative textuelle imagesaria-label, aria-labelledby
6.1Intitulé des liensaria-label, aria-labelledby
11.1Labels des champsaria-label, aria-labelledby
11.2Pertinence des labelsTous

Conclusion

aria-label et aria-labelledby sont des outils puissants mais à utiliser avec discernement. La règle simple : si vous pouvez montrer le texte, montrez-le. ARIA vient en complément du HTML sémantique, jamais en remplacement.

Vérifiez vos attributs ARIA avec RGAA Checker : notre outil détecte automatiquement les labels manquants et les incohérences.

Votre site est-il conforme ?

Ne prenez pas de risques avec l'accessibilité. Lancez un audit complet de votre site en quelques minutes et obtenez un rapport détaillé des corrections à apporter.