Pseudo-classe CSSPseudo-classes

:focus-visible

Correspond à un élément ayant le focus seulement quand le navigateur juge que l’indicateur doit être visible, par exemple lors d’une navigation au clavier.

Sur cette page

Exemple

#
CSS
.btn:focus-visible {
  outline: 3px solid #f59e0b;
  outline-offset: 3px;
}
Aperçu

Définition et utilisation

#

La pseudo-classe :focus-visible est une version plus intelligente de :focus. Le navigateur évalue lui-même si un indicateur visible sera utile à l’utilisateur. Lors d’une navigation avec la touche Tab, elle correspond toujours ; après un clic de souris sur un bouton, généralement non, car on sait déjà où se trouve le focus.

Les champs de texte sont une exception : après un clic de souris, ils correspondent à la fois à :focus et à :focus-visible, car l’utilisateur va aussitôt écrire au clavier et doit voir quel champ est actif.

Grâce à cela, vous n’avez pas à choisir entre l’apparence et l’accessibilité. Vous donnez votre propre style de focus bien visible dans :focus-visible, et les personnes qui cliquent à la souris ne voient pas de contour sur chaque bouton cliqué. Le contour par défaut des navigateurs modernes repose lui aussi sur cette pseudo-classe.

Syntaxe

#
Syntaxe
sélecteur:focus-visible { propriété: valeur; }

Utilisations courantes

#
  • button:focus-visible

    Cliquez sur le bouton avec la souris : pas de contour. Appuyez maintenant sur Tab : il apparaît, car vous naviguez au clavier.
  • button:focus

    Pour comparer, un simple :focus : dans la plupart des navigateurs, le contour apparaît aussi après un clic de souris.
  • input:focus-visible

    Le champ de texte correspond aussi après un clic de souris, car vous allez bientôt y écrire.

Utilisations courantes en pratique

#

button:focus-visible

Cliquez sur le bouton avec la souris : pas de contour. Appuyez maintenant sur Tab : il apparaît, car vous naviguez au clavier.
button:focus-visible {
  outline: 3px solid #f59e0b;
  outline-offset: 3px;
}

button:focus

Pour comparer, un simple :focus : dans la plupart des navigateurs, le contour apparaît aussi après un clic de souris.
button:focus {
  outline: 3px solid #f59e0b;
  outline-offset: 3px;
}

input:focus-visible

Le champ de texte correspond aussi après un clic de souris, car vous allez bientôt y écrire.
input:focus-visible {
  outline: 3px solid #a78bfa;
  outline-offset: 2px;
}

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • N’écrivez pas :focus { outline: none }. Les navigateurs n’affichent de toute façon leur contour par défaut qu’avec :focus-visible, et le supprimer prive les personnes qui naviguent au clavier de tout repère.
  • Associez les effets de survol au focus clavier : .link:hover, .link:focus-visible { … }.
  • Choisissez un style de focus visible sur n’importe quel fond. Un contour épais avec outline-offset fonctionne mieux qu’un léger changement de couleur.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.