web-dev-qa-db-ja.com

CSS:1つの要素にカーソルを合わせると、複数の要素に影響しますか?

ホバリングの問題を解決する方法を探しています。

<div class="section">

<div class="image"><img src="myImage.jpg" /></div>

<div class="layer">Lorem Ipsum</div>

</div>

現在、両方のクラス(画像とレイヤー)に境界線があり、両方とも通常とホバーで異なる色を持っています。レイヤークラスをホバーすると、レイヤーと画像クラスの両方のホバーボーダーカラーがアクティブになるようにする方法はありますか?そしてその逆?

74
Marko

これにはJavaScriptは必要ありません。

一部のCSSがそれを行います。以下に例を示します。

<html>
  <style type="text/css">
    .section { background:#ccc; }
    .layer { background:#ddd; }
    .section:hover img { border:2px solid #333; }
    .section:hover .layer { border:2px solid #F90; }
  </style>
</head>
<body>
  <div class="section">
    <img src="myImage.jpg" />
    <div class="layer">Lorem Ipsum</div>
  </div>
</body>
</html>
173
corymathews

これはFirefoxとChromeとIE8で機能しました...

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html>
    <head>
        <style type="text/css">
        div.section:hover div.image, div.section:hover div.layer {
            border: solid 1px red;
        }
        </style>
    </head>
    <body>
        <div class="section">
            <div class="image"><img src="myImage.jpg" /></div>
            <div class="layer">Lorem Ipsum</div>
        </div>
    </body>
</html>

... IE6でこれをテストすることもできます(そこで動作するかどうかはわかりません)。

11
Steve Wortham

最適な選択肢は、両方のdivを別のdivで囲むことです。その後、次の方法でCSSで作成できます。

<html>
<head>
<style>
  div.both:hover .image { border: 1px solid blue }
  div.both:hover .layer { border: 1px solid blue }
</style>
</head>

<body>
<div class="section">

<div class="both">
  <div class="image"><img src="myImage.jpg" /></div>
  <div class="layer">Lorem Ipsum</div>
</div>

</div>
</body>
</html>
10
Viliam

これを達成するのは難しくありませんが、javascript onmouseover関数を使用する必要があります。擬似スクリプト:

 <div class = "section"> 
 
 <div class = "image"> <img src = "myImage.jpg" onmouseover = "。layer {border:1px solid black;} .image {border:1px solid black;} "/></div>

<div class =" layer "> Lorem Ipsum </ div> 
 
 </ div> 

独自の色を使用してください。 mouseoverコマンドでJavaScript関数を参照することもできます。

8
eykanal

これを実現するにはJavaScriptを使用する必要があると思います。

jQuery:

$(function(){
   $("#innerContainer").hover(
        function(){
            $("#innerContainer").css('border-color','#FFF');
            $("#outerContainer").css('border-color','#FFF');
        },
        function(){
            $("#innerContainer").css('border-color','#000');
            $("#outerContainer").css('border-color','#000');
        }
    );
});

それに応じて値と要素IDを調整します:)

3
inkedmn

または

.section:hover > div {
  background-color: #0CF;
}

注親要素の状態は子要素の状態にのみ影響するため、次を使用できます。

.image:hover + .layer {
  background-color: #0CF;
}
.image:hover {
  background-color: #0CF;
}

しかしできません使用

.layer:hover + .image {
  background-color: #0CF;
}
0
Jnr