Animaciones CSS: Conceptos y Ejemplos Prácticos
Aprende a crear, optimizar y mantener animaciones CSS profesionales, con ejemplos listos para copiar y adaptar a tus proyectos.
1. Fundamentos
Una animación CSS se basa en dos pilares clave:
- @keyframes: define los estados intermedios de la animación.
- propiedad
animation: controla la duración, timing‑function, iteraciones, etc. - propiedad
transition: permite animar cambios de estilo entre dos estados.
Mientras transition es ideal para efectos simples (hover, focus), animation brinda mayor control y permite crear secuencias complejas con varios pasos.
2. Sintaxis básica de @keyframes
@keyframes nombreAnimacion {
0% { transform: translateX(0); opacity: 0; }
50% { transform: translateX(50px); opacity: 0.5; }
100% { transform: translateX(0); opacity: 1; }
}
.elemento {
animation: nombreAnimacion 2s ease-in-out infinite;
}
Los porcentajes (0%, 50%, 100%) representan puntos en el tiempo de la animación. Puedes usar from y to como atajos de 0% y 100%.
3. Transition vs Animation (Comparativa)
| Característica | Transition | Animation |
|---|---|---|
| Control de etapas | Solo inicio y fin | Multiples etapas con @keyframes |
| Iteraciones | No aplicable | Puede repetirse (animation-iteration-count) |
| Dirección | No aplicable | Reversa, alternar, etc. |
| Facilidad de uso | Ideal para hover/focus | Requiere definición de @keyframes |
En la práctica, combina ambos: usa transition para interacciones rápidas y animation para efectos más elaborados como loaders, banners o micro‑interacciones.
4. Ejemplos prácticos
4.1. Botón con efecto "pulse"
@keyframes pulse {
0% { transform: scale(1); }
50% { transform: scale(1.1); }
100% { transform: scale(1); }
}
.btn-pulse {
display: inline-block;
padding: .75rem 1.5rem;
background: #0069d9;
color: #fff;
border-radius: .3rem;
animation: pulse 1.5s ease-in-out infinite;
}
4.2. Loader circular con border
@keyframes spin {
to { transform: rotate(360deg); }
}
.loader {
width: 48px;
height: 48px;
border: 4px solid #ddd;
border-top-color: #007bff;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
4.3. Texto que se escribe (typewriter)
@keyframes typing {
from { width: 0; }
to { width: 100%; }
}
@keyframes blink {
50% { border-color: transparent; }
}
.typewriter {
overflow: hidden;
border-right: .15em solid #000;
white-space: nowrap;
font-family: monospace;
width: 0;
animation: typing 3.5s steps(30) forwards, blink .75s step-end infinite;
}
Animación CSS tipo máquina de escribir
5. Rendimiento y accesibilidad
- Propiedades animables: Prioriza
transformyopacityporque se ejecutan en la GPU y evitan re‑flow/re‑paint. - Reduce la duración: Mantén
animation-durationbajo 200 ms para micro‑interacciones, y usaprefers-reduced-motionpara respetar la preferencia del usuario.@media (prefers-reduced-motion: reduce) { * { animation: none !important; transition: none !important; } } - Hardware acceleration: Añade
will-change: transform, opacity;al elemento para indicar al navegador que se animará. - Herramientas de profiling: Usa Chrome DevTools → Performance → Screenshots para detectar “jank” y ajustar la duración o la complejidad.
6. Compatibilidad y fallback
Los navegadores modernos soportan @keyframes sin prefijos. Para compatibilidad con versiones antiguas (IE 10‑11) se recomienda:
@-webkit-keyframes spin { to { -webkit-transform: rotate(360deg); } }
@keyframes spin { to { transform: rotate(360deg); } }
.loader {
-webkit-animation: spin 0.8s linear infinite;
animation: spin 0.8s linear infinite;
}
7. Buenas prácticas y checklist
- Define siempre un
animation-durationyanimation-timing-functionexplícitos. - Limita el número de animaciones simultáneas a 2‑3 para evitar sobrecarga de GPU.
- Usa variables CSS (
--anim-duration) para centralizar cambios de tiempo. - Documenta cada
@keyframescon comentarios que describan su intención. - Incluye la regla
prefers-reduced-motionpara accesibilidad. - Realiza pruebas en dispositivos móviles y en navegadores de bajo rendimiento.
Animaciones CSS: Conceptos, Ejemplos Prácticos y Mejores Prácticas