简短问题:当我悬停在 .a
上时,为什么 .b
的 background-color
没有改变?
CSS
.a {
color: red;
}
.b {
color: orange;
}
.a:hover .b {
background-color: blue;
}
HTML
<div id="wrap">
<div class="a">AAAA</div>
<div class ="b">BBBB</div>
</div>
简短问题:当我悬停在 .a
上时,为什么 .b
的 background-color
没有改变?
CSS
.a {
color: red;
}
.b {
color: orange;
}
.a:hover .b {
background-color: blue;
}
HTML
<div id="wrap">
<div class="a">AAAA</div>
<div class ="b">BBBB</div>
</div>
您需要使用.a:hover + .b
而不是.a:hover .b
.a:hover .b
适用于以下结构
<div class="a">AAAA
<div class ="b">BBBB</div>
</div>
.a:hover + .b {
background-color: blue;
}
要应用CSS于兄弟元素,或者
.a:hover > .b {
background-color: blue;
}
嵌套类的使用。
因为.b不是.a的子元素,所以该选择器无法找到任何内容。请使用JavaScript来完成你想要做的事情。
你可以做两件事情。
要么改变你的HTML,使.b
成为.a
的子元素。
<div id="wrap">
<div class="a">AAAA
<div class ="b">BBBB</div>
</div>
</div>
或者
将您的CSS更改为使用相邻选择器
.a:hover + .b {
background-color: blue;
}
当不同元素上发生事件时,您不应更改兄弟元素的样式。这超出了CSS的上下文。
使用JavaScript来实现这一点,例如:
var wrap = document.getElementById("wrap");
var aDiv = wrap.getElementsByClassName("a")[0];
var bDiv = wrap.getElementsByClassName("b")[0];
aDiv.onmouseover = function() {
bDiv.style.backgroundColor = "red";
};
aDiv.onmouseout = function() {
bDiv.style.backgroundColor = "white";
};
.a:hover + .b
或.a:hover ~ .b
实现。 - Ana<div class="a">AAA</div>
<div class="b">BBB</div>
脚本: 如果您想要,将此脚本放入您的HTML中即可。就这样。
<script>
$(".a").mouseover(function(){
$(".b").css("color", "blue");
});
$(".a").mouseleave(function(){
$(".b").css("color", "red");
});
</script>
<p>Hover over 1 and 3 gets styled.</p>
<div id="one" class="box">1</div>
<div id="two" class="box">2</div>
<div id="three" class="box">3</div>
<!--css-->
#one:hover ~ #three{
background-color: black;
color: white;
}
.box {
cursor: pointer;
display: inline-block;
height: 30px;
line-height: 30px;
margin: 5px;
outline: 1px solid black;
text-align: center;
width: 30px;
}
.b
必须是.a
的子元素。 - Jared