En CSS3 podemos crear animaciones que reemplacen a imágenes gif, elementos en Flash o de JavaScript.
Para hacer estas animaciones, es necesario definir un conjunto @keyframes, y dentro de él, las propiedades que irán cambiando gradualmente conforme avance la animación.
Soporte de navegadores
Internet explorer no soporta la propiedad animation ni la regla @keyframes
Chrome y Safari requieren el prefijo -webkit-
Firefox requiere el prefijo -moz-
Opera requiere el prefijo -o-
Podemos declarar los @keyframes de la siguiente manera:
@-webkit-keyframes mianimacion{
from {background: #F00;}
to {background: #0F0;}
}
@-moz-keyframes mianimacion{
from {background: #F00;}
to {background: #0F0;}
}
@-o-keyframes mianimacion{
from {background: #F00;}
to {background: #0F0;}
}
@keyframes mianimacion{
from {background: #F00;}
to {background: #0F0;}
}
Después de definir los @keyframes es necesario ligarlos a un selector.
Para aplicar la animación a un selector, debemos definir al menos el nombre de la animación que usaremos y su duración.
div{
height: 50px;
margin: 0 auto;
width: 50px;
-webkit-animation: mianimacion 3s;
-moz-animation: mianimacion 3s;
-o-animation: mianimacion 3s;
animation: mianimacion 3s;
}
Por defecto la duración es 0, si no se especifica, la aniamción no tendrá efecto.
Otra manera de declarar los @keyframes es mediante porcentajes. El 100% es la duración total de la animación.
@-webkit-keyframes animacion2{
0% {background: #F00;}
50% {background: #00F;}
100% {background: #0F0;}
}
@-moz-keyframes animacion2{
0% {background: #F00;}
50% {background: #00F;}
100% {background: #0F0;}
}
@-o-keyframes animacion2{
0% {background: #F00;}
50% {background: #00F;}
100% {background: #0F0;}
}
@keyframes animacion2{
0% {background: #F00;}
50% {background: #00F;}
100% {background: #0F0;}
}
Las propiedades de animación son las siguientes:
@keyframes Declara los estado de animación
animation Propiedad general para declarar todos los valores, excepto animation-play-state
animation-name Especifica el nombre de los @keyframes a utilizar
animation-duration Define la duración de la animación
animation-timing-function Define el tipo de animación que se ejecutará, por defecto es ease
animation-delay Define si habrá un retraso para iniciar la animación, es 0 por defecto.
animation-iteration-count Especifica el número de veces que se ejecutará la animación, por defecto 1 vez
animation-direction Define si la animación se reproducirá en reversa en ciclos alternados, por defecto es normal
animation-play-state Especifica el estado de la animación, running por defecto o paused
div{
background: #F00;
border-radius:50%;
height: 50px;
margin: 0 auto;
width: 50px;
animation-name: animacion2;
animation-duration: 5s;
animation-timing-function: linear;
animation-delay: 2s;
animation-iteration-count: infinite;
animation-direction: alternate;
animation-play-state: running;
}
/* O en una sóla línea */
div{
background: #F00;
border-radius:50%;
height: 50px;
margin: 0 auto;
width: 50px;
animation: animacion2 5s linear 2s infinite alternate;
}
Recuerda siempre colocar los prefijos en todas las propiedades que los necesiten.
En los siguientes videos podemos ver las animaciones en funcionamiento: