【问题标题】:Transitioning opacity and visibility过渡不透明度和可见性
【发布时间】:2017-07-05 11:37:12
【问题描述】:

我有一个元素是 visibility: hidden 直到悬停在上面,在不透明度上有一个过渡以实现漂亮的淡入淡出。问题是淡入淡出仅以一种方式起作用,因为当元素立即变为visibility: hidden 时,它隐藏了不透明度过渡。我该如何解决这个问题?

编辑:需要明确的是,在激活悬停之前,元素具有visibility: hidden 很重要。带有opacity: 0 的元素可以交互,而带有visibility: hidden 的元素则不能。

示例如下。注意弹出窗口是如何淡入而不是淡出的。

.hover {
  display: inline-block;
  position: relative;
}

.label {
  width: 80px;
  border: 1px solid black;
  padding: 20px;
}

.popup {
  width: 90px;
  padding: 15px;
  position: absolute;
  top: 100%;
  border: 1px dashed black;
  cursor: pointer;
  
  visibility: hidden;
  opacity: 0;
  transition: opacity 3s;
}

.hover:hover .popup {
  visibility: visible;
  opacity: 1;
}
<div class="hover">
  <div class="label">Hover me</div>
  <div class="popup">I am only visible on hover</div>
</div>

【问题讨论】:

    标签: css css-transitions


    【解决方案1】:

    您只在opacity 上应用了transition,如果您需要transition 工作多个属性,您必须使用all 或使用属性名称。

    只需更改下面的 css 部分

    .popup {
      width: 90px;
      padding: 15px;
      position: absolute;
      top: 100%;
      border: 1px dashed black;
      cursor: pointer;
      visibility: hidden;
      opacity: 0;
      transition: all 3s; /*Change the opacity to all*/
    }
    

    .hover {
      display: inline-block;
      position: relative;
    }
    
    .label {
      width: 80px;
      border: 1px solid black;
      padding: 20px;
    }
    
    .popup {
      width: 90px;
      padding: 15px;
      position: absolute;
      top: 100%;
      border: 1px dashed black;
      cursor: pointer;
      visibility: hidden;
      opacity: 0;
      transition: all 3s; /*Change the opacity to all*/
    }
    
    .hover:hover .popup {
      visibility: visible;
      opacity: 1;
    }
    <div class="hover">
      <div class="label">Hover me</div>
      <div class="popup">I am only visible on hover</div>
    </div>

    【讨论】:

    • 我不知道你可以为可见性设置动画。谢谢。 (为避免转换其他属性,transition: opacity 3s, visibility 3s;
    【解决方案2】:

    .popup 类中不需要 visibility:hidden;,因为当它的不透明度为 0 时,您无论如何都看不到它。

    我实际上并不知道您的具体情况。如果这不是您要查找的内容,请更具体地说明。


    我已更新代码以满足您的情况。我使用display: none 而不是visibility:hidden 并插入一个简单的Jquery 代码。

    在我看来,如果您在单击.label 时使.popup 可见,而不是将其悬停,那应该会很好。 Jquery 代码应该是

    $(document).ready(function(){
        $(".label").click(function(){
            $(".popup").slideToggle("slow");
        });
    });
    

    $(document).ready(function(){
      $(".label").mouseover(function(){
       $(".popup").stop().slideDown("slow");
      });
      $(".popup").mouseout(function(){
       $(".popup").slideUp("slow");
      });
    });
    .hover {
      display: inline-block;
      position: relative;
    }
    
    .label {
      width: 80px;
      border: 1px solid black;
      padding: 20px;
    }
    
    .popup {
      width: 90px;
      padding: 15px;
      position: absolute;
      top: 100%;
      border: 1px dashed black;
      cursor: pointer;
      
      display: none;
      opacity: 1;
      transition: opacity 3s;
    }
    
    /*.hover:hover .popup {
      visibility: visible;
      opacity: 1;
    }*/
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class="hover">
      <div class="label">Hover me</div>
      <div class="popup">I am only visible on hover</div>
    </div>

    【讨论】:

    • visibility: hiddenopacity: 0 不同。您仍然可以单击 opacity: 0 元素并与之交互,但 visibility: hidden 并非如此。
    • 在这种情况下,我认为您应该使用 Jquery。我会更新上面的sn-p。
    猜你喜欢
    • 2011-11-24
    • 2020-07-31
    • 2020-06-23
    • 2019-12-11
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 2020-05-29
    相关资源
    最近更新 更多