CSS - 在悬停时操纵另一个元素

时间:2013-10-09 16:02:31

标签: html css

display:block悬停时,我需要将#hidden更改为#aaa。它不起作用,因为#aaa#hidden不在同一级别 - 有没有办法在悬停时操纵一个完全独立的元素?我正在尝试制作一个基于CSS的导航w / a subnav并在导航项悬停时显示相应的subnav。

HTML:

<div class="cheetahContainer">
    <div id="cheetah">
       <p><a href="#">Cheetah</a></p>
    </div>
</div>
<div id="hidden">
       <p>A cheetah is a land mammal that can run up 2 60mph!!!</p>
</div>

CSS:

#cheetah {
    background-color: red;
    text-align: center;
}

a {
    color: blue;
}

#hidden {
    display:none;
    color: orange;
 }
#cheetah:hover{
    background-color:green;
}

#cheetah:hover + #hidden {
    display:block;
}

http://jsfiddle.net/LgKkU/575/

3 个答案:

答案 0 :(得分:1)

由于您的链接不是#hidden div的兄弟(因此您无法使用直接邻接选择器),因此您应该使用

更改最后一条规则
.cheetahContainer:hover + #hidden {
    display:block;
}

答案 1 :(得分:1)

将鼠标悬停在元素上只会影响css中的子元素。这是你的例子的修复:

<div class="cheetahContainer">
    <div id="cheetah">
       <p><a href="#">Cheetah</a></p>
    </div>
    <div id="hidden">
           <p>A cheetah is a land mammal that can run up 2 60mph!!!</p>
    </div>
</div>

但是,我建议将css更改为:

.cheetahContainer:hover .hidden {
  display: block;
}

更改了类的id并将hover添加到父元素,以便将鼠标悬停在显示的文本上不会恢复为display:none;

答案 2 :(得分:0)

这不是直接的兄弟姐妹所以你需要使用js

以下是该怎么做的例子:

var $cheetah = document.getElementById('cheetah');
var $hidden = document.getElementById('hidden');
$cheetah.addEventListener('mouseover', function() {
    $hidden.style.display = 'block';
});
$cheetah.addEventListener('mouseout', function() {
    $hidden.style.display = 'none';
});

或者您可以使用容器:

.cheetarContainer:hover + #hidden {
    display: block;
}