Pseudo-classe CSSPseudo-classes

:focus

Correspond à l’élément qui a le focus, c’est-à-dire qui reçoit actuellement la saisie au clavier, par exemple un champ de formulaire cliqué.

Sur cette page

Exemple

#
CSS
.input {
  border: 1px solid #52525b;
  transition: border-color 0.15s, box-shadow 0.15s;
}

.input:focus {
  border-color: #a78bfa;
  box-shadow: 0 0 0 3px rgb(167 139 250 / 0.35);
  outline: 2px solid transparent;
}
Aperçu

Un contour transparent n’est pas visible au quotidien. En mode contraste élevé de Windows, les ombres disparaissent et le contour reçoit une couleur système, donc le focus reste visible.

Définition et utilisation

#

Un élément a le focus quand les frappes de touches lui sont destinées. Les champs de formulaire reçoivent le focus au clic, tout comme les liens, les boutons et les autres éléments interactifs lors de la navigation avec la touche Tab. À un instant donné, au plus un élément de la page a le focus.

La pseudo-classe :focus correspond toujours à l’élément qui a le focus, peu importe comment il l’a obtenu. Dans de nombreux navigateurs, un bouton cliqué à la souris l’obtient aussi, c’est pourquoi le contour qui apparaît après un clic est souvent jugé disgracieux. La solution n’est pas outline: none, mais :focus-visible, qui n’affiche l’indicateur que lorsqu’il est utile.

Les éléments ordinaires, comme div, n’acceptent pas le focus. Vous pouvez changer cela avec l’attribut tabindex="0", qui ajoute l’élément à l’ordre de tabulation, ou tabindex="-1", qui permet de donner le focus à l’élément par clic ou par script, tout en l’excluant de la touche Tab. Pour styliser un conteneur quand un élément à l’intérieur a le focus, utilisez :focus-within.

Syntaxe

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

Utilisations courantes

#
  • input:focus

    Cliquez dans le champ : un contour violet apparaît. Cliquez ailleurs, et le contour disparaît.
  • button:focus

    Cliquez sur le bouton avec la souris. Dans la plupart des navigateurs, il obtient aussi le focus, donc le contour apparaît même après un clic.
  • [tabindex]:focus

    Un simple div avec un attribut tabindex="0" peut aussi avoir le focus. Cliquez dessus ou atteignez-le avec la touche Tab.
  • :focus

    Sans rien avant les deux-points, la règle s’applique à chaque élément qui a le focus. Cliquez dans l’aperçu et naviguez avec la touche Tab.

Utilisations courantes en pratique

#

input:focus

Cliquez dans le champ : un contour violet apparaît. Cliquez ailleurs, et le contour disparaît.
input:focus {
  outline: 2px solid #a78bfa;
  outline-offset: 2px;
}

button:focus

Cliquez sur le bouton avec la souris. Dans la plupart des navigateurs, il obtient aussi le focus, donc le contour apparaît même après un clic.
button:focus {
  outline: 2px solid #f59e0b;
  outline-offset: 2px;
}

[tabindex]:focus

Un simple div avec un attribut tabindex="0" peut aussi avoir le focus. Cliquez dessus ou atteignez-le avec la touche Tab.
[tabindex]:focus { background: #7c3aed; color: #fff; }

:focus

Sans rien avant les deux-points, la règle s’applique à chaque élément qui a le focus. Cliquez dans l’aperçu et naviguez avec la touche Tab.
:focus {
  outline: 2px dashed #10b981;
  outline-offset: 3px;
}

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

#
  • Ne retirez jamais l’indicateur de focus sans remplacement. Si le contour après un clic vous dérange, déplacez le style vers :focus-visible plutôt que d’écrire outline: none.
  • L’indicateur de focus doit être bien visible. Les recommandations d’accessibilité préconisent un contraste d’au moins 3:1 par rapport à l’environnement.
  • L’ordre du focus suit l’ordre des éléments dans le HTML. Ne le modifiez pas avec des valeurs tabindex positives ; réorganisez plutôt le code.

Entrées associées

#

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