ComparaisonComparaisons

:focus vs :focus-visible

focus cible tout élément qui a le focus, même après un clic de souris. focus-visible affiche un indicateur seulement là où le navigateur le juge nécessaire.

Sur cette page

Comparaison point par point

#
  • S’applique après un clic de souris

    :focus
    Oui, dans la plupart des navigateurs, même sur des boutons
    :focus-visible
    Généralement non, sauf pour les champs de texte
  • S’applique après une navigation Tab

  • Qui décide d’afficher l’indicateur

    :focus
    S’applique toujours quand l’élément a le focus
    :focus-visible
    Le navigateur évalue si l’indicateur est nécessaire
  • Champ de texte après un clic de souris

    :focus
    S’applique
    :focus-visible
    S’applique aussi, car vous allez bientôt écrire
  • Support des navigateurs

    :focus
    Depuis longtemps, widely
    :focus-visible
    Plus récente, mais aussi widely
  • Recommandation pour le style de focus

    :focus
    Seulement si vous voulez réagir au focus peu importe l’appareil
    :focus-visible
    Oui, c’est le standard actuel du focus visible

Exemple

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

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

Définition et utilisation

#

La pseudo-classe :focus cible l’élément qui a le focus, peu importe comment il l’a obtenu : clic de souris, tap sur mobile, ou navigation avec la touche Tab. Dans la plupart des navigateurs, cliquer sur un bouton lui donne aussi le focus, c’est pourquoi le contour qui apparaît après un simple clic peut surprendre.

:focus-visible est plus intelligente. Le navigateur évalue lui-même si un indicateur de focus est nécessaire à ce moment-là. Après une navigation au clavier avec Tab, elle s’applique toujours, et après un clic de souris sur un bouton ou un lien, généralement non, car l’utilisateur voit déjà ce qu’il a cliqué. Les champs de texte sont une exception : ils correspondent aux deux, car vous allez de toute façon y écrire juste après le clic.

En pratique, mieux vaut écrire le style de focus dans :focus-visible plutôt que dans :focus. Les personnes qui cliquent à la souris ne voient alors pas de contour à chaque clic, tandis que celles qui naviguent au clavier gardent un indicateur clair. Ne retirez jamais le contour avec :focus { outline: none } sans un tel remplacement.

Syntaxe

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

Plus d’exemples

#
:focus affiche le contour même après un clic
CSS
button:focus {
  outline: 3px solid #f59e0b;
  outline-offset: 3px;
}
Aperçu

Pour comparer : un simple :focus affiche le contour, dans la plupart des navigateurs, même après un clic de souris.

Le champ de texte correspond aux deux pseudo-classes
CSS
input:focus-visible {
  outline: 3px solid #a78bfa;
}
Aperçu

Le champ de texte correspond à :focus-visible même après un clic de souris, car vous allez bientôt y écrire.

Bonnes pratiques

#
  • N’écrivez jamais :focus { outline: none } sans remplacement dans :focus-visible, car vous privez d’orientation les personnes qui naviguent au clavier.
  • Stylisez l’indicateur de focus dans :focus-visible, pour qu’il n’apparaisse pas à chaque clic de souris.
  • Associez les effets de survol au focus clavier : .btn:hover, .btn:focus-visible { ... }.

Entrées associées

#

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