Combinateur CSSSélecteurs

A + B

Le signe + sélectionne l’élément B qui se trouve immédiatement après l’élément A et partage le même parent que lui.

Sur cette page

Exemple

#
CSS
h3 + p {
  font-size: 17px;
  color: #fff;
}
Aperçu

Définition et utilisation

#

Le combinateur de voisin direct, aussi appelé combinateur de frère suivant, relie deux éléments placés juste l’un à côté de l’autre. L’écriture h2 + p touche le paragraphe qui suit immédiatement un titre h2, mais pas les paragraphes suivants, ni un paragraphe séparé par un autre élément.

Les deux éléments doivent avoir le même parent, et B doit se trouver après A, jamais avant. Le texte et les commentaires entre eux ne comptent pas, seuls les éléments comptent.

Les usages typiques sont la mise en valeur du premier paragraphe après un titre, l’espacement entre des éléments voisins (li + li), et la réaction à l’état d’un champ de formulaire : input:checked + label change l’étiquette qui se trouve juste après un champ coché.

CSS n’a pas de combinateur distinct pour le voisin précédent. Quand vous voulez styliser un élément qui se trouve avant un autre, utilisez :has() : h2:has(+ p) sélectionne un titre suivi d’un paragraphe.

Syntaxe

#
Syntaxe
A + B { propriété: valeur; }

Exemples de sélecteurs

#
  • .start + span

    Seulement l’élément qui se trouve juste après .start. Le 4 ne correspond plus.
  • span + span

    Chaque span immédiatement précédé d’un autre span. Le 6 est exclu, car son prédécesseur est un em.
  • .start + span + span

    Les combinateurs s’enchaînent : ici, le deuxième élément après .start.
  • .demo > * + *

    Chaque enfant du cadre qui a un prédécesseur. Seul le premier élément reste gris, c’est pourquoi ce motif sert à l’espacement entre les éléments.

Exemples de sélecteurs en pratique

#

.start + span

Seulement l’élément qui se trouve juste après .start. Le 4 ne correspond plus.
.start + span { background: #7c3aed; color: #fff; }

span + span

Chaque span immédiatement précédé d’un autre span. Le 6 est exclu, car son prédécesseur est un em.
span + span { background: #7c3aed; color: #fff; }

.start + span + span

Les combinateurs s’enchaînent : ici, le deuxième élément après .start.
.start + span + span { background: #7c3aed; color: #fff; }

.demo > * + *

Chaque enfant du cadre qui a un prédécesseur. Seul le premier élément reste gris, c’est pourquoi ce motif sert à l’espacement entre les éléments.
.demo > * + * { background: #7c3aed; color: #fff; }

Plus d’exemples

#
Une étiquette qui réagit à un champ coché
CSS
.option input:checked + label {
  border-color: #a78bfa;
  background: rgb(124 58 237 / 0.2);
  color: #fff;
}
Aperçu

Cliquez sur la deuxième option. Le style passe à l’étiquette qui se trouve juste après le champ coché.

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

#
  • Pour l’espacement entre les éléments d’une liste, li + li { margin-top: 8px; } suffit : le premier élément ne recevra pas de marge superflue. Dans les conteneurs flex et grid, gap est plus simple.
  • Pour les champs de formulaire, conservez l’ordre en HTML : d’abord input, puis label. Le combinateur ne fonctionne que vers l’avant.
  • Vous sélectionnerez le voisin précédent avec :has(), par exemple label:has(+ input:invalid) est une étiquette qui se trouve avant un champ invalide.

Entrées associées

#

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