使用以下html,当我将鼠标悬停在孩子身上时,我会在父母身上获得绿色背景。我怎么能阻止这种情况发生?如果我在子元素之外盘旋,我确实想要绿色背景。
CSS3很好。
<style>
.parent { padding: 100px; width: 400px; height:400px; }
.parent:hover { background-color: green; }
.child { padding: 100px; width: 200px; height:200px; }
.child:hover { background-color: blue; }
</style>
<div class="parent">
<div class="child">Child</div>
</div>
答案 0 :(得分:8)
所以这真的很难看,但它有效(有点)。我基本上创建了父母的副本作为孩子的兄弟姐妹。默认情况下隐藏parent-overwrite,然后显示在child的悬停上。 Chrome不喜欢它,除非您使用+选择器而不是〜选择器。这不是很容易扩展,但可能会有效。
正如其他人发布的那样,javascript可能是更好的解决方案。
<style>
.parent { padding: 100px; width: 400px; height:400px; position: relative; z-index: 998; }
.parent:hover { background-color: green; }
.child { padding: 100px; width: 200px; height:200px; position: relative; z-index: 1000; }
.child:hover { background-color: blue; }
.parent-overwrite { padding: inherit; width: inherit; height: inherit; position: absolute; top: 0; left: 0; z-index: 999; background-color: #FFF; display: none; }
.child:hover ~ .parent-overwrite { display: block; }
</style>
<div class="parent">
<div class="child">Child</div>
<div class="parent-overwrite"></div>
</div>
答案 1 :(得分:2)
我只能通过添加额外标记来完成此操作。需要添加一个空div,它基本上用作父背景。看看这里的CSS。
HTML部分:
<div class="parent">
Parent
<div class="child">
Child
<div class="grandson">
Grandson
<div class="grandson-bg"></div>
</div>
<div class="child-bg"></div>
</div>
<div class="parent-bg"></div>
</div>
CSS部分:
article, aside, figure, footer, header, hgroup, menu, nav, section { display: block; }
.parent { display: block; position: relative; z-index: 0;
height: auto; width: auto; padding: 25px;
}
.parent-bg { display: block; height: 100%; width: 100%;
position: absolute; top: 0px; left: 0px;
border: 1px solid white; z-index: 0;
}
.parent-bg:hover { border: 1px solid red; }
.child { display: block; position: relative; z-index: 1;
height: auto; width: auto; padding: 25px;
}
.child-bg { display: block; height: 100%; width: 100%;
position: absolute; top: 0px; left: 0px;
border: 1px solid white; z-index: 0;
}
.child-bg:hover { border: 1px solid red; }
.grandson { display: block; position: relative; z-index: 2;
height: auto; width: auto; padding: 25px;
}
.grandson-bg { display: block; height: 100%; width: 100%;
position: absolute; top: 0px; left: 0px;
border: 1px solid white; z-index: 0;
}
.grandson-bg:hover { border: 1px solid red; }
答案 2 :(得分:1)
最简单的方法是使用JS来实现这种CSS。也许您可以尝试重新考虑您的实施。你为什么要这样做呢?
答案 3 :(得分:1)
使用普通的CSS无法做到这一点。你要求一个孩子的伪类(child:hover
)来影响父母的background
声明。没有办法使用常规css指定那种东西。
这绝对可以使用javascript完成。
答案 4 :(得分:0)
我认为这是一个更好的解决方案,因为它可以扩展到更多级别,尽可能多,不仅仅是两个或三个。
我使用边框,但也可以使用任何想要的样式,例如背景颜色。
有了边框,我们的想法是:
您可以在http://jsbin.com/ubiyo3/13
进行测试以下是代码:
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Hierarchie Borders MarkUp</title>
<style>
.parent { display: block; position: relative; z-index: 0;
height: auto; width: auto; padding: 25px;
}
.parent-bg { display: block; height: 100%; width: 100%;
position: absolute; top: 0px; left: 0px;
border: 1px solid white; z-index: 0;
}
.parent-bg:hover { border: 1px solid red; }
.child { display: block; position: relative; z-index: 1;
height: auto; width: auto; padding: 25px;
}
.child-bg { display: block; height: 100%; width: 100%;
position: absolute; top: 0px; left: 0px;
border: 1px solid white; z-index: 0;
}
.child-bg:hover { border: 1px solid red; }
.grandson { display: block; position: relative; z-index: 2;
height: auto; width: auto; padding: 25px;
}
.grandson-bg { display: block; height: 100%; width: 100%;
position: absolute; top: 0px; left: 0px;
border: 1px solid white; z-index: 0;
}
.grandson-bg:hover { border: 1px solid red; }
</style>
</head>
<body>
<div class="parent">
Parent
<div class="child">
Child
<div class="grandson">
Grandson
<div class="grandson-bg"></div>
</div>
<div class="child-bg"></div>
</div>
<div class="parent-bg"></div>
</div>
</body>
</html>