Ir al contenido
angel.library

12 principios de animación — movimiento aplicado a interfaces

Escrito y construido por Raphael Salaja. Es gratuito, con un enlace de donación para apoyar su trabajo.

Artículo interactivo que toma los doce principios clásicos de la animación —formulados por los animadores de Disney— y los traduce a la animación de interfaces web y de producto. Cada principio viene con demostraciones en vivo en la propia página.

PrincipioEn una interfaz
1ElasticidadDeformar para transmitir peso y flexibilidad
2AnticipaciónPreparar al usuario antes de la acción
3EscenaDirigir la atención hacia lo importante
4AcciónCuadro a cuadro o por poses clave
5ContinuidadNada se detiene ni arranca de golpe
6SuavidadEntradas y salidas graduales
7ArcosMovimientos curvos para mayor realismo
8ContextoDetalles que apoyan la acción principal
9TiempoLa duración correcta da fluidez o torpeza
10ExageraciónEnfatizar para comunicar mejor
11VolumenCoherencia, profundidad y realismo
12AtractivoAnimaciones agradables y con personalidad

La mayoría de las animaciones malas de una aplicación no fallan por la técnica sino por el criterio: duran demasiado, arrancan de golpe, se mueven en línea recta o compiten con lo que el usuario intenta leer. Los principios 5, 6, 9 y 3 cubren exactamente esos cuatro errores.

Traducido a CSS: continuidad y suavidad son la función de aceleración, tiempo es la duración, arcos es no interpolar en línea recta, y escena es decidir qué merece moverse y qué no.

Está pensado para escritorio: varios ejemplos necesitan espacio y puntero para apreciarse. Es un artículo conceptual con demostraciones, no un tutorial: explica el porqué y muestra el efecto, sin entrar en implementaciones extensas.

A los doce clásicos, una interfaz suma uno que el cine no tiene: poder apagarlos. Cualquier animación de producto debe respetar prefers-reduced-motion, porque para parte de las personas el movimiento no es agradable sino molesto o incapacitante.

src/styles/movimiento.css
@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.01ms !important;
transition-duration: 0.01ms !important;
}
}