【问题标题】:hover over one element, transition another element悬停在一个元素上,过渡另一个元素
【发布时间】:2016-12-06 04:43:08
【问题描述】:

我有两个 div A 和 B。div A 是一个图像。 div B 是 div A 下面的一个段落。

我正在努力做到这一点,如果我将鼠标放在 div A 上,div B 的背景和字体颜色会转换为不同的颜色,而不会影响 div A。 我目前有 :hover 选择器,因此如果有人将鼠标悬停在它上面,则 div B 会发生变化。但我不知道如何在 div A 上悬停时影响 div B。

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

编辑: 请参阅下面的代码结构。我正在努力做到这一点,如果我将鼠标悬停在#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:

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

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

【问题讨论】:

  • 你应该添加一些代码
  • 您是尝试仅使用 css 还是使用 javascript?向我们展示一些您已经尝试过的代码。
  • 我添加了一些代码。我试过用 css 和 javascript 做这件事,但都不能做到。

标签: javascript html css


【解决方案1】:

您使用兄弟选择器~ 或直接兄弟选择器+

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

根据评论更新,可能的 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>

根据评论更新,可能的 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>

【讨论】:

  • 这些 div 不是直接的兄弟姐妹,如果你可以看一下,我已经添加了一个代码 sn-p
  • @LikeToLearnStuff 好吧,这会改变一切……因为它们嵌套在另一个元素中,所以这行不通。您要么需要一个脚本,要么将鼠标悬停移动到图像的父 div。
  • 您的更新版本运行良好!谢谢。
【解决方案2】:

您正在寻找adjacent sibling selector - element:hover + element

.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】:

    你想要的可以通过javascript事件处理来完成。

    类似这样的:

    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';
    }
    

    祝你好运

    【讨论】:

      【解决方案4】:

      基本上,您需要注册一个悬停进出处理程序,如以下答案所示: Event listener hover changing other element 这是一个稍微修改过的版本,以更符合您的需要。

      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】:

        使用继任兄弟姐妹~ 或直接继任兄弟姐妹+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>

        【讨论】:

        • 你和我写完全相同的单词和示例布局的可能性有多大?
        • 我对此投了反对票,因为看起来你复制了 LGSon's answer 却没有添加任何有用的东西。
        • 不,我只是想向您展示 2 div 如何改变颜色,因为 ~ 并且必须添加第二个 div。现在更新了它
        【解决方案6】:
        <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>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-07-30
          • 1970-01-01
          • 2015-03-25
          • 1970-01-01
          • 2015-08-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多