W3C

Bert Bos & Eva Kasal | CSS3 in Style

Animations

CSS3 animations defines a property to animate elements (such as div, h1 and span) without JavaScript or Flash.

@-moz-keyframes example { This is the animation code
   from { -moz-transform: scale(1.0); }
   to   { -moz-transform: scale(2.0); }
}
div { This is the element we apply the animation to
 -moz-animation-name:example;
 -moz-animation-duration:1s;
 -moz-animation-timing-function:ease; /* ease by default */
 -moz-animation-delay:1s;             /* 0 by default */
 -moz-animation-iteration-count:1;    /* 1 by default */
 -moz-animation-direction:alternate;  /* normal by default */
}

Animations – status

Internet Explorer and Opera do not yet support the @keyframes rule or the animation property.
Keyframes browser support

April 2012: experimental implementations (prefixes), the syntax is exactly the same for each browser, with only a prefix change required

Animations – continuous

span:nth-child(1){
  animation-name: cloud1;
  animation-timing-function: ease-in-out;
  animation-duration: 10s;
  animation-iteration-count: infinite;
}
@keyframes cloud1 {
  from { left: 10px;}
  50% { left: 90px;}
  to { left: 10px;}
}

Animations – bouncing ball (1/5)

from demo 1

@-moz-keyframes ball {
  0% { -moz-transform: translateY(-300px) scaleY(1.2); }
  33% { -moz-transform: translateY(0px) scaleY(1.2); }
  35% { -moz-transform: translateY(10px) scaleY(0.8); }
  66% { -moz-transform: translateY(-100px) scaleY(1.2); }
  100% { -moz-transform: translateY(0px); }
}

Animations – bouncing ball (2/5)

from demo 2

@-moz-keyframes ball {
  0% { -moz-transform: translateY(-300px) scaleY(1.2); }
  35% { -moz-transform: translateY(-300px) scaleY(1.2); } 
  /* Same position as 0% */
  65% { -moz-transform: translateY(0px) scaleY(1.2); } 
  /* Starts moving after 35% to this position */
  67% { -moz-transform: translateY(10px) scaleY(0.8); }
  85% { -moz-transform: translateY(-100px) scaleY(1.2); }
  100% { -moz-transform: translateY(0px); }
}

Animations – bouncing ball (3/5)

from demo 3

@-moz-keyframes ball {
  0% { -moz-transform: translateY(-300px); }
  35% { -moz-transform: translateY(-300px); 
  		-moz-animation-timing-function: ease-in; }
  65% { -moz-transform: translateY(0px); 
  		-moz-animation-timing-function: ease-out; }
  85% { -moz-transform: translateY(-100px); 
  		-moz-animation-timing-function: ease-in; }
  100% { -moz-transform: translateY(0px); }
}

Animations – bouncing ball (4/5)

from demo 4

<div class="ball-arc">
   <div class="ball"></div>
</div>

.ball-arc {
-webkit-animation: ball-x 2.5s cubic-bezier(0, 0, 0.35, 1);
}
/* cubic-bezier here is to adjust the animation-timing speed.
   This example makes the ball take longer to slow down. */

@-webkit-keyframes ball-x {
   0% { -webkit-transform: translateX(-275px); }
   100% { -webkit-transform: translateX(0px); }
}

Animations – bouncing ball (5/5)

from demo 5

.running .spin {-webkit-animation: spin 2.5s; -moz-animation: spin 2.5s;}
.running .wobble {-webkit-animation: wobble 2s; -moz-animation: wobble 2s;}

@-moz-keyframes wobble {
  0%, 24%, 54%, 74%, 86%, 96%, 100% { -moz-transform: scaleX(1.0); }
  25%, 55%, 75% { -moz-transform: scaleX(1.3) scaleY(0.8) translateY(10px); } /* Points hitting floor */
  30%, 60%, 80% { -moz-transform: scaleX(0.8) scaleY(1.2); } /* Wobble inwards */
  75%, 87% {-moz-transform: scaleX(1.2);}
  97% {-moz-transform: scaleX(1.1);}
}
@-moz-keyframes spin {
    0% { -moz-transform: rotate(-180deg); }
    100% { -moz-transform: rotate(360deg); }
}

Source: smashing magazine

Animations – 3D cube

Play with the cube

#demo {
  -webkit-transform-style: preserve-3d;
  -webkit-animation-name: rotate;
  -webkit-animation-duration: 30s;
  -webkit-animation-iteration-count: infinite;
  -webkit-animation-timing-function: linear;
  -webkit-animation-play-state: paused}
#demo:target {
  -webkit-animation-play-state: running
}

Pausing the animation is different from stopping it

More tutorials and demos