Sélecteurs CSS modernes : :where(), :is() et :has()

CSS continue d’évoluer et introduit de puissants nouveaux sélecteurs qui enrichissent les possibilités de mise en forme.

Trois nouveaux sélecteurs sont :is(), :where() et :has().

Le sélecteur :is()

Il permet de simplifier les sélecteurs complexes en regroupant plusieurs éléments.

Exemple :

nav > ul a:hover,
footer > ol a:hover,
aside > p a:hover {
  color: purple;
}

/** Peut devenir **/
:is(nav > ul, footer > ol, aside > p) a:hover {
  color: purple;
}

Le sélecteur :where()

Le sélecteur :where() fonctionne comme :is(), sans augmenter la spécificité. Il est donc utile pour définir des styles sans modifier la priorité des styles existants.

Cela peut vous aider à résoudre des problèmes pour lesquels votre seul recours aurait été d’utiliser un sélecteur encore plus spécifique ou d’ajouter !important à une règle CSS.

Bien qu’utile pour les problèmes de spécificité, la pseudo-classe :where() peut aussi avoir un impact important dans les bibliothèques CSS.

À retenir :

  • Utilisez :is() lorsque vous souhaitez conserver la spécificité.
  • Utilisez :where() lorsque vous voulez appliquer des styles sans augmenter la spécificité, afin qu’il soit plus facile de les remplacer par d’autres règles CSS.

Le sélecteur :has()

Le sélecteur :has(), souvent appelé « sélecteur parent », permet de mettre en forme des éléments en fonction de la présence d’éléments enfants spécifiques. C’était auparavant impossible avec le CSS seul.

Exemple :

article:has(img) {
  border: 2px solid red;
}

Cela applique une bordure rouge à chaque élément article qui contient une image.

Conclusion

Ces nouveaux sélecteurs :where(), :is() et :has() apportent plus de puissance et de flexibilité au CSS. :where() réduit la spécificité, :is() simplifie les sélecteurs complexes et :has() permet de mettre en forme un parent selon ses enfants.