我知道不存在一个CSS父选择器,但是否有可能在没有这样的选择器的情况下悬停子元素时设置父元素的样式?

举个例子:考虑一个删除按钮,当鼠标悬停时,它会突出显示即将被删除的元素:

<div>
    <p>Lorem ipsum ...</p>
    <button>Delete</button>
</div>

通过纯CSS的方式,当鼠标在按钮上时,如何改变这个部分的背景颜色?


当前回答

我知道这是一个老问题,但我只是设法在没有伪子程序(而是伪包装器)的情况下做到了这一点。

如果你将父div设置为没有指针事件,然后将子div的指针事件设置为auto,它可以工作:) 注意,<img>标记(例如)并不能做到这一点。 还要记住,对于其他拥有自己的事件侦听器的子节点,将pointer-events设置为auto,否则它们将失去单击功能。

div.parent { pointer-events:没有; } div.child { pointer-events:汽车; } div.parent:{徘徊 背景:黄色; } < div class = "父" > 父母-你可以悬停在这里,它不会触发 <div class="child">改为悬停在child上!< / div > < / div >

编辑: 正如影子向导所指出的:值得一提的是,这将不适用于IE10及以下。(旧版本的FF和Chrome也,见这里)

其他回答

这在Sass中是非常容易做到的!不要为此钻研JavaScript。sass中的&选择器就是这样做的。

http://thesassway.com/intermediate/referencing-parent-selectors-using-ampersand

这个解决方案完全取决于设计,但如果你有一个父div,你想要在悬停子div时改变背景,你可以尝试模仿父div,使用::after /::before。

<div class="item">
    design <span class="icon-cross">x</span>
</div>

CSS:

.item {
    background: blue;
    border-radius: 10px;
    position: relative;
    z-index: 1;
}
.item span.icon-cross:hover::after {
    background: DodgerBlue;
    border-radius: 10px;
    display: block;
    position: absolute;
    z-index: -1;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    content: "";
}

在这里查看完整的小提琴示例

如前所述,“没有CSS选择器来选择所选子对象的父对象”。

所以你要么:

使用NGLN的回答中描述的CSS hack 使用javascript -和jQuery最有可能


下面是javascript/jQuery解决方案的示例

javascript方面:

$('#my-id-selector-00').on('mouseover', function(){
  $(this).parent().addClass('is-hover');
}).on('mouseout', function(){
  $(this).parent().removeClass('is-hover');
})

在CSS方面,你会有这样的东西:

.is-hover {
  background-color: red;
}

没有CSS选择器来选择所选子节点的父节点。

你可以用JavaScript来做

我知道这是一个老问题,但我只是设法在没有伪子程序(而是伪包装器)的情况下做到了这一点。

如果你将父div设置为没有指针事件,然后将子div的指针事件设置为auto,它可以工作:) 注意,<img>标记(例如)并不能做到这一点。 还要记住,对于其他拥有自己的事件侦听器的子节点,将pointer-events设置为auto,否则它们将失去单击功能。

div.parent { pointer-events:没有; } div.child { pointer-events:汽车; } div.parent:{徘徊 背景:黄色; } < div class = "父" > 父母-你可以悬停在这里,它不会触发 <div class="child">改为悬停在child上!< / div > < / div >

编辑: 正如影子向导所指出的:值得一提的是,这将不适用于IE10及以下。(旧版本的FF和Chrome也,见这里)