【问题标题】:CSS3 Transition - Fade out effectCSS3 过渡 - 淡出效果
【发布时间】:2013-04-01 04:28:31
【问题描述】:

我正在尝试在纯 CSS 中实现“淡出”效果。这是fiddle。我确实在网上研究了几个解决方案,但是,在阅读了documentation online 之后,我试图弄清楚为什么幻灯片动画不起作用。有什么指点吗?

.dummy-wrap {
  animation: slideup 2s;
  -moz-animation: slideup 2s;
  -webkit-animation: slideup 2s;
  -o-animation: slideup 2s;
}

.success-wrap {
  width: 75px;
  min-height: 20px;
  clear: both;
  margin-top: 10px;
}

.successfully-saved {
  color: #FFFFFF;
  font-size: 20px;
  padding: 15px 40px;
  margin-bottom: 20px;
  text-align: center;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
  background-color: #00b953;
}

@keyframes slideup {
  0% {top: 0px;}
  75% {top: 0px;}
  100% {top: -20px;}
}

@-moz-keyframes slideup {
  0% {top: 0px;}
  75% {top: 0px;}
  100% {top: -20px;}
}

@-webkit-keyframes slideup {
  0% {top: 0px;}
  75% {top: 0px;}
  100% {top: -20px;}
}

@-o-keyframes slideup {
  0% {top: 0px;}
  75% {top: 0px;}
  100% {top: -20px;}
}
<div class="dummy-wrap">
  <div class="success-wrap successfully-saved">Saved</div>
</div>

【问题讨论】:

    标签: css css-transitions


    【解决方案1】:

    您忘记在.dummy-wrap 类中添加位置属性,并且上/左/下/右值不适用于静态定位的元素(默认)

    http://jsfiddle.net/dYBD2/2/

    【讨论】:

    • 谢谢,但是在过渡后我将如何隐藏?
    • 有几种方法 - 您可以增加 top 值,使其“移出”视口,或者您可以为动画使用不透明度,使其像您想要的那样淡出。 .
    • 太棒了.. 我明白了,但还有一个问题,为什么隐藏的 div 会重新淡出?
    【解决方案2】:

    您可以改用过渡:

    .successfully-saved.hide-opacity{
        opacity: 0;
    }
    
    .successfully-saved {
        color: #FFFFFF;
        text-align: center;
    
        -webkit-transition: opacity 3s ease-in-out;
        -moz-transition: opacity 3s ease-in-out;
        -ms-transition: opacity 3s ease-in-out;
        -o-transition: opacity 3s ease-in-out;
         opacity: 1;
    }
    

    【讨论】:

    • 现在不需要浏览器前缀,只是普通的 ol' ... 过渡:不透明 3s 缓入出局;
    【解决方案3】:

    这是另一种方法。

    淡入效果

    .visible {
      visibility: visible;
      opacity: 1;
      transition: opacity 2s linear;
    }
    

    淡出效果

    .hidden {
      visibility: hidden;
      opacity: 0;
      transition: visibility 0s 2s, opacity 2s linear;
    }
    

    UPDATE 1: 我在这里找到了更多最新的教程 CSS3 Transition: fadeIn and fadeOut like effects to hide show elementsTooltip Example: Show Hide Hint or Help Text using CSS3 Transition 以及示例代码。

    UPDATE 2:(@big-money 要求添加详细信息)

    当显示元素时(通过切换到可见类),我们希望visibility:visible 立即启动,所以只转换 opacity 属性是可以的。而在隐藏元素时(通过切换到隐藏类),我们要延迟visibility:hidden声明,这样我们就可以先看到淡出过渡。我们通过在可见性属性上声明一个过渡来做到这一点,持续时间为 0 并有延迟。可以看详细文章here

    我知道我来不及回答,但发布此答案以节省其他人的时间。希望对你有帮助!!

    【讨论】:

    • 不错的答案,我希望添加 display:none 以在“隐藏”动画结束时擦除框,知道吗?
    • 我不确定您在这里需要什么,但您可以尝试在 .visible 类中使用 display:block 而不是 visibility: visible,同样在上面的 display:none 中使用 display:none 而不是 visibility: hidden例子。
    • @MMTac 这不起作用,因为display 不是animatable CSS properties 之一。见Animating from “display: block” to “display: none”
    【解决方案4】:
    .fadeOut{
        background-color: rgba(255, 0, 0, 0.83);
        border-radius: 8px;
        box-shadow: silver 3px 3px 5px 0px;
        border: 2px dashed yellow;
        padding: 3px;
    }
    .fadeOut.end{
        transition: all 1s ease-in-out;
        background-color: rgba(255, 0, 0, 0.0);
        box-shadow: none;
        border: 0px dashed yellow;
        border-radius: 0px;
    }
    

    demo here.

    【讨论】:

      【解决方案5】:

      这是您问题的有效代码。
      享受编码......

      <html>
         <head>
      
            <style>
      
               .animated {
                  background-color: green;
                  background-position: left top;
                  padding-top:95px;
                  margin-bottom:60px;
                  -webkit-animation-duration: 10s;animation-duration: 10s;
                  -webkit-animation-fill-mode: both;animation-fill-mode: both;
               }
      
               @-webkit-keyframes fadeOut {
                  0% {opacity: 1;}
                  100% {opacity: 0;}
               }
      
               @keyframes fadeOut {
                  0% {opacity: 1;}
                  100% {opacity: 0;}
               }
      
               .fadeOut {
                  -webkit-animation-name: fadeOut;
                  animation-name: fadeOut;
               }
            </style>
      
         </head>
         <body>
      
            <div id="animated-example" class="animated fadeOut"></div>
      
         </body>
      </html>
      

      【讨论】:

      • 请附上您的解决方案的说明:它是如何工作的?为什么它与已经发布的其他解决方案不同?
      • @lifeisfoo 我尝试了所有解决方案,但这是最简单和最简单的方法,更重要的是文本会在几秒钟后自动消失 (10)。所以不需要任何点击。
      【解决方案6】:

      因为display 不是动画CSS 属性之一。 一个display:nonefadeOut 动画替换为纯CSS3 动画,只需在最后一帧设置width:0height:0,并使用animation-fill-mode: forwards 保留width:0height:0 属性。

      @-webkit-keyframes fadeOut {
          0% { opacity: 1;}
          99% { opacity: 0.01;width: 100%; height: 100%;}
          100% { opacity: 0;width: 0; height: 0;}
      }  
      @keyframes fadeOut {
          0% { opacity: 1;}
          99% { opacity: 0.01;width: 100%; height: 100%;}
          100% { opacity: 0;width: 0; height: 0;}
      }
      
      .display-none.on{
          display: block;
          -webkit-animation: fadeOut 1s;
          animation: fadeOut 1s;
          animation-fill-mode: forwards;
      }
      

      【讨论】:

      【解决方案7】:

      这可能会有所帮助:-

      <!DOCTYPE html>
      <html>
      <head>
      <style>
      
      .cardiv{
          height:200px;
          width:100px;
          background-color:red;
          position:relative;
          text-align:center;
          overflow:hidden;
      }
      .moreinfo{
          height:0%;
          transition: height 0.5s;
          opacity:1;
          position: absolute;
          bottom:0px;
          background-color:blue;
      }
      
      .cardiv:hover .moreinfo{
      
          opacity: 1;
          height:100px;
      }
      </style>
      </head>
      <body>
      
      <div class="cardiv">
          <div class="moreinfo">Hello I am inside div</div>
      </div>
      
      </body>
      </html>
      
      

      【讨论】:

      • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
      【解决方案8】:

      在 CSS 中使用 forwards 填充模式,使其保留在动画的最后部分。

      我建议使用transform: tranlsateY(-20px);而不是使用css位置,但如果你坚持使用它,那么将.dummy-wrap位置设置为absolute

      .dummy-wrap {
        animation: slideup 2s forwards;
        -moz-animation: slideup 2s forwards;
        -webkit-animation: slideup 2s forwards;
        -o-animation: slideup 2s forwards;
        position: absolute;
      }
      
      @keyframes slideup {
          0% {
              top: 0px;
          }
          75% {
              top: 0px;
          }
          100% {
              top: -20px;
          }
      }
      
      <div class="dummy-wrap">
        <div class="success-wrap successfully-saved">Saved</div>
      </div>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-05
        • 1970-01-01
        • 1970-01-01
        • 2011-12-21
        • 1970-01-01
        • 2017-05-04
        • 2013-01-29
        • 1970-01-01
        相关资源
        最近更新 更多