Web Development

CSS :has a parent selector now

Advertisements

CSS now includes a :has selector that allows us to apply styles on the basis of what is happening inside an element. Often referred to as a parent seletor, the :has() function allows us to achieve this and more.

Let us take a look at this relative selector.

div:has(img) {
  background: black;
}
CSS

It only applies the background if there is an image inside the div, otherwise, it will not. So

<div>
     <img />
</div>
HTML

will get selected but if it is a simple div, or has anything else inside it, the styles will not be applied to them.

Chaining

We can even chain the selector and have nested conditions:

div:has(h2):has(ul) {
  background: black;
}
CSS

Not just a parent selector

I came across this article which takes the selector a bit further and does not limit the :has selector to just being a parent selector. You can select the children as well by combining it with the parent selector.

/*  Matches <figure> elements that have a <figcaption> as a child element */
figure:has(figcaption) { … }

/* Matches <img> elements that is a child of a <figure> that contains a <figcaption> child element */
figure:has(figcaption) img { … }
CSS

The second selector gives us the ability to select the child image and we can get a lot more creative and it opens a world of opportunities.

Browser support

While CSS :has is a part of the official spec, it is not fully supported across all browsers yet. But it should hopefully be implemented by Firefox soon and we will get to use it in our future projects.

Saransh Kataria

Born in Delhi, India, Saransh Kataria is the brain behind Wisdom Geek. Currently, Saransh is a software developer at a reputed firm in Austin, and he likes playing with new technologies to explore different possibilities. He holds an engineering degree in Computer Science. He also shares his passion for sharing knowledge as the community lead at Facebook Developer Circle Delhi, NCR which is a developer community in Delhi, India.

Share
Published by
Saransh Kataria
Tags: CSS

Recent Posts

How To Get The Hash of A File In Node.js

While working on a project, I wanted to do an integrity check of a file…

3 days ago

Native popover API in HTML

Popovers have been a problem that was typically solved by using a third-party solution. But…

1 week ago

Node.js 20.6 adds built-in support for .env files

Node.js 20.6 added built-in support for the .env file. This is an excellent addition to the platform…

3 weeks ago

Object destructuring in TypeScript

Object destructuring is a powerful ES 6 feature that can help developers write cleaner code.…

1 month ago

Improve git clone performance in a CI pipeline

Have you felt particularly annoyed by the time it takes to clone a large repository,…

1 month ago

Fix: Hydration failed because the initial UI does not match what was rendered on the server

Within a React or Next.js app, if you encounter the error "Hydration failed because the…

2 months ago
Advertisements