10.7 Dans chaque page web, pour chaque élément recevant le focus, la prise de focus est-elle visible ?
Description
L'indicateur de focus doit être visible sur tous les éléments interactifs lorsqu'ils reçoivent le focus clavier.
Niveau de conformité
Niveau A — Critère essentiel. Il s'agit du niveau de conformité minimum requis. Le non-respect de ce critère crée des barrières significatives pour les utilisateurs en situation de handicap.
Tests à réaliser
- Vérifier la visibilité du focus sur les liens
- Vérifier la visibilité du focus sur les boutons
- Vérifier la visibilité du focus sur les champs de formulaire
Comment corriger : trois écritures CSS
Les trois écritures ci-dessous produisent des résultats très différents. La première casse le critère, la deuxième le passe, la troisième le passe sans abîmer le rendu à la souris.
*:focus {
outline: none;
}Supprime l'indicateur pour tout le monde, clavier compris. Échec direct du 10.7. C'est la ligne qu'on remonte le plus souvent au scan.
:focus {
outline: 2px solid #1d4ed8;
outline-offset: 2px;
}Anneau bleu de 2 px, décollé de 2 px du bord grâce à outline-offset. Conforme. Seul bémol : l'anneau apparaît aussi au clic souris, ce que beaucoup de designers n'aiment pas.
:focus-visible {
outline: 2px solid #1d4ed8;
outline-offset: 2px;
}
/* neutralise l'anneau souris hérité */
:focus:not(:focus-visible) {
outline: none;
}:focus-visible ne s'active qu'au clavier. Le clic souris n'affiche plus l'anneau : vous gardez l'esthétique sans rien retirer à l'accessibilité clavier.
:focus ou :focus-visible ? :focus se déclenche quel que soit le moyen d'activation — clavier ET souris. C'est lui qui fait râler les équipes design, car cliquer sur un bouton laisse un contour. :focus-visible applique une heuristique du navigateur : il ne s'active que lorsque l'indicateur est utile, c'est-à-dire à la navigation clavier. En pratique, stylez le focus avec :focus-visible et laissez la souris tranquille. Support : tous les navigateurs modernes depuis 2022 ; pour les vieux navigateurs, :focus sert de repli.
Décliner le focus par type d'élément
La règle :focus-visible ci-dessus couvre le cas général. En pratique, un lien, un bouton, un champ et un composant sur-mesure n'appellent pas le même traitement : voici la déclinaison par type d'élément.
a:focus-visiblea:focus-visible {
outline: 2px solid currentColor;
outline-offset: 3px;
border-radius: 2px;
}outline: currentColor reprend la couleur du lien, qui est déjà censée contraster avec le fond. L'offset de 3 px éloigne l'anneau du soulignement pour qu'il reste lisible au milieu d'un paragraphe.
button:focus-visiblebutton:focus-visible {
outline: 3px solid transparent;
box-shadow: 0 0 0 3px #ffdd00,
0 0 0 6px #0b0c0c;
}Le double anneau du Design System de GOV.UK : jaune #ffdd00 puis noir #0b0c0c. Sur fond clair c'est le noir qui porte le contraste, sur fond sombre c'est le jaune — l'un des deux dépasse toujours 3:1, quel que soit le fond du bouton. L'outline transparent sert de repli pour le mode contraste forcé de Windows, qui remplace box-shadow par l'outline.
input, textarea, selectinput:focus-visible,
textarea:focus-visible,
select:focus-visible {
outline: 2px solid #1d4ed8;
outline-offset: 0;
border-color: #1d4ed8;
}On colle l'anneau au champ (offset 0) et on double avec un border-color pour l'aider à ressortir sur les formulaires denses. #1d4ed8 sur blanc = 6,7:1, bien au-dessus du seuil.
[role="button"][tabindex="0"][role="button"][tabindex="0"]:focus-visible,
[role="tab"]:focus-visible {
outline: 2px solid #1d4ed8;
outline-offset: 2px;
}Un bouton natif reçoit un anneau du navigateur par défaut ; un <div role="button"> non. Tout élément rendu focusable par tabindex="0" a besoin d'une règle de focus explicite, sinon il est traversé au clavier sans aucun repère visible.
Référence : GOV.UK Design System — focus states
Contraste de l'indicateur : les chiffres
L'indicateur doit non seulement exister, mais se détacher du fond. Le repère mesurable est 3:1 entre l'indicateur et le fond adjacent. Voici quatre couples de couleurs, avec le ratio calculé selon la formule de luminance relative WCAG (le vérificateur de contraste du site fait ce calcul pour vous) :
| Indicateur | Fond | Ratio | Verdict |
|---|---|---|---|
#1d4ed8 | #ffffff | 6,7:1 | Conforme |
#767676 | #ffffff | 4,5:1 | Conforme |
#959595 | #ffffff | 3,0:1 | Juste au seuil |
#cccccc | #ffffff | 1,6:1 | Non conforme |
Tester le focus visible en 5 étapes
- Inventorier les éléments focusables : liens, boutons, champs de formulaire, plus tout élément portant tabindex="0" ou un rôle ARIA interactif. Les tabindex="-1" sortent du parcours de tabulation.
- Naviguer uniquement au clavier : Tab pour avancer, Maj+Tab pour reculer, sans jamais toucher la souris.
- Vérifier qu'à chaque arrêt un indicateur visible entoure l'élément : contour (outline), ombre (box-shadow) ou changement de fond net.
- Mesurer le contraste de l'indicateur contre le fond adjacent et viser au moins 3:1. Le vérificateur de contraste évite le calcul à la main.
- Rejouer le parcours sur les composants sur-mesure (menus déroulants, onglets, modales) : c'est là que le reset CSS a le plus souvent effacé l'outline.
Cas particuliers qui piègent
- tabindex="0" sur un élément non natif
- Un <div tabindex="0" role="button"> entre dans le parcours clavier : il doit recevoir un style de focus explicite. Le navigateur ne dessine pas toujours d'anneau par défaut sur les éléments non natifs — à vous de l'ajouter.
- tabindex="-1"
- Retiré de la tabulation, donc hors périmètre du 10.7 pour la navigation Tab. Mais s'il reçoit le focus par script (ex. le titre d'une modale qu'on ouvre), l'indicateur redevient exigible à ce moment-là.
- box-shadow comme indicateur
- Un box-shadow: 0 0 0 3px #1d4ed8 est parfaitement valide, souvent plus propre qu'un outline car il épouse le border-radius. Il doit lui aussi atteindre 3:1 contre le fond.
- Changement de fond seul
- Ne modifier que la couleur de fond au focus peut suffire, à condition que le contraste entre l'état normal et l'état focus atteigne 3:1. Un assombrissement discret ne passe pas.
Correspondance WCAG, EN 301 549 et EAA
Le RGAA 10.7 est l'équivalent français du critère WCAG 2.4.7 « Focus Visible ». Détail qui compte : le RGAA le classe niveau A (exigé dès le socle minimal), là où WCAG le place en AA. L'énoncé du 10.7 n'inscrit pas de chiffre, mais sa méthode de test et les critères WCAG voisins (2.4.11 Focus non masqué, 2.4.13 Focus Appearance) fixent le repère mesurable à 3:1. Côté européen, l'European Accessibility Act (directive 2019/882, applicable depuis le 28 juin 2025) renvoie à la norme EN 301 549, dont la clause 9.2.4.7 reprend mot pour mot WCAG 2.4.7. En clair : corriger le 10.7 vous met en règle RGAA, WCAG et EAA d'un seul geste.
Questions fréquentes
- Un box-shadow peut-il remplacer l'outline pour signaler le focus ?
- Oui. Un box-shadow: 0 0 0 3px suit le border-radius et rend souvent mieux qu'un outline. Il doit atteindre le même repère de contraste de 3:1 contre le fond adjacent.
- Comment auditer le focus visible sur tout un site ?
- Naviguez au clavier (Tab / Maj+Tab) sur chaque gabarit et vérifiez l'indicateur à chaque arrêt. Pour dégrossir, notre scanner repère les outline:none non compensés dans les styles en ligne ; l'inspection fine reste manuelle sur les composants sur-mesure.
- Quelle différence entre :focus et :focus-visible ?
- :focus s'active au clavier comme à la souris ; :focus-visible ne s'active qu'au clavier. Utilisez :focus-visible pour afficher l'anneau seulement quand il sert, sans laisser de contour au clic souris.
- Le RGAA impose-t-il vraiment un ratio de 3:1 pour le focus ?
- L'énoncé du 10.7 parle de focus « visible » sans chiffre. Le repère de 3:1 vient de la méthode de test et des critères WCAG associés. En audit, un indicateur sous 3:1 est régulièrement considéré comme insuffisamment perceptible.
- Changer seulement la couleur de fond au focus suffit-il ?
- Oui si le contraste entre l'état normal et l'état focus atteint 3:1. Un simple survol assombri de quelques pourcents ne passe pas : l'écart doit être franc et mesurable.
- RGAA 10.7 et WCAG 2.4.7, c'est la même chose ?
- Même exigence de fond. Nuance : le RGAA classe le 10.7 en niveau A, WCAG classe 2.4.7 en AA. Corriger l'un corrige l'autre, plus la clause 9.2.4.7 de l'EN 301 549 visée par l'EAA.
Aller plus loin
Thématique
Ce critère fait partie de la thématique 10. Présentation de l'information qui comprend 14 critères au total.
Autres critères « Présentation de l'information »
- 10.1Dans chaque page web, les feuilles de styles sont-elles utilisées pour contrôler la présentation de l'information ?A
- 10.2Dans chaque page web, le contenu visible reste-t-il présent lorsque les feuilles de styles sont désactivées ?A
- 10.3Dans chaque page web, l'information reste-t-elle compréhensible lorsque les feuilles de styles sont désactivées ?A
- 10.4Dans chaque page web, le texte reste-t-il lisible lorsque la taille des caractères est augmentée jusqu'à 200% ?AA
- 10.5Dans chaque page web, les déclarations CSS de couleurs de fond d'élément et de police sont-elles correctement utilisées ?A
- 10.6Dans chaque page web, chaque lien dont la nature n'est pas évidente est-il visible par rapport au texte environnant ?A
- 10.8Pour chaque page web, les contenus cachés ont-ils vocation à être ignorés par les technologies d'assistance ?A
- 10.9Dans chaque page web, l'information ne doit pas être donnée uniquement par la forme, taille ou position. Cette règle est-elle respectée ?A
- 10.10Dans chaque page web, l'information ne doit pas être donnée par la forme, taille ou position uniquement. Cette règle est-elle implémentée de façon pertinente ?A
- 10.11Pour chaque page web, les contenus peuvent-ils être présentés sans avoir recours à un défilement vertical pour une fenêtre de 256px de hauteur ?AA
- 10.12Pour chaque page web, les contenus peuvent-ils être présentés sans avoir recours à un défilement horizontal pour une fenêtre de 320px de large ?AA
- 10.13Dans chaque page web, les propriétés d'espacement du texte peuvent-elles être redéfinies par l'utilisateur sans perte de contenu ou de fonctionnalité ?AA
- 10.14Dans chaque page web, les contenus additionnels apparaissant à la prise de focus ou au survol d'un composant d'interface sont-ils contrôlables par l'utilisateur ?AA