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

Fixing cookies are blocked for a website with shields down on Brave

I recently switched completely to the Brave browser and have set ad blocking to aggressive…

4 months ago

Generating a QR code using Node.js

I was preparing a slide deck for a hackathon and decided to put in a…

5 months ago

How to clear the global npx cache

I have been using npx a lot lately, especially whenever I want to use a…

5 months ago

Copy/Pasting output from the terminal

Manually copy-pasting the output of a terminal command with a mouse/trackpad feels tedious. It is…

6 months ago

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…

7 months ago

Native popover API in HTML

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

7 months ago
Advertisements