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;
}
CSSIt only applies the background if there is an image inside the div, otherwise, it will not. So
<div>
<img />
</div>
HTMLwill get selected but if it is a simple div, or has anything else inside it, the styles will not be applied to them.
We can even chain the selector and have nested conditions:
div:has(h2):has(ul) {
background: black;
}
CSSI 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 { … }
CSSThe 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.
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.
I recently switched completely to the Brave browser and have set ad blocking to aggressive…
I was preparing a slide deck for a hackathon and decided to put in a…
I have been using npx a lot lately, especially whenever I want to use a…
Manually copy-pasting the output of a terminal command with a mouse/trackpad feels tedious. It is…
While working on a project, I wanted to do an integrity check of a file…
Popovers have been a problem that was typically solved by using a third-party solution. But…