【问题标题】:CSS: Hover a div, action another div [duplicate]CSS:悬停一个div,操作另一个div [重复]
【发布时间】:2018-02-05 04:33:54
【问题描述】:

需要悬停一个 div 然后对另一个 div 执行操作,但操作 DIV 位于 Hover Div 之上,有什么想法可以实现吗?

谢谢

这是我的代码

a {
  display: block;
  padding: 8px 10px;
  border: 1px solid red;
  max-width: 20%;
}

.hover:hover ~ .action{
  background: yellow;
}


.hover1:hover ~ .action1{
  background: yellow;
}
<!--This one can -->
<a href="#" class="hover1">Hover</a>
<a href="#" class="action1">Action</a>

<br>
<br>

<!-- But this one cannot, i need this-->
<a href="#" class="action">Need This to be action</a>
<a href="#" class="hover">When Hover This</a>

<br><br>

Codepen 链接:https://codepen.io/YSLee/pen/OQNadN

【问题讨论】:

    标签: html css hover styling mousehover


    【解决方案1】:

    只需将它们包装起来并使用 flexbox 的 order(你需要让它们按正常顺序排列 - CSS 不能倒退 - 但要从 CSS 中反转它们):

    a {
      display: block;
      padding: 8px 10px;
      border: 1px solid red;
      max-width: 20%;
    }
    
    .hover:hover~.action {
      background: yellow;
    }
    
    .hover1:hover~.action1 {
      background: yellow;
    }
    .inverter {
      display: flex;
      flex-direction: column;
    }
    .inverter>*:last-child {
      order: -1;
    }
    <!--This one can -->
    <a href="#" class="hover1">Hover</a>
    <a href="#" class="action1">Action</a>
    
    <br>
    <br>
    
    <!-- But this one cannot, i need this-->
    <div class="inverter">
      <a href="#" class="hover">When Hover This</a>
      <a href="#" class="action">Need This to be action</a>
    </div>

    【讨论】:

    • 你改html代码。
    • @Ehsan,是的,我做到了。但是为了练习,让我们把你的建议变得荒谬,并考虑以下练习:“在不更改标记的情况下将以下代码变成一个很酷的网站:&lt;html&gt;&lt;head&gt;&lt;/head&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;。提前致谢!”我>。让我们不要忘记标记的作用,并坚持最佳实践。
    【解决方案2】:

    如果您可以将包装器 div 添加到您的 HTML,您可以使用包装器上的悬停来定位 .action 元素,然后禁用包装器上的 pointer-events 并在 .hover 元素上重置它,所以它悬停另一部分时不起作用。

    a {
      display: block;
      padding: 8px 10px;
      border: 1px solid red;
      max-width: 20%;
    }
    
    .wrapper:hover > .action{
        background: yellow;
    }
    
    .wrapper{pointer-events:none;}
    
    .hover{pointer-events:auto;}
    <div class="wrapper">
            <a href="#" class="action">Need This to be action</a>
            <a href="#" class="hover">When Hover This</a>
    </div><br/><br/>
    
    <div class="wrapper">
            <a href="#" class="hover">regular Hover</a>
            <a href="#" class="action">Action</a>
    </div><br/><br/>
    
    <div class="wrapper">
            <a href="#" class="hover">Hover sandwich</a>
            <a href="#" class="action">Action</a>
            <a href="#" class="hover">Hover sandwich</a>
    </div><br/><br/>
    
    <div class="wrapper">
            <a href="#" class="action">multiple Action!</a>
            <a href="#" class="hover">Hover</a>
            <a href="#" class="action">multiple Action!</a>
    
    </div>

    这种方法的最佳之处在于,您可以设置简单、可扩展的规则,无论.hover.action 元素的位置如何,即使使用多个元素,这些规则都将正确应用:)

    但一个明显的限制是,您将在目标元素上松开pointer-events,因此如果您需要悬停/单击或其他任何东西,这可能不是最好的方法。

    所以这一切都取决于您的用例。

    另一种方法是在容器上设置 :hover,然后在目标的 :hover 上重置初始值。

    a {
      display: block;
      padding: 8px 10px;
      border: 1px solid red;
    }
    
    .wrapper{
      display:inline-block;
      width: 20%;
    }
    
    .wrapper:hover > .action{
        background: yellow;
    }
    
    .action:hover{
      background:initial !important;
      }
    <div class="wrapper">
            <a href="#" class="action">Need This to be action</a>
            <a href="#" class="hover">When Hover This</a>
    </div><br/><br/>
    
    <div class="wrapper">
            <a href="#" class="hover">regular Hover</a>
            <a href="#" class="action">Action</a>
    </div><br/><br/>
    
    <div class="wrapper">
            <a href="#" class="hover">Hover sandwich</a>
            <a href="#" class="action">Action</a>
            <a href="#" class="hover">Hover sandwich</a>
    </div><br/><br/>
    
    <div class="wrapper">
            <a href="#" class="action">multiple Action!</a>
            <a href="#" class="hover">Hover</a>
            <a href="#" class="action">multiple Action!</a>
    </div>

    注意,使用这种替代方法,您不会在 .action 上丢失 pointer-events,但您不能像第一种方法那样拥有 1 个 .hover,多个 .action

    【讨论】:

    • 聪明的主意,我以后会用的,
    • @HastigZusammenstellen 谢谢! :)
    • 酷。我认为这会很好。
    • 我喜欢这个主意。但是你在.action 中失去了所有pointer:events。因此,您的解决方案仅限于没有链接或其他类型的pointer:events
    • @AndreiGheorghiu 当然,每种技术都有一些局限性。对于预期的用例(据我所知),这可能是有效的,因为他谈到了 div(尽管以锚点为例)。大多数情况下,这些链接将位于 li 项目或类似的东西上,因此您也可以随时重置实际链接上的指针事件。
    【解决方案3】:

    也不知道原因,但这里有一个解决方法:)

        <!--This one can -->
        <a href="#" class="hover1">Hover</a>
        <a href="#" class="action1">Action</a>
    
        <br>
        <br>
    
        <!-- But this one cannot, i need this-->
        <div>
        <a href="#" class="hover2" style="position: relative; 
                bottom:0; width:100%">When Hover This</a>
        <a href="#" class="action2" style="position: relative;bottom:72px;width:100%"> Need This to be action</a>
        </div>
    

    【讨论】:

      【解决方案4】:

      另一个使用flex-direction: column-reverse;的弹性选项

      .flex-wrapper {
        display: flex;
        flex-direction: column-reverse;
      }
      a {
        display: block;
        padding: 8px 10px;
        border: 1px solid red;
        max-width: 20%;
      }
      .hover:hover ~ .action{
        background: yellow;
      }
      <div class="flex-wrapper">
        <a href="#" class="hover">When Hover This</a>
        <a href="#" class="action">Need This to be action</a>
      </div>

      【讨论】:

        【解决方案5】:

        这在纯css中是不可能的,因为css不能后退,所以你必须更改html代码或者你必须得到jquery的帮助强>,像这样:

        $(document).ready(function(){
        
            $('.hover').hover(function(){
        
                $('.action').css('background','yellow');
        
            },function(){$('.action').css('background','none');})
        
        })
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
        
        <a href="#" class="action">Need This to be action</a>
        
        <a href="#" class="hover">When Hover This</a>

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-16
          • 1970-01-01
          • 2016-11-24
          • 1970-01-01
          • 2019-07-24
          • 1970-01-01
          • 2014-07-17
          • 2013-12-28
          相关资源
          最近更新 更多