我知道不存在CSS parent selector,但是在没有这样一个选择器的情况下悬停子元素时,是否可以样式化父元素?
给予个例子:考虑一个 * 删除按钮 *,当其悬停时将突出显示将要被删除的元素:
<div>
<p>Lorem ipsum ...</p>
<button>Delete</button>
</div>
通过纯CSS的方式,当鼠标在按钮上时,如何改变这个部分的背景颜色?
我知道不存在CSS parent selector,但是在没有这样一个选择器的情况下悬停子元素时,是否可以样式化父元素?
给予个例子:考虑一个 * 删除按钮 *,当其悬停时将突出显示将要被删除的元素:
<div>
<p>Lorem ipsum ...</p>
<button>Delete</button>
</div>
通过纯CSS的方式,当鼠标在按钮上时,如何改变这个部分的背景颜色?
8条答案
按热度按时间fjaof16o1#
我知道这是一个老问题,但我只是设法做到这一点,没有一个伪子(但伪 Package 器)。
如果您将父对象设置为没有
pointer-events
,然后将pointer-events
的子对象div
设置为auto
,则可以正常工作:)请注意,
<img>
标记(例如)并不起作用。另外,对于其他拥有自己的事件侦听器的子进程,请记住将
pointer-events
设置为auto
,否则它们将失去单击功能。编辑:
如Shadow Wizard所述:值得一提的是,这对IE10及以下版本不起作用(老版本的FF和Chrome也一样,请看这里)
omjgkv6w2#
这个问题之前已经被问过很多次了,简短的典型答案是:它不能由纯CSS完成。它的名称是:* 层叠样式表 * 仅支持层叠方向的样式,不支持向上。
但是在大多数希望达到这种效果的情况下,比如在给定的例子中,仍然有可能使用这些级联特性来达到预期的效果。
诀窍是给予兄弟节点和父节点相同的大小和位置,并给兄弟节点而不是父节点设置样式,这看起来就像父节点被设置了样式一样!
现在,如何设置兄弟的样式?
当子对象悬停时,父对象也悬停,但兄弟对象不悬停。兄弟对象也是如此。这总结了三种可能的CSS选择器路径来设置兄弟对象的样式:
这些不同的路径允许一些很好的可能性,例如,在问题中的例子上释放这个技巧会得到**this fiddle**:
显然,在大多数情况下,这个技巧依赖于使用绝对定位来给予兄弟节点与父节点相同的大小,并且仍然让子节点出现在父节点中。
有时候为了选择一个特定的元素,需要使用一个更合适的选择器路径,如**this fiddle**所示,它在树型菜单中多次实现了这个技巧。
shyt4zoc3#
另一个,更简单的“替代”方法(对一个老问题)。
将元素放置为兄弟并用途:
Adjacent Sibling Selector(
+
)或General Sibling Selector(~
)Demo Fiddle here .
zlwx9yxi4#
不存在用于选择所选子节点的父节点的CSS选择器。
你可以用JavaScript来实现
u4vypkhs5#
如前所述,“没有CSS选择器用于选择所选子对象的父对象”。
因此,您可以:
以下是javascript/jQuery解决方案的示例
在javascript方面:
在CSS方面,你会有这样的东西:
型
dauxcl2d6#
这个解决方案完全取决于设计,但是如果您有一个父div,您想在悬停子div时更改背景,您可以尝试使用
::after
/::before
模拟父div。CSS:
See a full fiddle example here
dwthyt8l7#
2022年:
现在只能通过CSS实现,使用
:has
伪类和以下表达式:下面是一个展示原始命题的片段:
x一个一个一个一个x一个一个二个x
参见浏览器支持here。在撰写本文时,所有主流浏览器都支持它--除了Firefox,它的实验性实现仍然存在缺陷。
jhiyze9q8#
这在Sass中非常容易做到!不要为此钻研JavaScript。Sass中的&选择器正是这样做的。
http://thesassway.com/intermediate/referencing-parent-selectors-using-ampersand