将鼠标悬停在一个元素上,转换另一个元素。

时间:2021-12-30 22:22:43

I have two divs A and B. div A is an image. Div B is a paragraph underneath div A.

我有两个diva和b。div A是一个图像。Div B是在Div a下面的一段。

I am trying to make it so that if I put the mouse over div A, the background and font colour of div B transition to different colours without affecting div A. I currently have the :hover selector so div B changes if someone hovers over it. But I don't know how to affect div B while hovering over div A.

我试着让它这样,如果我把鼠标放在div A上,将div B的背景和字体颜色转换成不同的颜色,而不影响div A。我现在有:如果有人在它上面盘旋,那么我现在就有了:hover选择器,所以div B会发生变化。但我不知道如何影响B组,而在A区上空盘旋。

Any clues on how to achieve this?

关于如何实现这一点的任何线索?

EDIT: Please see below for the structure of my code. I'm trying to make it so that if I hover over #image1, the background of #info1 and the font colour of its paragraph would change and so on so forth for the other two images.

编辑:请参阅下面的代码结构。我试着让它这样,如果我在#image1上徘徊,#info1的背景和它的段落的字体颜色将会发生变化,因此其他两幅图像会发生变化。

<div class="row">
    <div class="col-md-4 col-sm-12">
      <div class="row">
        <div class="col-md-12 col-sm-6">
          <img id="image1" src="res/images/aimage1.png" class="img-responsive center-block">
        </div>
        <div id="info1" class="col-md-12 col-sm-6">
          <p class="washed-out"> 1 </p>
        </div>
      </div>
    </div>

    <div class="col-md-4 col-sm-12">
      <div class="row">
        <div class="col-md-12 col-sm-6">
          <img id="image2" src="res/images/aimage2.png" class="img-responsive center-block">
        </div>
        <div id="info2" class="col-md-12 col-sm-6">
          <p class="washed-out"> 2 </p>
        </div>
      </div>
    </div>

    <div class="col-md-4 col-sm-12">
      <div class="row">
        <div class="col-md-12 col-sm-6">
          <img id="image3" src="res/images/animage3.png" class="img-responsive center-block">
        </div>
        <div id="info3" class="col-md-12 col-sm-6">
          <p class="washed-out"> 3 </p>
        </div>
      </div>
    </div>
</div>

css:

css:

.washed-out{
  background: white;
  color: black;
  transition: background-color 300ms linear, color 1s linear;
}

.washed-out:hover{
  background: black;
  color: white;
}

6 个解决方案

#1


2  

You use the sibling selector ~ or the immediate sibling selector +

使用兄弟选择器~或直接的同胞选择器+。

img:hover + div {
  color: red;
}
<img src="http://placehold.it/100">
<div>Hey there...I get red when you hover the image</div>

Update based on comment, possible CSS version

基于注释的更新,可能的CSS版本。

.hoverme:hover + div .washed-out {
  color: red;
  background: black;
}
<div class="col-md-12 col-sm-6 hoverme">
  <img id="image1" src="res/images/aimage1.png" class="img-responsive center-block">
</div>
<div id="info1" class="col-md-12 col-sm-6">
  <p class="washed-out">1</p>
</div>

Update based on comment, possible JS version

基于注释的更新,可能的JS版本。

window.addEventListener('load', function() {
  var imglist = document.querySelectorAll('img.img-responsive');
  for (var i = 0; i < imglist.length; i++) {
    imglist[i].addEventListener('mouseover', function(e) { e.target.parentElement.nextElementSibling.classList.add('infos');   
    })
    imglist[i].addEventListener('mouseout', function(e) { e.target.parentElement.nextElementSibling.classList.remove('infos');   
    })
  }
})
div.infos .washed-out {
  color: red;
  background: black;
}
<div class="col-md-12 col-sm-6">
  <img id="image1" src="res/images/aimage1.png" class="img-responsive center-block">
</div>
<div id="info1" class="col-md-12 col-sm-6">
  <p class="washed-out">1</p>
</div>

#2


1  

You're looking for the adjacent sibling selector - element:hover + element:

您正在寻找相邻的同胞选择器-元素:hover +元素:

.container {
  width: 100px;
  height: 100px;
  background: red;
  transition: all 0.5s;
}

.container:first-child {
  margin-bottom: 10px;
}

/** if the 1st element is hovered, changed the 2nd **/
.container:hover + .container {
  background: blue;
  color: white;
}
<div class="container">Div 1</div>

<div class="container">Div 2</div>

#3


0  

What you want can be done by javascript event handler.

您想要的是javascript事件处理程序。

Something like this:

是这样的:

var d1 = document.getElementById("div1");  // on hover on this div
var d2 = document.getElementById("div2");  // bring changes to this

d1.addEventListener("hover", callfun, false);

function callfun(){
    d2.style.backgroundColor = 'blue';
}

Good luck

祝你好运

#4


0  

Basically you need to register a hovering in and out handler as shown in the following answer: Event listener hover changing other element Here is a slightly modified version of it to fit more closely to your need.

基本上,您需要注册一个悬停在和输出处理程序,如下面的答案所示:事件监听器悬停在这里更改其他元素,这是一个稍微修改过的版本,以便更符合您的需要。

document.getElementById("Div-A").addEventListener("mouseenter",function (){
   document.getElementById("Div-B").style.backgroundColor = "red";
   document.getElementById("Div-B").style.backgroundColor = "Yellow"; 
});

document.getElementById("Div-A").addEventListener("mouseout",function (){
   document.getElementById("Div-B").style.backgroundColor = "";
   document.getElementById("Div-B").style.text = ""; 
});

#5


0  

Use successor siblings ~ or immediate successor siblings + to make any change on hover

使用继承的兄弟姐妹~或直接继承的兄弟姐妹+来做任何改变。

img:hover ~ div {
  color: red;
}
<img src="http://placehold.it/100">
<div>Hey there...I get red when you hover the image</div>
<div>Hey there...I also get red when you hover the image</div>

#6


0  

<script>
  function Myfunc1(){
     document.getElementById("div1").style.backgroundColor = "green"
     document.getElementById("div2").style.backgroundColor = "white"}
  function Myfunc2(){
     document.getElementById("div2").style.backgroundColor = "red"
     document.getElementById("div1").style.backgroundColor = "white"}
</script>
     <pre><div id="div1" onmouseover="Myfunc1()"><img src=""><p> look</p></div>
     <div id="div2" onmouseover="Myfunc2()"><p>here</p></div></pre>

#1


2  

You use the sibling selector ~ or the immediate sibling selector +

使用兄弟选择器~或直接的同胞选择器+。

img:hover + div {
  color: red;
}
<img src="http://placehold.it/100">
<div>Hey there...I get red when you hover the image</div>

Update based on comment, possible CSS version

基于注释的更新,可能的CSS版本。

.hoverme:hover + div .washed-out {
  color: red;
  background: black;
}
<div class="col-md-12 col-sm-6 hoverme">
  <img id="image1" src="res/images/aimage1.png" class="img-responsive center-block">
</div>
<div id="info1" class="col-md-12 col-sm-6">
  <p class="washed-out">1</p>
</div>

Update based on comment, possible JS version

基于注释的更新,可能的JS版本。

window.addEventListener('load', function() {
  var imglist = document.querySelectorAll('img.img-responsive');
  for (var i = 0; i < imglist.length; i++) {
    imglist[i].addEventListener('mouseover', function(e) { e.target.parentElement.nextElementSibling.classList.add('infos');   
    })
    imglist[i].addEventListener('mouseout', function(e) { e.target.parentElement.nextElementSibling.classList.remove('infos');   
    })
  }
})
div.infos .washed-out {
  color: red;
  background: black;
}
<div class="col-md-12 col-sm-6">
  <img id="image1" src="res/images/aimage1.png" class="img-responsive center-block">
</div>
<div id="info1" class="col-md-12 col-sm-6">
  <p class="washed-out">1</p>
</div>

#2


1  

You're looking for the adjacent sibling selector - element:hover + element:

您正在寻找相邻的同胞选择器-元素:hover +元素:

.container {
  width: 100px;
  height: 100px;
  background: red;
  transition: all 0.5s;
}

.container:first-child {
  margin-bottom: 10px;
}

/** if the 1st element is hovered, changed the 2nd **/
.container:hover + .container {
  background: blue;
  color: white;
}
<div class="container">Div 1</div>

<div class="container">Div 2</div>

#3


0  

What you want can be done by javascript event handler.

您想要的是javascript事件处理程序。

Something like this:

是这样的:

var d1 = document.getElementById("div1");  // on hover on this div
var d2 = document.getElementById("div2");  // bring changes to this

d1.addEventListener("hover", callfun, false);

function callfun(){
    d2.style.backgroundColor = 'blue';
}

Good luck

祝你好运

#4


0  

Basically you need to register a hovering in and out handler as shown in the following answer: Event listener hover changing other element Here is a slightly modified version of it to fit more closely to your need.

基本上,您需要注册一个悬停在和输出处理程序,如下面的答案所示:事件监听器悬停在这里更改其他元素,这是一个稍微修改过的版本,以便更符合您的需要。

document.getElementById("Div-A").addEventListener("mouseenter",function (){
   document.getElementById("Div-B").style.backgroundColor = "red";
   document.getElementById("Div-B").style.backgroundColor = "Yellow"; 
});

document.getElementById("Div-A").addEventListener("mouseout",function (){
   document.getElementById("Div-B").style.backgroundColor = "";
   document.getElementById("Div-B").style.text = ""; 
});

#5


0  

Use successor siblings ~ or immediate successor siblings + to make any change on hover

使用继承的兄弟姐妹~或直接继承的兄弟姐妹+来做任何改变。

img:hover ~ div {
  color: red;
}
<img src="http://placehold.it/100">
<div>Hey there...I get red when you hover the image</div>
<div>Hey there...I also get red when you hover the image</div>

#6


0  

<script>
  function Myfunc1(){
     document.getElementById("div1").style.backgroundColor = "green"
     document.getElementById("div2").style.backgroundColor = "white"}
  function Myfunc2(){
     document.getElementById("div2").style.backgroundColor = "red"
     document.getElementById("div1").style.backgroundColor = "white"}
</script>
     <pre><div id="div1" onmouseover="Myfunc1()"><img src=""><p> look</p></div>
     <div id="div2" onmouseover="Myfunc2()"><p>here</p></div></pre>