Skip to main content

Css :has Example


The :has() CSS pseudo-class represents an element if any of the selectors passed as parameters (relative to the :scope of the given element) match at least one element.

/* Selects any <a>, as long as it has an <img> element directly inside it  */
/* Note that this is not supported in any browser yet */
let test = document.querySelector('a:has(> img)');

Syntax


:has( <relative-selector-list> )

where
<relative-selector-list> =
<relative-selector>#

where
<relative-selector> =
<combinator>? <complex-selector>

where
<combinator> = '>'
| '+' | '~' | [ '||' ]
<complex-selector> =
<compound-selector> [ <combinator>? <compound-selector> ]*

where
<compound-selector> =
[ <type-selector>? <subclass-selector>* [ <pseudo-element-selector> <pseudo-class-selector>* ]* ]!

where
<type-selector> =
<wq-name> | <ns-prefix>? '*'
<subclass-selector> =
<id-selector> | <class-selector> | <attribute-selector> | <pseudo-class-selector>
<pseudo-element-selector> = ':'
<pseudo-class-selector>
<pseudo-class-selector> = ':' <ident-token>
| ':' <function-token> <any-value> ')'

where
<wq-name> =
<ns-prefix>? <ident-token>
<ns-prefix> =
[ <ident-token> | '*' ]? |
<id-selector> = <hash-token>
<class-selector> = '.' <ident-token>
<attribute-selector> = '
[' <wq-name> ']' | '[' <wq-name> <attr-matcher> [ <string-token> | <ident-token> ] <attr-modifier>? ']'

where
<attr-matcher> =
[ '~' | | | '^' | '$' | '*' ]? '='
<attr-modifier> = i
| s


Description


The :has() pseudo-class takes a relative selector list as an argument. In earlier revisions of the CSS Selectors Level 4 specification, :has had a limitation that it couldn't be used within stylesheets. Instead, it could only be used with functions like document.querySelector(); this was due to performance concerns. This limitation has been removed because no browser implemented it that way. Instead, browsers currently only support the use of :has() within stylesheets.


Examples


Matching <a> elements that directly contain an <img>


The following selector matches only <a> elements that directly contain an <img> child:

a:has(> img)

Matching <h1> elements that are followed by a <p>


The following selector matches <h1> elements only if they have a <p> element directly following them:

h1:has(+ p)

Specifications


Specification Status Comment
Selectors Level 4
The definition of ':has()' in that specification.
Working Draft Initial definition

Browser compatibility








































DesktopMobile
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebView AndroidChrome AndroidFirefox for AndroidOpera AndroidSafari on IOSSamsung Internet
:has
No



No



No


No
No
No
No
No

No


No
No
No

See also




Comments

Popular posts from this blog

Converting A String To Int In Groovy

"Cannot Create Cache Directory /home//.composer/cache/repo/https---packagist.org/, Or Directory Is Not Writable. Proceeding Without Cache"

Android How Can I Convert A String To A Editable