短い質問:なぜbackground-color
of .b
ホバーしても変わらない? .a
?
[〜#〜] 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と.bの間にいくつかの要素が必要になる場合は、.a:hover ~ .b
を使用する必要があります。これは、その後に続く.a
のすべての兄弟に対して機能します、次のものだけではありません。
a:hover + b
のようなことはできませんか? http://meyerweb.com/eric/articles/webrev/200007a.html を参照してください
+セレクターを使用できます
.a:hover + .b {
background-color: blue;
}
兄弟要素にcssを適用する、または
.a:hover > .b {
background-color: blue;
}
ネストされたクラスの場合。
.bは.aの子ではないため、セレクターは何も検出しません。 javascriptを使用して、そこでやりたいことを実行します。
できることは2つあります。
HTMLを変更して、.b
を.a
の子にします。
<div id="wrap">
<div class="a">AAAA
<div class ="b">BBBB</div>
</div>
</div>
OR
隣接するセレクターを使用するようにCSSを変更します
.a:hover + .b {
background-color: blue;
}
jsは必要ありません http://jsfiddle.net/2NEgt/3/
別の要素でイベントが発生した場合は、兄弟のスタイルを変更しないでください。それは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";
};
Jqueryは優れた簡単なソリューションです。
html:
<div class="a">AAA</div>
<div class="b">BBB</div>
script:必要に応じて、このスクリプトをhtmlに挿入します。それで全部です。
<script>
$(".a").mouseover(function(){
$(".b").css("color", "blue");
});
$(".a").mouseleave(function(){
$(".b").css("color", "red");
});
</script>
この例を理解してみてください。
htmlコード
<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;
}
ボックス3よりもボックス1にカーソルを合わせると、黒色になります。