Menu

Generador Cubic-Bezier

Dibuja curvas de easing CSS con una vista previa animada en vivo.

Por Nethanel Bar, Co-founder & CEO

Última actualización

¿Listo para aprender a programar de verdad?

Coddy te enseña escribiendo código real en tu navegador: lecciones interactivas, feedback al instante y ayuda de IA cuando te atascas.

¿Qué es un generador de cubic-bezier?

Una *función de easing* en CSS controla cómo una animación acelera y desacelera durante su duración. Las palabras clave ease, ease-in, ease-out e ease-in-out son atajos para cuatro curvas concretas. Para cualquier cosa más allá de esas cuatro, CSS te da cubic-bezier() - una función que recibe cuatro números y dibuja una curva personalizada.

Esos cuatro números son las coordenadas de dos puntos de control (x1, y1, x2, y2). Escribirlos a mano es incómodo porque pequeños cambios producen efectos visuales grandes, y los pequeños sobrepasos generan movimiento *con rebote* que no se ve en los números. Un editor visual te deja arrastrar los manejadores y ver la curva responder - mucho más rápido que retocar decimales.

El editor de Coddy dibuja la curva en tiempo real, anima una bola de prueba con tu easing y trae presets para los patrones más comunes: las palabras clave de CSS, la curva *standard* de Material Design, una salida con rebote y un *anticipate* con sobreimpulso. Copia la cadena cubic-bezier() resultante y pégala en tu CSS - todo se ejecuta en el navegador.

Lo que conviene saber del easing cubic-bezier

  • La curva grafica *progreso* contra *tiempo*. El tiempo va de izquierda a derecha (0 → 1); el progreso va de abajo a arriba (0 → 1). La diagonal recta es linear - progreso constante por unidad de tiempo.
  • Las X de ambos puntos de control están limitadas a 0..1. Las Y pueden bajar de 0 o pasar de 1 - así obtienes rebotes, anticipación y sobreimpulso (la animación pasa de su destino o arranca en sentido contrario).
  • Las curvas *ease-out* (la mayor parte del progreso ocurre pronto) se sienten ágiles y responsivas - bien para entradas y reacciones de botón. Las *ease-in* (el progreso ocurre tarde) se sienten lentas - suelen estar mal en UI, sirven para salidas.
  • El easing *standard* recomendado por Material es cubic-bezier(0.4, 0, 0.2, 1) - arranque rápido, final lento. iOS usa algo cercano a cubic-bezier(0.42, 0, 0.58, 1) (ease-in-out).
  • Para animaciones cortas (≤200ms) la mayoría de easings se ven parecidos - la duración importa más que la curva. Para animaciones largas (300ms+), el easing es lo que distingue un movimiento pulido de uno descuidado.

Cómo diseñar un easing cubic-bezier

  1. Parte de un preset

    Pulsa un preset cercano al sentir que buscas. *Material standard* y *Bouncy out* son buenos puntos de partida para UI; *ease-out* es la opción segura para entradas.

  2. Arrastra los dos manejadores

    Los círculos en color son los puntos de control. Arrastra el primero para afinar cómo *empieza* la animación; el segundo para afinar cómo *termina*. Tirar de un manejador por encima del borde superior produce sobreimpulso.

  3. Elige duración y repite

    Elige una duración realista para tu animación real. Las transiciones de UI suelen ir entre 150 y 300ms; las animaciones de énfasis 400–600ms. Pulsa *Repetir* para volver a lanzar la vista previa con la nueva duración.

  4. Afina con los campos numéricos

    Para valores precisos, escribe en los inputs X1/Y1/X2/Y2. Y puede caer por debajo de 0 o pasar de 1 - X siempre está en 0..1.

  5. Copia el CSS

    Pulsa *Copiar* para llevarte la regla transition completa. Llévala a tu hoja de estilos y sustituye transform por la propiedad que estés animando.

Referencia rápida cubic-bezier

Easings comunes y los cubic-bezier que hay detrás. Las cuatro palabras clave son alias de curvas cubic-bezier concretas.

EasingValores cubic-bezierCuándo usarlo
ease(0.25, 0.1, 0.25, 1)Por defecto en transition - suave pero genérico
linear(0, 0, 1, 1)Velocidad constante - normalmente mal para UI, bien para spinners
ease-in(0.42, 0, 1, 1)Inicio lento, final rápido - mejor para salidas
ease-out(0, 0, 0.58, 1)Inicio rápido, final lento - mejor para entradas y reacciones
ease-in-out(0.42, 0, 0.58, 1)Simétrico - mejor para toggles ida y vuelta
Material standard(0.4, 0, 0.2, 1)Movimiento moderno y ágil de UI
Bouncy out(0.18, 0.89, 0.32, 1.28)Se pasa y se asienta - entradas divertidas

Ejemplos cubic-bezier para probar

Reacción ágil de botón

Easing estándar al hacer hover
.btn {    transition: transform 180ms cubic-bezier(0.4, 0, 0.2, 1);}.btn:hover {    transform: translateY(-2px);}

La mayor parte del levantamiento ocurre rápido al inicio y luego se asienta - se siente responsivo al cursor en lugar de pesado.

Entrada con rebote

Sobreimpulso y luego reposo
.card {    transition: transform 350ms cubic-bezier(0.18, 0.89, 0.32, 1.28);}

Y2 a 1.28 hace que la curva pase del destino y se asiente. Úsalo con cuentagotas - el movimiento con rebote cansa si todo se mueve así.

Anticipar antes de moverse

Retrocede y luego sale disparado
.hero {    transition: transform 500ms cubic-bezier(0.68, -0.55, 0.27, 1.55);}

Y1 negativo hace que la animación se mueva un instante en sentido *contrario* antes de ir al destino. Truco prestado de la animación clásica - un toque de anticipación hace que el movimiento principal parezca intencional.

Errores típicos de easing

  • Usar ease-in para entradas. Empieza lento y termina rápido - justo lo contrario de lo que se siente responsivo. Usa ease-out.
  • Elegir linear para movimiento de UI porque parece neutro. La velocidad constante parece mecánica; está bien para barras de progreso y spinners, no para casi nada más.
  • Pasarse con el sobreimpulso en cada transición. Los easings con rebote son un acento, no un valor por defecto - usados en todo se leen como caos.
  • Intentar arreglar un movimiento lento cambiando el easing en lugar de la duración. Si un ease-out de 600ms se siente pesado, prueba primero a bajarlo a 300ms.
  • Olvidar que las X de ambos manejadores están limitadas a 0..1. Intentar arrastrar un manejador fuera del borde izquierdo o derecho no hace nada - solo la Y puede salir del recuadro.

Preguntas frecuentes sobre cubic-bezier

¿Qué significan los cuatro números de cubic-bezier()?
Son las coordenadas x e y de dos puntos de control: cubic-bezier(x1, y1, x2, y2). El primer punto modela cómo *empieza* la animación, el segundo cómo *termina*. X siempre va entre 0 y 1 (tiempo); Y puede salirse de 0..1 para sobreimpulso y anticipación (progreso).
¿Qué easing uso para animaciones de UI?
Para entradas (algo que aparece) y reacciones (hover, focus), usa *ease-out* o la curva estándar de Material cubic-bezier(0.4, 0, 0.2, 1). Para salidas, *ease-in* va bien. Evita *linear* salvo cuando animes progreso.
¿Diferencia entre ease y ease-out?
Ambos terminan despacio, pero ease también arranca suave. ease-out arranca a tope y desacelera - ese movimiento *inmediato* es lo que se siente más responsivo que ease.
¿Cómo hago una animación con rebote en CSS?
Arrastra el segundo manejador por encima del borde superior (Y2 > 1). Por ejemplo, cubic-bezier(0.18, 0.89, 0.32, 1.28) se pasa ~28 % antes de asentarse. Para varios rebotes necesitas @keyframes o una librería de física de muelles - cubic-bezier solo permite un sobreimpulso.
¿Puedo usar cubic-bezier con animaciones @keyframes?
Sí. Úsalo como animation-timing-function, en el shorthand animation o por keyframe. Para movimientos complejos en varios pasos puedes aplicar un easing distinto entre cada par de keyframes.

Más información

Otras herramientas para desarrolladores

Ilustración de los lenguajes de programación de Coddy

Aprende a programar con Coddy

COMENZAR