Aller au contenu principal

Guide d’implémentation de boutons radio accessibles

Introduction​

Les boutons radio permettent aux utilisateurs de sélectionner une seule option parmi un ensemble. Assurer leur accessibilité est essentiel pour que tous les utilisateurs, y compris ceux utilisant des technologies d’assistance, puissent interagir avec eux de manière efficace.

Description technique​

Structure HTML accessible​

La structure HTML doit être sémantique et inclure des attributs ARIA pour une meilleure compréhension par les technologies d’assistance.

  • Groupe de Boutons Radio (<fieldset> et <legend>) : Utilisés pour regrouper logiquement les boutons radio et fournir une légende descriptive.
  • Bouton Radio (<input type="radio">) : Permet la sélection d'une option.
  • Étiquette (<label>) : Associée à chaque bouton radio pour indiquer son objectif.

Comportement javascript accessible​

  • Gestion du Focus : Assurer que les boutons radio sont focusables et que les utilisateurs peuvent naviguer entre eux en utilisant le clavier.
  • Mise à Jour Dynamique : Si l'état des boutons radio est modifié via JavaScript, s'assurer que les attributs ARIA sont mis à jour en conséquence.

Bonnes pratiques d’accessibilité​

  • Respect des Standards :
    • Suivre les directives WCAG 2.1, notamment le critère 1.3.1 sur l'information et les relations.
  • Messages Visuels et Auditifs :
    • Fournir des retours visuels clairs sur l'état sélectionné des boutons radio.
    • Assurer que les changements d'état sont annoncés par les technologies d’assistance.
  • Compatibilité Multi-Appareils :
    • Tester les boutons radio sur différents appareils et navigateurs pour garantir une expérience uniforme.

Recommandations supplémentaires​

  • Amélioration de l’Expérience Utilisateur :
    • Fournir des descriptions supplémentaires si nécessaire pour clarifier l'objectif de chaque bouton radio.
    • Assurer que la zone cliquable est suffisamment grande pour faciliter l'interaction, en incluant l'étiquette associée.

Exemple de code accessible​

<form>
<fieldset>
<legend>Choisissez votre couleur préférée :</legend>
<div>
<input type="radio" id="colorRed" name="favoriteColor" value="red" aria-checked="false" />
<label for="colorRed">Rouge</label>
</div>
<div>
<input type="radio" id="colorGreen" name="favoriteColor" value="green" aria-checked="false" />
<label for="colorGreen">Vert</label>
</div>
<div>
<input type="radio" id="colorBlue" name="favoriteColor" value="blue" aria-checked="false" />
<label for="colorBlue">Bleu</label>
</div>
</fieldset>
<div id="error-message" style="color: red; display: none;" aria-live="assertive"></div>
<button type="submit">Soumettre</button>
</form>

<script>
const radioButtons = document.querySelectorAll('input[type="radio"][name="favoriteColor"]');
const errorMessage = document.getElementById('error-message');

// Gestion de l'état des boutons radio
radioButtons.forEach((radio) => {
radio.addEventListener('change', () => {
radioButtons.forEach((rb) => rb.setAttribute('aria-checked', 'false'));
if (radio.checked) {
radio.setAttribute('aria-checked', 'true');
}
});
});

// Validation du formulaire
document.querySelector('form').addEventListener('submit', (event) => {
const isChecked = Array.from(radioButtons).some((radio) => radio.checked);
if (!isChecked) {
event.preventDefault();
errorMessage.style.display = 'block';
errorMessage.textContent = 'Vous devez sélectionner une couleur pour continuer.';
} else {
errorMessage.style.display = 'none';
errorMessage.textContent = '';
}
});
</script>