:has

Baseline 2023
Newly available

Since December 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

La pseudo-classe :has() permet de cibler un élément si au moins un des sélecteurs passés en paramètre correspond à l'élément (selon la portée, :scope, de l'élément).

Cette pseudo-classe :has() prend en paramètre une liste de sélecteurs.

Note : Pour des raisons de performances et dans la spécification actuelle, has() n'est pas classé comme un sélecteur dynamique et peut uniquement être utilisé de façon statique (par exemple avec des fonctions comme document.querySelector().

js
/* Avec cette ligne de JavaScript, on récupère  */
/* tous les éléments <a> qui ont un fils direct */
/* qui est un élément <img> */
/* Attention, actuellement cette fonction n'est */
/* pas prise en charge par les navigateurs et   */
/* n'est pas conçue pour fonctionner dans les   */
/* feuilles de style */
var test = document.querySelector("a:has(> img)");

Syntaxe

:has(liste_selecteurs) { proprietes }

Exemples

Dans l'exemple suivant, le sélecteur permet de cibler uniquement les éléments <a> qui contiennent un fils direct <img> :

css
a:has(> img) {
}

Le sélecteur qui suit correspond aux éléments <h1> qui précèdent directement un élément <p> :

css
h1:has(+ p) {
}

Spécifications

Specification
Selectors Level 4
# relational

Compatibilité des navigateurs

Report problems with this compatibility data on GitHub
desktopmobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
:has()

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
No support
No support