在CSS3动画结束时维护最终状态

Dan*_*Dan 266 css css3 css-animations

我正在opacity: 0;CSS 中设置的一些元素上运行动画.动画类应用于onClick,并且使用关键帧,它将不透明度更改01(以及其他内容).

不幸的是,当动画结束时,元素将返回opacity: 0(在Firefox和Chrome中).我的自然思维是动画元素保持最终状态,覆盖其原始属性.这不是真的吗?如果没有,我怎样才能让元素这样做?

代码(不包括前缀版本):

@keyframes bubble {
    0%   { transform:scale(0.5); opacity:0.0; }
    50%  { transform:scale(1.2); opacity:0.5; }
    100% { transform:scale(1.0); opacity:1.0; }
}
Run Code Online (Sandbox Code Playgroud)

Chr*_*der 475

尝试添加animation-fill-mode: forwards;.例如这样:

-webkit-animation: bubble 1.0s forwards; /* for less modern browsers */
        animation: bubble 1.0s forwards;
Run Code Online (Sandbox Code Playgroud)

  • 你可以在这里阅读关于animation-fill-mode属性的内容 - http://dev.w3.org/csswg/css3-animations/#animation-fill-mode-property希望有所帮助! (8认同)
  • @Dan'动画填充模式'属性的`forwards`值确保元素在动画结束后保持动画的最后一个关键帧状态.例如,如果您的动画将"宽度"从0更改为100px,则此属性可确保在动画结束后元素保持100px宽. (6认同)
  • 不要忘记在`@keyframe`中指定'100%/ to`点,否则它不会工作. (5认同)
  • 是的,就是这样。我会检查你的答案。如果任何 CSS 负责人想要评论所需的逻辑,我很想知道! (2认同)

小智 22

如果您使用更多动画属性,则速记为:

animation: bubble 2s linear 0.5s 1 normal forwards;
Run Code Online (Sandbox Code Playgroud)

持续时间为2s,线性定时功能,0.5s延迟,1次迭代计数,法线方向,前向填充模式


Tay*_*ach 12

如果不使用短手版:确保animation-fill-mode: forwardsAFTER动画声明,否则将无法正常工作...

animation-fill-mode: forwards;
animation-name: appear;
animation-duration: 1s;
animation-delay: 1s;
Run Code Online (Sandbox Code Playgroud)

VS

animation-name: appear;
animation-duration: 1s;
animation-fill-mode: forwards;
animation-delay: 1s;
Run Code Online (Sandbox Code Playgroud)


Dee*_*ath 5

使用 动画填充模式:转发;

animation-fill-mode: forwards;
Run Code Online (Sandbox Code Playgroud)

该元素将保留由最后一个关键帧设置的样式值(取决于动画方向和动画迭代计数)。

注意:@keyframes 规则在 Internet Explorer 9 及更早版本中不受支持。

工作示例

animation-fill-mode: forwards;
Run Code Online (Sandbox Code Playgroud)
div {
  width: 100px;
  height: 100px;
  background: red;
  position :relative;
  -webkit-animation: mymove 3ss forwards; /* Safari 4.0 - 8.0 */
  animation: bubble 3s forwards;
  /* animation-name: bubble; 
  animation-duration: 3s;
  animation-fill-mode: forwards; */
}

/* Safari */
@-webkit-keyframes bubble  {
  0%   { transform:scale(0.5); opacity:0.0; left:0}
    50%  { transform:scale(1.2); opacity:0.5; left:100px}
    100% { transform:scale(1.0); opacity:1.0; left:200px}
}

/* Standard syntax */
@keyframes bubble  {
   0%   { transform:scale(0.5); opacity:0.0; left:0}
    50%  { transform:scale(1.2); opacity:0.5; left:100px}
    100% { transform:scale(1.0); opacity:1.0; left:200px}
}
Run Code Online (Sandbox Code Playgroud)