Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Webkit CSS Animation issue - persisting the end state of the animation? [duplicate]

Given the following CSS3 animation....

<style type="text/css" media="screen">  .drop_box {   -webkit-animation-name: drop;   -webkit-animation-duration: 2s;   -webkit-animation-iteration-count: 1; }  @-webkit-keyframes drop {    from {     -webkit-transform: translateY(0px);   }    to {     -webkit-transform: translateY(100px);   }  } </style>  <div class="drop_box">       Hello world </div> 

The Hello World text animates as expected dropping down 100px. However, at the end of the animation it jumps back to its original position.

Clearly this makes sense in CSSland. The animation has been applied and is no longer acting on the element so the original styles take effect. It seems slightly odd to me though - surely if one is animating an element into place then one would expect that placing to persist?

Is there any way of making the end position 'sticky' without having to resort to Javascript to tag a classname or style onto the element at the end of the animation to fix its altered properties? I know that transitions persist, but for the animation I have in question (the example is for demonstration purposes only) transitions don't give the level of control needed. Without this, it seems that complex animations are only of use for circular processes where the element ends up back in its original state.

like image 789
Govan Avatar asked Jul 17 '10 22:07

Govan


People also ask

What CSS property ensures the animation stays in the end position after the animation finishes?

The animation-fill-mode property specifies a style for the element when the animation is not playing (before it starts, after it ends, or both).

How do you keep an animation in CSS?

The only way to truly pause an animation in CSS is to use the animation-play-state property with a paused value. In JavaScript, the property is “camelCased” as animationPlayState and set like this: element. style.


2 Answers

You can use -webkit-animation-fill-mode to persist the end state (or even extend the start state backwards). It was added to WebKit a while ago, and shipped in iOS 4 and Safari 5.

-webkit-animation-fill-mode: forwards; 
like image 52
dino Avatar answered Oct 10 '22 13:10

dino


If you define the end state in the class then it should do what you want in the example:

.drop_box {     -webkit-transform: translateY(100px);     -webkit-animation-name: drop;     -webkit-animation-duration: 2s;     -webkit-animation-iteration-count: 1; } 

But if your animation is event driven anyway you will probably end up having to use a bit of JavaScript. The easiest way is to make the adding of the class with the end state in it be what triggers the animation to start.

--edit

See dino's answer for information on the animation-fill-mode property added in the April 2012 WD.

like image 39
robertc Avatar answered Oct 10 '22 13:10

robertc