Pseudo-classe CSSPseudo-classes

:focus-within

Correspond à un élément qui a lui-même le focus ou qui contient un élément avec le focus. Permet de mettre en valeur tout un formulaire ou une carte.

Sur cette page

Exemple

#
CSS
.search {
  border: 1px solid #3f3f46;
  transition: border-color 0.2s, box-shadow 0.2s;
}

.search:focus-within {
  border-color: #a78bfa;
  box-shadow: 0 0 0 3px rgb(167 139 250 / 0.3);
}
Aperçu

Cliquez dans le champ. Le contour s’applique à tout le conteneur avec l’icône, donc le champ lui-même peut rester sans bordure.

Définition et utilisation

#

La pseudo-classe :focus-within fait remonter l’information de focus dans l’arbre. Elle correspond à l’élément qui a le focus et à tous ses ancêtres. Un formulaire avec :focus-within change d’apparence dès que l’utilisateur clique sur l’un de ses champs.

C’est un moyen simple de mettre en valeur tout un groupe : une ligne de formulaire, un champ de recherche avec une icône, ou une carte avec des boutons. Ce genre d’effet nécessitait auparavant du JavaScript.

Elle fonctionne avec tout type de focus, y compris après un clic de souris. Si vous voulez réagir uniquement au focus clavier, associez :has() à :focus-visible : .card:has(:focus-visible).

Syntaxe

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

Utilisations courantes

#

Utilisations courantes en pratique

#

.demo:focus-within

Cliquez sur n’importe quel champ : tout le formulaire se met en valeur.
.demo:focus-within {
  background: rgb(124 58 237 / 0.2);
  outline: 2px solid #a78bfa;
}

label:focus-within

Seule l’étiquette contenant le champ actif se met en valeur.
label:focus-within { color: #fbbf24; }

.demo:not(:focus-within)

Le formulaire est atténué tant que vous ne cliquez pas dans l’un des champs.
.demo:not(:focus-within) { opacity: 0.55; }

.demo:focus-within label:not(:focus-within)

Mode concentration : pendant que vous écrivez dans un champ, l’autre s’estompe.
.demo:focus-within label:not(:focus-within) { opacity: 0.4; }

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

#
  • Quand vous cachez le contour d’un champ à l’intérieur d’un composant plus large, montrez le focus sur tout le composant via :focus-within. L’indicateur doit rester visible.
  • Les menus déroulants ouverts au survol (:hover) devraient aussi s’ouvrir avec :focus-within. Ils deviennent alors utilisables au clavier.

Entrées associées

#

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