
Bonnes pratiques pour les formulaires, modales, etc.
Appliquez les bonnes pratiques d'accessibilité (a11y) aux formulaires, modales, images, et autres composants courants dans vos applications React pour une meilleure inclusion.
Appliquer les principes d'accessibilité aux composants clés
Au-delà des principes généraux d'accessibilité, certains composants et motifs d'interface utilisateur (UI patterns) courants présentent des défis spécifiques et nécessitent une attention particulière lors de leur implémentation en React. Se concentrer sur les bonnes pratiques pour ces éléments critiques comme les formulaires et les modales peut améliorer considérablement l'accessibilité globale de votre application.
Cette section détaille des recommandations concrètes pour rendre ces composants courants accessibles, en s'appuyant sur le HTML sémantique, les attributs ARIA et une gestion rigoureuse du focus.
Bonnes pratiques pour les formulaires accessibles
Les formulaires sont des points d'interaction essentiels et doivent être utilisables par tous.
- Etiquettes explicites (
) : C'est la règle la plus fondamentale. Chaque champ de formulaire (,,) doit avoir une étiquette associée via l'attributhtmlForen JSX, qui correspond à l'idunique de l'élément de formulaire. Cela permet aux utilisateurs de lecteurs d'écran de savoir à quoi sert chaque champ et aux utilisateurs de souris de cliquer sur l'étiquette pour activer le champ.
function ChampEmail() {
const inputId = React.useId(); // Génère un ID unique et stable
return (
);
}
- Groupement des contrôles (
,) : Lorsque plusieurs contrôles sont liés (par exemple, une série de boutons radio pour une même question, ou des cases à cocher pour des options multiples), regroupez-les dans un. Utilisez une balisecomme premier enfant dupour fournir une description globale du groupe. - Indication des champs obligatoires : Indiquez clairement quels champs sont requis, à la fois visuellement (souvent avec un astérisque `*` ou le mot "(requis)") et pour les technologies d'assistance en ajoutant l'attribut
aria-required="true"à l'élément de formulaire. - Gestion des erreurs de validation :
- Affichez les messages d'erreur de manière claire et à proximité du champ concerné.
- Associez programmatiquement le message d'erreur à l'input en utilisant l'attribut
aria-describedbysur l'input, pointant vers l'idde l'élément contenant le message d'erreur. Cela permet aux lecteurs d'écran d'annoncer l'erreur lorsque l'utilisateur arrive sur le champ. - Optionnellement, ajoutez
aria-invalid="true"à l'input en erreur. - Après une tentative de soumission échouée, déplacez le focus programmatiquement vers le premier champ en erreur pour guider l'utilisateur.
function ChampAvecErreur({ error }) {
const inputId = React.useId();
const errorId = error ? `error-${inputId}` : undefined;
return (
{error && {error}}
);
}
- Boutons de soumission clairs : Utilisez une balise
avec un texte descriptif (ex: "S'inscrire", "Envoyer le message").
Bonnes pratiques pour les modales (Dialogs) accessibles
Les boîtes de dialogue modales, qui apparaissent par-dessus le contenu principal, nécessitent une attention particulière pour l'accessibilité :
- Rôle ARIA : Utilisez
role="dialog"pour la plupart des modales. Si la modale contient un message critique nécessitant une réponse immédiate, utilisezrole="alertdialog". - Nom accessible : La modale doit avoir un nom. Utilisez
aria-labelledbypointant vers l'iddu titre visible de la modale. S'il n'y a pas de titre visible, utilisezaria-labelpour fournir un nom concis. - Description (optionnelle) : Si nécessaire, une description plus longue peut être liée via
aria-describedby. - Etat modal : Ajoutez
aria-modal="true"à l'élément ayant le `role="dialog"`. Cela indique aux technologies d'assistance que le contenu en dehors de la modale est temporairement inerte. - Gestion du focus : C'est l'aspect le plus critique :
- Focus initial : A l'ouverture, déplacez le focus programmatiquement à l'intérieur de la modale, idéalement sur le premier élément interactif (comme le bouton de fermeture ou le premier champ de formulaire), ou sur le conteneur de la modale lui-même (avec `tabIndex="-1"`) si aucun élément interactif n'est immédiatement pertinent.
- Piège à focus (Focus Trap) : Empêchez le focus de sortir de la modale lorsque l'utilisateur appuie sur Tab ou Maj+Tab. Le focus doit rester confiné à l'intérieur des éléments interactifs de la modale. Des bibliothèques comme
focus-trap-reactpeuvent aider. - Retour du focus : A la fermeture de la modale, renvoyez impérativement le focus à l'élément qui a déclenché son ouverture (bouton, lien...).
- Fermeture au clavier : Permettez aux utilisateurs de fermer la modale en appuyant sur la touche `Escape`.
Autres bonnes pratiques courantes
- Images (
) : Toujours fournir un attributalt. Décrivez le contenu de l'image si elle apporte une information. Si l'image est purement décorative ou si son information est déjà présente dans le texte adjacent, laissez l'attribut `alt` vide (alt="") pour que les lecteurs d'écran l'ignorent. - Liens (
) : Le texte du lien doit être suffisamment descriptif pour comprendre sa destination hors contexte. Evitez les "Cliquez ici" ou "En savoir plus" génériques. Si un lien ouvre une nouvelle fenêtre, indiquez-le (visuellement et/ou via un texte caché ou ARIA). - Boutons (
) : Le texte doit décrire clairement l'action effectuée. Pour les boutons ne contenant qu'une icône, utilisezaria-labelpour fournir une alternative textuelle. - Contrastes de couleurs : Assurez-vous que le rapport de contraste entre la couleur du texte et celle de son arrière-plan respecte au minimum les ratios définis par les WCAG (généralement 4.5:1 pour le texte normal, 3:1 pour le grand texte). Utilisez des outils pour vérifier vos palettes de couleurs.
- Contenu dynamique : Si du contenu est ajouté, supprimé ou mis à jour dynamiquement, assurez-vous que les technologies d'assistance en sont informées si nécessaire, par exemple en utilisant des régions live ARIA (
aria-live="polite"ouaria-live="assertive") pour les notifications ou les messages d'état.
En appliquant systématiquement ces bonnes pratiques spécifiques aux composants courants, en plus des principes généraux, vous ferez un grand pas vers la création d'applications React véritablement accessibles et utilisables par le plus grand nombre.