Animaciones (sintaxis básica)

La propiedad animation de CSS es una propiedad abreviada (shorthand property) para animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count y animation-direction.

Las animaciones en css3 nos permiten hacer cosas que con las transiciones no alcanzamos y nos quedamos cortos. Una animación permite que un elemento cambie gradualmente de un estilo a otro, se pueden cambiar tantas propiedades CSS como desee, tantas veces como desee.

Para utilizar la animación CSS, primero debe especificar algunos fotogramas clave para la animación. Los fotogramas clave contienen los estilos que tendrá el elemento en determinados momentos. CSS permite la animación de elementos HTML sin utilizar JavaScript o Flash.

En este capítulo, aprenderá sobre las siguientes propiedades:

  • @keyframes La regla arroba @keyframes permite a los autores controlar los pasos intermedios en una secuencia de animación CSS mediante el establecimiento de keyframes (o puntos de trayectoria) a lo largo de la secuencia de animación que debe ser alcanzado por determinados puntos durante la animación.
  • animation-name La propiedad CSS animation-name especifica una lista de animaciones que se deben aplicar al elemento seleccionado. Cada nombre indica un @keyframes esta regla define los valores de las propiedades de la secuencia de animación.
  • animation-duration La propiedad CSS animation-duration indica la cantidad de tiempo que la animación tarda en completar un ciclo (duración).
  • animation-delay La propiedad CSS animation-delay especifica el tiempo de retardo que debe transcurrir antes de comenzar la animación. Esto permite que la secuencia de animación no comience nada más ser aplicada a un elemento.
  • animation-iteration-count La propiedad CSS animation-iteration-count define el numero de veces que un ciclo de animación debe ser ejecutado antes de detenerse.
  • animation-direction La propiedad CSS  animation-direction  indica si la animación debe retroceder hasta el fotograma de inicio al finalizar la secuencia o si debe comenzar desde el principio al llegar al final.
  • animation-timing-function La propiedad CSS animation-timing-function especifica cómo una animación CSS debe avanzar sobre la duración de cada ciclo. Los posibles valores son una o varias .
  • animation-fill-mode  La propiedad CSS animation-fill-mode especifica el modo en que una animación CSS aplica sus estilos, estableciendo su persistencia y estado final tras su ejecución.
  • animation La propiedad animation de CSS es una propiedad abreviada (shorthand property) para animation-name, animation-duration, animation-timing-function, animation-delay, animation-iteration-count y animation-direction.

Nota: Todas estas propiedades de animación no son compatibles con Internet Explorer 9 y versiones anteriores.


<!DOCTYPE html>
<html>
<head>
<style> 

.op1 {
  width: 100px;
  height: 100px;
  background-color: red;
  animation-name: example;
  animation-duration: 10s;
}

@keyframes example {
  from {background-color: red;}
  to {background-color: yellow;}
}
</style>
</head>
<body>
<div class="op1"></div>

<p><b>Nota:</b> Cuando termina una animación, vuelve a cambiar a su estilo original.</p>

</body>
</html>


Nota: Cuando termina una animación, vuelve a cambiar a su estilo original.

Nota: La propiedad animation-duration define cuánto tiempo debe tardar una animación en completarse. Si animation-durationno se especifica la propiedad, no se producirá ninguna animación, porque el valor predeterminado es 0 (0 segundos).
En el ejemplo anterior, hemos especificado cuándo cambiará el estilo utilizando las palabras clave "desde" y "hasta" (que representa 0% (inicio) y 100% (completo)). También es posible utilizar el porcentaje. Al usar el porcentaje, puede agregar tantos cambios de estilo como desee.
El siguiente ejemplo cambiará el color de fondo del elemento cuando la animación esté completa al 25%, al 50% y nuevamente cuando la animación esté completa al 100%: 

<!DOCTYPE html>
<html>
<head>
<style>

.op2 {
  width: 100px;
  height: 100px;
  background-color: red;
  animation-name: example;
  animation-duration: 10s;
}

@keyframes example {
  0%   {background-color: red;}
  25%  {background-color: yellow;}
  50%  {background-color: blue;}
  100% {background-color: green;}
}
</style>
</head>
<body>

<div class="op2"></div>

</body>
</html>

El siguiente ejemplo cambiará tanto el color de fondo como la posición del elemento <div> cuando la animación esté completa al 25%, al 50% y nuevamente cuando la animación esté completa al 100%:

<!DOCTYPE html>
<html>
<head>
<style>
.op3 {
  width: 100px;
  height: 100px;
  background-color: red;
  animation-name: example1;
  animation-duration: 10s;
}
@keyframes example1 {
  0%   {background-color: red; left:0px; top:0px;}
  25%  {background-color: yellow; left:200px; top:0px;}
  50%  {background-color: blue; left:200px; top:200px;}
  75%  {background-color: green; left:200px; top:200px;}
  100% {background-color: red; left:0px; top:0px;}
}
</style>
</head>
<body>
<div class="op3"></div>

</body>
</html>

La propiedad animation-delay especifica un retraso para el inicio de una animación, el valor de retardo de la animación se define en segundos (s) o milisegundos (ms). En el ejemplo se inicia la animación después de 2 segundos:

<!DOCTYPE html>
<html>
<head>
<style>
.op4 {
  width: 100px;
  height: 100px;
  background-color: red;
  position: relative;
  animation: mymove1;
  animation-delay: 2s;
  animation-duration: 10s;
}
@keyframes mymove1 {
  from {left: 0px;}
  to {left: 200px;}
}
</style>
</head>
<body>
<div class="op4"></div>

</body>
</html>




La propiedad animation-iteration-count especifica el número de veces que se debe reproducir una animación.

animation-iteration-count: numero|infinite;
Propiedades
  • numero Un número que define cuántas veces se debe reproducir una animación. El valor predeterminado es 1
  • infinite Especifica que la animación debe reproducirse infinitas veces (para siempre)
<!DOCTYPE html>
<html>
<head>
<style>
.op3 {
  width: 100px;
  height: 100px;
  background-color: red;
  animation: mymove 3s;
  animation-iteration-count: infinite;
}
@keyframes example1 {
  from {top: 0px;}
  to {top: 200px;}
}
</style>
</head>
<body>
<div class="op3"></div>

</body>
</html>



Reproduce la animación para siempre:

La propiedad animation-direction define si una animación debe reproducirse hacia adelante, hacia atrás o en ciclos alternos.

animation-direction: normal|reverse|alternate|alternate-reverse ;
  • normal Es el valor predeterminado donde la animación se reproduce normalmente (hacia delante)
  • reverse La animación se reproduce en sentido inverso (al revés)
  • alternate La animación se reproduce primero hacia adelante y luego hacia atrás
  • alternate-reverse La animación se reproduce primero hacia atrás y luego hacia adelante
<!DOCTYPE html>
<html>
<head>
<style>
.op6 {
  width: 100px;
  height: 100px;
  background-color: red;
  position: relative;
  animation: myfirst 5s 2;
  animation-direction: alternate-reverse;
}
@keyframes example1 {
  0%   {background-color: red; left:0px; top:0px;}
  25%  {background-color: yellow; left:200px; top:0px;}
  50%  {background-color: blue; left:200px; top:200px;}
  75%  {background-color: green; left:200px; top:200px;}
  100% {background-color: red; left:0px; top:0px;}
}
</style>
</head>
<body>
<div class="op6"></div>

</body>
</html>

Reproduzca la animación primero hacia atrás, luego hacia adelante:










La función animation-timing-function especifica la curva de velocidad de una animación. La curva de velocidad define el TIEMPO que usa una animación para cambiar de un conjunto de estilos CSS a otro.
La curva de velocidad se utiliza para realizar cambios sin problemas.

animation-timing-function: linear|ease|ease-in|ease-out|ease-in-out|step-start|step-end|steps(int,start|end)|cubic-bezier(n,n,n,n)

La función animation-timing-function utiliza una función matemática, llamada curva de Bézier cúbica, para hacer la curva de velocidad. Puede utilizar sus propios valores en esta función o utilizar uno de los valores predefinidos:

Opciones
  • linear La animación tiene la misma velocidad de principio a fin
  • ease Valor predeterminado. La animación tiene un comienzo lento, luego rápido, antes de que termine lentamente
  • ease-in La animación tiene un comienzo lento
  • ease-out La animación tiene un final lento
  • ease-in-out La animación tiene un comienzo y un final lentos
  • step-start Equivalente a pasos (1, inicio)
  • step-end Equivalente a pasos (1, end)
  • steps (int, start | end) Especifica una función paso a paso, con dos parámetros. El primer parámetro especifica el número de intervalos en la función. Debe ser un número entero positivo (mayor que 0). El segundo parámetro, que es opcional, es el valor "inicio" o "final", y especifica el punto en el que se produce el cambio de valores dentro del intervalo. Si se omite el segundo parámetro, se le asigna el valor "fin"
  • cubic-bezier (n, n, n, n) Defina sus propios valores en la función cubic-bezier Los valores posibles son valores numéricos de 0 a 1
<!DOCTYPE html>
<html>
<head>
<style>
.op7 {
  width: 100px;
  height: 50px;
  background: red;
  color: white;
  position: relative;
  font-weight: bold;
  animation: myfirst 5s 2;
  animation: mymove 5s infinite;
}

</style>
</head>
<body>
<div class="op7" id="div1"> linear </div>
<div class="op7" id="div2"> ease </div>
<div class="op7" id="div3"> ease-in </div>
<div class="op7" id="div4"> ease-out </div>
<div class="op7" id="div5"> ease-in-out </div>

</body>
</html>
linear

ease

ease-in

ease-out

ease-in-out