CSS3过渡-淡出效果


96

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

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

Answers:


95

您可以改用转换:

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

3
如今,不需要浏览器前缀就可以了。...过渡:不透明3s轻松实现;
danday74

177

这是执行此操作的另一种方法。

淡入效果

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

淡出效果

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

UPDATE 1: 我找到了更多最新的CSS3过渡教程:fadeIn和fadeOut之类的效果可以隐藏显示元素工具提示示例:使用CSS3 Transition显示隐藏提示或帮助文本在此处使用示例代码。

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

在显示元素时(通过切换到visible类),我们希望能看到的可见性:visible可以立即插入,因此可以仅转换opacity属性。并且当隐藏元素时(通过切换到隐藏类),我们希望延迟visible:hidden声明,以便我们可以首先看到淡出过渡。为此,我们声明可见性属性的过渡,持续时间为0s,并有一个延迟。您可以在此处查看详细的文章

我知道我为时已晚,但是发布此答案以节省其他人的时间。希望对您有帮助!!


10
很好的答案,我想display:none在“隐藏”动画结束时添加删除框,知道吗?
Apolo 2014年

1
我不知道你在这里需要什么,但你可以尝试display:block,而不是visibility: visible.visible类同样display:none,而不是visibility: hidden.hidden从上面的例子类。
immayankmodi


@MayankModi淡出效果的可见性的前0表示什么?据我了解,您只需要2分即可
Big Money

1
@BigMoney用于持续时间和延迟(确保您可以根据需要修改这些数字,例如,仅使用这些数字)。请检查我是否已更新详细信息,因为此答案仍然有效。
immayankmodi

13

因为display不是可设置动画的CSS属性之一。一个display:none淡出的动画更换用纯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;
}

1
研究高性能动画。您应该避免使用触发重新布局的CSS属性,width并且height两者都是敏感的。
刘佩妮

4

这是您的问题的工作代码。
享受编码...。

<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

我在所有解决方案中都尝试过@lifeisfoo,但这是最简单,最简单的方法,更重要的是,文本将在几秒钟后自动消失(10)。因此,无需任何点击。
维沙尔·比拉达尔

3

您忘记在.dummy-wrap类中添加position属性,并且top / left / bottom / right值不适用于静态定位的元素(默认值)

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


谢谢,但是在过渡之后我将如何完全隐藏?

有几种方法-您可以增加top值,以使其移离视口,也可以对动画使用不透明度,以使淡出效果如您所愿..
Jason Yaraghi 2013年

1
很好..我明白了,但还有一个问题,为什么隐藏的div会逐渐消失?

3
.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;
}

演示在这里。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.