Cómo utilizar CSS keyframes para animar elementos

Introducción

Una animación no es más que un cambio producido a lo largo de una serie de fotogramas. Al realizar estos cambios progresivamente se produce una sensación de movimiento. Con keyframes tenemos la posibilidad de controlar de principio a fin, cómo queremos que esos cambios afecten a nuestros fotogramas.

Elementos de una animación CSS

Una animación se registra a través de la regla @keyframes y ejecuta mediante la propiedad animation.

Keyframes

  • CSS
@keyframes name {
  from {
    /* propiedad */
  }

  to {
    /* propiedad */
  }
}

Así de simple es la asignación de keyframes. Asignamos un nombre identificativo y dentro de los símbolos de llaves indicamos un inicio (from) y un final (to) de nuestra animación.

También podemos asignar valores porcentuales (incluso múltiples valores), lo que nos permite controlar con más precisión el progreso de nuestra animación.

  • CSS
@keyframes name {
  0% {
    /* propiedad */
  }

  66% {
    /* propiedad */
  }

  100% {
    /* propiedad */
  }
}

Animation

Para asociar la animación registrada a un elemento utilizamos a la propiedad animation:

  • CSS
.element {
  animation: name 3s infinite;
}

La animación previa durará 3 segundos y se repetirá indefinidamente. También podemos especificar cada una de las propiedades por separado:

  • CSS
animation-name: name;
animation-duration: 3s;
animation-iteration-count: infinite;
animation-delay: 0s;
animation-direction: normal;
animation-fill-mode: none;
animation-iteration-count: 1;
animation-play-state: running;
animation-timing-function: ease;

Puedes consultar la documentación sobre animation y sus propiedades en la especificación CSS3.

Dentro de animation también contamos con la función steps(), que permitirá especificar en cuantos pasos se ejecutará nuestra animación.

  • CSS
.element {
  animation: name 10s steps(10) infinite;
}

En el ejemplo anterior nuestra animación durará 10 segundos y tendrá 10 pasos o fotogramas, por lo que se ejecutará un paso cada segundo y posiblemente nuestra animación ya no será tan fluida.

Ejemplos de keyframes

Animación lineal

@keyframes taadaa { 
  0% {
    opacity: 0;
  }

  100% {
    opacity: 1;
  }
}

div {
  background-color: var(--color-primary);
  width: 50px;
  height: 50px;
  animation: taadaa 2s infinite;
}

Con esto conseguimos que nuestra animación comience con un objeto transparente y que, progresivamente, termine siendo opaco. Y vuelta a empezar.

Animación no lineal

El porcentaje de progreso también se puede especificar en múltiples pasos, tanto englobando los pasos con propiedades repetidas como por separado:

@keyframes bounce { 
  20%, 50%, 80% {
    transform: translateY(0);
  }

  40% {
    transform: translateY(-30px);
  }

  60% {
    transform: translateY(-15px);
  }
}

div {
  background-color: var(--color-primary);
  width: 50px;
  height: 50px;
  animation: bounce 1s infinite;
}

Mediante esta técnica podremos conseguir efectos como rebote, donde una animación cambia su ritmo a medida que avanza.

Puedes apoyarme para que pueda dedicar aún más tiempo a escribir artículos y tener recursos para crear nuevos proyectos. ¡Gracias!