Day 36: :has() and pseudo-elements

We already know that we can select an element based on the presence of a certain child element (in Chrome/Edge 105+ and Safari 15.4+), but there are limitations.

<p>
  <strong>World</strong>!
</p>
p:has(strong) {
  background-color: aqua;
}

World!

This works well with actual elements, but it doesn’t work with pseudo-elements.

p::before {
  content: "Hello";
}

p:has(::before) {
  background-color: salmon;
}

World!

According to the spec, that’s because Pseudo-elements are generally excluded from :has() because many of them exist conditionally, based on the styling of their ancestors, so allowing these to be queried by :has() would introduce cycles..

For the sake of completeness, of course :has() works with pseudo-classes.

p:has(:hover) {
  background-color: salmon;
}

World!

My blog doesn’t support comments yet, but you can reply via blog@matuzo.at.


This content originally appeared on Manuel Matuzović - Blog and was authored by Manuel Matuzović

We already know that we can select an element based on the presence of a certain child element (in Chrome/Edge 105+ and Safari 15.4+), but there are limitations.

<p>
  <strong>World</strong>!
</p>
p:has(strong) {
  background-color: aqua;
}

World!

This works well with actual elements, but it doesn't work with pseudo-elements.

p::before {
  content: "Hello";
}

p:has(::before) {
  background-color: salmon;
}

World!

According to the spec, that's because Pseudo-elements are generally excluded from :has() because many of them exist conditionally, based on the styling of their ancestors, so allowing these to be queried by :has() would introduce cycles..

For the sake of completeness, of course :has() works with pseudo-classes.

p:has(:hover) {
  background-color: salmon;
}

World!

My blog doesn't support comments yet, but you can reply via blog@matuzo.at.


This content originally appeared on Manuel Matuzović - Blog and was authored by Manuel Matuzović


Print Share Comment Cite Upload Translate Updates
APA

Manuel Matuzović | Sciencx (2022-11-14T00:00:00+00:00) Day 36: :has() and pseudo-elements. Retrieved from https://www.scien.cx/2022/11/14/day-36-has-and-pseudo-elements-2/

MLA
" » Day 36: :has() and pseudo-elements." Manuel Matuzović | Sciencx - Monday November 14, 2022, https://www.scien.cx/2022/11/14/day-36-has-and-pseudo-elements-2/
HARVARD
Manuel Matuzović | Sciencx Monday November 14, 2022 » Day 36: :has() and pseudo-elements., viewed ,<https://www.scien.cx/2022/11/14/day-36-has-and-pseudo-elements-2/>
VANCOUVER
Manuel Matuzović | Sciencx - » Day 36: :has() and pseudo-elements. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2022/11/14/day-36-has-and-pseudo-elements-2/
CHICAGO
" » Day 36: :has() and pseudo-elements." Manuel Matuzović | Sciencx - Accessed . https://www.scien.cx/2022/11/14/day-36-has-and-pseudo-elements-2/
IEEE
" » Day 36: :has() and pseudo-elements." Manuel Matuzović | Sciencx [Online]. Available: https://www.scien.cx/2022/11/14/day-36-has-and-pseudo-elements-2/. [Accessed: ]
rf:citation
» Day 36: :has() and pseudo-elements | Manuel Matuzović | Sciencx | https://www.scien.cx/2022/11/14/day-36-has-and-pseudo-elements-2/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.