悬停一个元素时更改所有其他元素的样式

Posted

技术标签:

【中文标题】悬停一个元素时更改所有其他元素的样式【英文标题】:Change style of all other elements when one element is hovered 【发布时间】:2012-09-07 06:36:28 【问题描述】:

假设我在同一个 DOM 级别有一堆 div。当我将鼠标悬停在一个上时,我希望所有其他人更改样式(即降低不透明度或更改背景),而悬停的那个保持不变。

我不能使用+~ 选择器,因为我需要它来选择所有兄弟姐妹,而不仅仅是直接相邻的一个或仅以下兄弟姐妹。基本上我正在寻找的是一个“除了这个之外的所有兄弟姐妹”选择器。这存在吗?有没有办法实现这一点无需 JavaScript

【问题讨论】:

【参考方案1】:

诀窍是将悬停伪选择器放置在父元素上,然后相应地设置子元素的样式。这是我指的:

.parent:hover .child 
    opacity: .5;

.parent .child:hover 
    opacity: 1;

这是一个演示:http://jsfiddle.net/joshnh/FJAYk/

【讨论】:

哇,真是小事一桩,想不到都觉得惭愧。谢谢。 但是等等,有一个问题。我提到的这些 div 之间有很多空白空间,我不希望它们只是通过将光标放在父 div 中而变暗。 这就是问题所在。如果您不希望这样,javascript 是您的最佳选择。 生活从来都不容易,不是吗?好吧,谢谢你证实了我的怀疑。【参考方案2】:

上面的例子很不错,但是如果div之间有margin,又不想鼠标悬停在空白处触发效果,就不需要javascript了。

这里有一个简单的解决方法:

只需将float:left 添加到.child 并确保.parent 具有overflow:visible(默认情况下应该可见)。

通过这样做,.parent 变为 0px 高(因此空白空间不会触发效果),但悬停在 .child 上会触发 :hover 伪类。

【讨论】:

以上是关于悬停一个元素时更改所有其他元素的样式的主要内容,如果未能解决你的问题,请参考以下文章

在 CSS 悬停事件中,我可以更改另一个 div 的样式吗? [复制]

将父元素悬停到子标签元素后如何更改相同的css样式?

在 Bootstrap 中更改悬停效果和字段选择的样式

如何更改元素的 CSS 类并在单击时删除所有其他类

悬停在一个链接上时 - 更改所有其他链接的样式

在悬停另一个元素时更改 SVG 填充颜色