在CSS悬停事件中,我可以更改另一个div的样式吗?

Wes*_*een 279 css

可能重复:
有没有办法将鼠标悬停在一个元素上并影响另一个元素?

当我将鼠标悬停在id为"a"的div或类上时,是否可以获得id为"b"的div或类的背景颜色?

thi*_*dot 483

是的,你可以这样做,但前提#b是以后#a的HTML.

如果#b紧接着#a:http://jsfiddle.net/u7tYE/

#a:hover + #b {
    background: #ccc
}

<div id="a">Div A</div>
<div id="b">Div B</div>
Run Code Online (Sandbox Code Playgroud)

那是使用相邻的兄弟组合子(+).

如果#a和之间还有其他元素#b,可以使用:http://jsfiddle.net/u7tYE/1/

#a:hover ~ #b {
    background: #ccc
}

<div id="a">Div A</div>
<div>random other elements</div>
<div>random other elements</div>
<div>random other elements</div>
<div id="b">Div B</div>
Run Code Online (Sandbox Code Playgroud)

这是使用一般兄弟组合(~).

无论+~工作在所有现代浏览器和IE7 +

如果#b是后代#a,你可以简单地使用#a:hover #b.

替代方法:您可以使用纯CSS通过将第二个元素放在第一个元素之前来完成此操作.第一个div首先是标记,但位于第二个的右侧或下方.它将像以前的兄弟一样工作.

  • @IanCampbell:喜欢`#asdf:hover>#affect_this_element`? (17认同)
  • 应该注意的是,兄弟选择器(+)在ie8及以下不能正常工作. (4认同)
  • 有意思,谢谢@thirtydot.两个运算符是否都在立即嵌套的元素上工作?(例如`<div id ="asdf"> <div id ="affect_this_element?"> ... </ div> </ div>`) (4认同)
  • 酷,孩子选择器`>`工作,谢谢@thirtydot! (4认同)
  • @thirtydot - 我想知道,当`#a`和`#b`都在一个单独的包装器div中时,悬停效果不起作用.任何基于CSS的解决方案都可以以某种方式使其工作?(例如:**A**`<div class ="wrapper01"> <div id ="a"> Div A </ div> </ div>`和**B**`<div class ="wrapper02"> <div id ="b"> Div B </ div> </ div>`)我在这里设置了一个jsfiddle:http://jsfiddle.net/kenhimself/mu86yj6f/ (2认同)

Ben*_*owe 26

这不能完全用css完成.这是一种影响页面样式的行为.

使用jquery,您可以快速实现问题中的行为:

$(function() {
  $('#a').hover(function() {
    $('#b').css('background-color', 'yellow');
  }, function() {
    // on mouseout, reset the background colour
    $('#b').css('background-color', '');
  });
});
Run Code Online (Sandbox Code Playgroud)

  • 是的,它可以,尽管只是在相对有限的情况下.但这肯定可以用CSS来完成. (8认同)
  • @David是的,只有在#b是#A等的孩子或兄弟的有限情况下.OP没有指定两者之间的关系,所以我认为情况并非如此. (4认同)

kon*_*pen 11

没有 jQuery 的纯解决方案:

Javascript(头)

function chbg(color) {
    document.getElementById('b').style.backgroundColor = color;
}   
Run Code Online (Sandbox Code Playgroud)

HTML(正文)

<div id="a" onmouseover="chbg('red')" onmouseout="chbg('white')">This is element a</div>
<div id="b">This is element b</div>
Run Code Online (Sandbox Code Playgroud)

JSFiddle:http : //jsfiddle.net/YShs2/

  • @DanDascalescu 这就是我一直在寻找的,谢谢! (2认同)

Cur*_*urt 6

以下示例基于jQuery,但可以使用任何JS工具包甚至普通的JS来实现

$(document).ready(function(){
     $("#a").mouseover(function(){
         $("#b").css("background-color", "red");
     });
});
Run Code Online (Sandbox Code Playgroud)

  • [tag:css]***不是***[tag:jquery](或[tag:javascript]). (21认同)
  • 他也没有特别要求'no- [tag:python]'解决方案,但考虑到问题标记为*only*'[tag:css]',假设他想要一个css解决方案似乎是公平的. (10认同)
  • 然后至少提供一个解释为什么css不合适,以及其他更合适的选项.我不认为只是在问题中抛出jQuery解决方案特别有用. (6认同)