Nillus Nillus - 28 days ago 6
CSS Question

CSS hover on a div, but not if hover on his children

I looked if this question had already been answered, but couldn't find anything, only questions on the reverse css rule I am looking for.

I have a div that contains one or more child, and I want it to change its background on hover, but not if hovering one of its children; I need the :hover rule to be restricted to pure element, not its offsprings it contains. Being not a parent rule in CSS, and being :hover triggered whenever the mouse passes over the parent AND its children, I find myself out of ideas, and maybe this result is impossible to achieve with only CSS.
However, the question is about CSS, so no JS or JQuery solution is needed (I can provide that by myself)

I thank you in advance for any ideas or suggestions

Code:

HTML

<div class="parent">Text of the parent
<p class="class1">I do not need to trigger parent's background color change!</p>
</div>


CSS

.parent {
background: #ffffff;
}
.parent:hover {
background: #aaaaff;
}
.class1 {
margin: 10px;
}

Answer

The ability to stop an element's hover effect when the child is hovered is not currently possible with the CSS selectors that we have, this is as close as we can get without javascript - affecting the child on hover in addition to affecting the parent. This will only work if the child is 100% of the width and height of the parent

In the CSS4 draft there is a parent selector ! which could be used in cases like this as follows:

.parent! .class1:hover {
   background: #ffffff;
}

But we don't have that capability yet