Crear animaciones CSS3 con Keyframes

CSSBeginner
Practicar Ahora

Introducción

En este laboratorio, los estudiantes profundizarán en el mundo de las animaciones CSS3 al dominar la poderosa regla @keyframes y las técnicas de animación. El curso ofrece una exploración integral de la creación de animaciones dinámicas web, centrándose en la comprensión de la sintaxis de los keyframes, la definición de propiedades de animación y la implementación de efectos de animación avanzados sin depender de JavaScript.

Los participantes aprenderán a crear animaciones suaves y complejas definiendo las etapas de animación mediante keyframes basados en porcentajes y propiedades de transformación. A través de ejemplos prácticos y ejercicios prácticos, los estudiantes descubrirán cómo mover, redimensionar y colorear dinámicamente los elementos, adquiriendo las habilidades para crear experiencias web atractivas e interactivas utilizando técnicas de animación pura CSS3.

Comprender la sintaxis de los keyframes de animación CSS3

En este paso, aprenderás la sintaxis fundamental de los keyframes de animación CSS3, que son los bloques de construcción para crear animaciones dinámicas web. Las animaciones CSS te permiten transformar suavemente los elementos de un estilo a otro sin utilizar JavaScript.

Comencemos por entender la sintaxis básica de los keyframes de CSS. Abra el WebIDE y cree un nuevo archivo llamado styles.css en el directorio ~/project.

Las animaciones de keyframes de CSS se definen utilizando la regla @keyframes, que especifica el comportamiento de la animación en diferentes etapas de la secuencia de animación. Aquí hay un ejemplo simple para demostrar la sintaxis:

@keyframes moveRight {
  /* Estado inicial (0% o "from") */
  from {
    transform: translateX(0);
  }

  /* Estado final (100% o "to") */
  to {
    transform: translateX(300px);
  }
}

En este ejemplo, moveRight es el nombre de la animación, y define cómo un elemento se moverá desde su posición original hasta 300 píxeles hacia la derecha.

También puedes usar keyframes basados en porcentajes para animaciones más complejas:

@keyframes colorChange {
  0% {
    background-color: red;
  }
  50% {
    background-color: green;
  }
  100% {
    background-color: blue;
  }
}

Esta animación demuestra cómo puedes especificar múltiples etapas de una animación utilizando valores porcentuales, lo que permite efectos más intrincados y dinámicos.

Puntos claves para recordar sobre la sintaxis de los keyframes:

  • Utilice @keyframes seguido de un nombre de animación único
  • Defina los estados utilizando from/to o valores porcentuales
  • Especifique las propiedades CSS para animar en cada etapa

Salida de ejemplo de una animación simple:

[Un elemento div se mueve suavemente de izquierda a derecha]
[Un elemento div cambia de color de rojo a verde a azul]

Definir una animación básica utilizando la regla @keyframes

En este paso, aprenderás cómo crear una animación básica utilizando la regla @keyframes al construir una animación de un elemento en movimiento simple. Expandiremos los conocimientos del paso anterior y crearemos un ejemplo más práctico.

Primero, creemos un archivo HTML para demostrar nuestra animación. Abra el WebIDE y cree un nuevo archivo llamado index.html en el directorio ~/project:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Basic CSS Animation</title>
    <link rel="stylesheet" href="styles.css" />
  </head>
  <body>
    <div class="animated-box"></div>
  </body>
</html>

Ahora, actualice el archivo styles.css que creamos anteriormente con una animación más detallada:

.animated-box {
  width: 100px;
  height: 100px;
  background-color: blue;
  position: relative;
}

@keyframes moveAndResize {
  0% {
    /* Estado inicial */
    transform: translateX(0) scale(1);
    background-color: blue;
  }

  50% {
    /* Punto medio de la animación */
    transform: translateX(200px) scale(1.5);
    background-color: green;
  }

  100% {
    /* Estado final */
    transform: translateX(400px) scale(1);
    background-color: red;
  }
}

Analicemos la regla @keyframes:

  • Definimos una animación llamada moveAndResize
  • En el 0% (inicio), la caja está en su posición original
  • En el 50% (punto medio), la caja se mueve 200px hacia la derecha y aumenta de tamaño
  • En el 100% (fin), la caja se mueve 400px hacia la derecha y regresa al tamaño original

Salida de ejemplo:

[Una caja azul que:
 - Se mueve de izquierda a derecha
 - Cambia de tamaño de normal a más grande y luego regresa
 - Cambia de color de azul a verde a rojo]

Este ejemplo demuestra cómo:

  • Crear una animación de múltiples etapas
  • Utilizar keyframes basados en porcentajes
  • Combinar múltiples transformaciones (traslación y escalado)
  • Cambiar el color durante la animación

Aplicar propiedades de animación a los elementos HTML

En este paso, aprenderás cómo aplicar propiedades de animación a los elementos HTML, dando vida a tus animaciones de keyframes. Modificaremos el archivo styles.css anterior para agregar propiedades de animación específicas que controlen cómo se comporta la animación.

Actualice el archivo styles.css con el siguiente CSS:

.animated-box {
  width: 100px;
  height: 100px;
  background-color: blue;
  position: relative;

  /* Propiedades de animación */
  animation-name: moveAndResize; /* Nombre de la animación de keyframes */
  animation-duration: 3s; /* Tiempo total de un ciclo de animación */
  animation-timing-function: ease-in-out; /* Aceleración y desaceleración suaves */
  animation-delay: 1s; /* Esperar 1 segundo antes de comenzar */
}

@keyframes moveAndResize {
  0% {
    transform: translateX(0) scale(1);
    background-color: blue;
  }

  50% {
    transform: translateX(200px) scale(1.5);
    background-color: green;
  }

  100% {
    transform: translateX(400px) scale(1);
    background-color: red;
  }
}

Propiedades de animación principales explicadas:

  • animation-name: Vincula el elemento a una regla @keyframes específica
  • animation-duration: Establece el tiempo total para un ciclo de animación completo
  • animation-timing-function: Controla la curva de velocidad de la animación
  • animation-delay: Especifica un período de espera antes de que comience la animación

También puedes usar la propiedad abreviada animation para combinar estas:

.animated-box {
  animation: moveAndResize 3s ease-in-out 1s;
}

Salida de ejemplo:

[Una caja azul que:
 - Espera 1 segundo antes de comenzar
 - Se mueve suavemente de izquierda a derecha
 - Cambia de tamaño y color gradualmente
 - Tarda 3 segundos en completar un ciclo de animación]

Personalizar el tiempo y la iteración de la animación

En este paso, aprenderás a ajustar con precisión tus animaciones CSS controlando su tiempo, iteración y dirección. Expandiremos el ejemplo anterior para demostrar la personalización avanzada de las animaciones.

Actualice el archivo styles.css con el siguiente CSS:

.animated-box {
  width: 100px;
  height: 100px;
  background-color: blue;
  position: relative;

  /* Personalizar propiedades de animación */
  animation-name: moveAndResize;
  animation-duration: 3s;
  animation-timing-function: cubic-bezier(0.5, 0.1, 0.3, 1);
  animation-iteration-count: 3; /* Repetir la animación 3 veces */
  animation-direction: alternate; /* Cambiar de dirección en cada iteración */
  animation-fill-mode: forwards; /* Mantener el estado final después de la animación */
}

@keyframes moveAndResize {
  0% {
    transform: translateX(0) scale(1);
    background-color: blue;
  }

  100% {
    transform: translateX(400px) scale(1.5);
    background-color: red;
  }
}

Propiedades principales de personalización de animación:

  • animation-timing-function: Controla la curva de velocidad (por ejemplo, cubic-bezier() para una aceleración personalizada)
  • animation-iteration-count: Define cuántas veces se repite la animación
  • animation-direction: Determina la dirección de reproducción de la animación
  • animation-fill-mode: Especifica cómo se aplican los estilos antes/despues de la animación

También puedes usar la propiedad abreviada animation:

.animated-box {
  animation: moveAndResize 3s cubic-bezier(0.5, 0.1, 0.3, 1) 3 alternate forwards;
}

Salida de ejemplo:

[Una caja azul que:
 - Se mueve y cambia de tamaño 3 veces
 - Cambia de dirección en cada iteración
 - Utiliza una curva de velocidad personalizada
 - Queda en la posición final después de la animación]

Experimentar con efectos de animación avanzados

En este paso, explorarás técnicas avanzadas de animación CSS al crear una animación compleja con múltiples elementos que demuestre el poder de los keyframes y las transformaciones CSS.

Actualice el archivo index.html para incluir múltiples elementos animados:

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Advanced CSS Animations</title>
    <link rel="stylesheet" href="styles.css" />
  </head>
  <body>
    <div class="container">
      <div class="circle circle1"></div>
      <div class="circle circle2"></div>
      <div class="circle circle3"></div>
    </div>
  </body>
</html>

Reemplace el contenido de styles.css con la siguiente animación avanzada:

.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  background-color: #f0f0f0;
}

.circle {
  width: 100px;
  height: 100px;
  border-radius: 50%;
  position: absolute;
  opacity: 0.7;
}

.circle1 {
  background-color: #ff6b6b;
  animation: orbit1 4s infinite linear;
}

.circle2 {
  background-color: #4ecdc4;
  animation: orbit2 4s infinite linear;
}

.circle3 {
  background-color: #45b7d1;
  animation: orbit3 4s infinite linear;
}

@keyframes orbit1 {
  0% {
    transform: rotate(0deg) translateX(150px) rotate(0deg);
  }
  100% {
    transform: rotate(360deg) translateX(150px) rotate(-360deg);
  }
}

@keyframes orbit2 {
  0% {
    transform: rotate(120deg) translateX(200px) rotate(-120deg);
  }
  100% {
    transform: rotate(480deg) translateX(200px) rotate(-480deg);
  }
}

@keyframes orbit3 {
  0% {
    transform: rotate(240deg) translateX(250px) rotate(-240deg);
  }
  100% {
    transform: rotate(600deg) translateX(250px) rotate(-600deg);
  }
}

Técnicas avanzadas de animación demostradas:

  • Animaciones simultáneas múltiples
  • Rotación y traslación complejas
  • Animación infinita con tiempo lineal
  • Movimiento orbital desfasado
  • Variaciones de opacidad y color

Salida de ejemplo:

[Tres círculos de diferentes colores orbitando alrededor de un punto central
 - Los círculos se mueven a diferentes distancias
 - Rotación continua y suave
 - Efecto de superposición y translucidez]

Resumen

En este laboratorio, los participantes exploraron los fundamentos de los keyframes de animación CSS3, aprendiendo cómo crear animaciones dinámicas para la web sin utilizar JavaScript. El laboratorio se centró en entender la sintaxis de la regla @keyframes, que permite a los desarrolladores definir secuencias de animación complejas utilizando estados basados en porcentajes o de from/to. Los participantes aprendieron a especificar los comportamientos de animación transformando propiedades CSS como la posición, el color y el tamaño en diferentes etapas de una secuencia de animación.

Los ejercicios prácticos guiaron a los aprendices en la creación de efectos de animación básicos y avanzados, incluyendo el movimiento de elementos en la pantalla, el cambio de colores y la personalización del tiempo y las iteraciones de la animación. Al experimentar con diferentes configuraciones de keyframes, los participantes adquirieron experiencia práctica en la creación de animaciones para la web suaves y atractivas que mejoran la interactividad de la interfaz de usuario y su atractivo visual.