Controlando el ritmo de las animaciones con funciones de tiempo en CSS

Hasta este punto, hemos aprendido cómo crear transiciones y animaciones en CSS. Sin embargo, aún no hemos explorado cómo controlar la velocidad o el ritmo con el que ocurren esos cambios visuales. Para ello, existen las llamadas funciones de tiempo, que permiten modificar cómo se comporta una animación a lo largo de su duración.


¿Qué son las funciones de tiempo en CSS?

Las funciones de tiempo definen la aceleración de una transición o animación. En otras palabras, determinan si el cambio será constante, acelerado al principio, más lento al final, o cualquier combinación de estas variaciones.

En CSS, hay dos propiedades principales que nos permiten definir este ritmo:

  • transition-timing-function: para controlar transiciones.
  • animation-timing-function: para controlar animaciones.

Ambas aceptan los mismos tipos de valores.


Tipos de funciones de tiempo

Podemos elegir entre distintos métodos para definir el ritmo de un efecto animado:

Tipo de valorDescripción
Palabras claveValores predefinidos como ease o linear.
cubic-bezier()Personaliza el ritmo mediante una curva Bézier.
steps()Divide la animación en pasos fijos.
linear()Define una progresión constante personalizada.

En este artículo nos centraremos en las palabras clave, ya que son las más utilizadas y fáciles de aplicar.


Palabras clave predefinidas

Estas son las funciones de tiempo estándar que puedes usar directamente:

ValorDescripción
linearRitmo uniforme, sin aceleraciones.
easeComienza rápido y termina lento. Valor por defecto.
ease-inInicia despacio y acelera hacia el final.
ease-outInicia rápido y se ralentiza al final.
ease-in-outCombina un inicio lento y un final lento.

Ejemplo práctico

Supongamos una animación que mueve un elemento hacia la derecha. Cambiando el valor de animation-timing-function, podemos observar cómo varía su comportamiento:

cssCopiarEditar.element {
  --size: 100px;
  width: var(--size);
  height: var(--size);
  color: white;
  font-size: 0.9rem;
  border-radius: 50%;
  margin: 5px;
  display: grid;
  place-items: center;
  background: indigo;
  animation: move 5s alternate infinite;
}

@keyframes move {
  to { translate: 600px; }
}

.linear       { animation-timing-function: linear; }
.ease         { animation-timing-function: ease; }
.ease-in      { animation-timing-function: ease-in; }
.ease-out     { animation-timing-function: ease-out; }
.ease-in-out  { animation-timing-function: ease-in-out; }

¿Qué ritmo elegir?

  • Usa linear si necesitas una progresión constante, como en un cargador.
  • ease es ideal para efectos generales que se sientan suaves.
  • ease-in funciona bien para entradas progresivas, como elementos que aparecen.
  • ease-out es útil para salidas suaves o retrocesos.
  • ease-in-out es recomendable para transiciones que entran y salen con naturalidad.

¿Y si quiero más control?

Cuando los valores predefinidos no son suficientes, CSS permite definir funciones más personalizadas con cubic-bezier(), steps() o linear() con parámetros. Estas funciones avanzadas permiten crear movimientos a medida, algo que exploraremos en el siguiente tema.