Contents
Introducción a las animaciones web
Las animaciones en la web son un recurso fundamental para mejorar la experiencia de usuario, guiar la atención y dotar de dinamismo a nuestro sitio. Con CSS y JavaScript podemos construir movimientos suaves, transiciones fluidas y efectos interactivos que refuercen la usabilidad y el diseño. En este artículo, desgranaremos desde los conceptos básicos hasta técnicas avanzadas, pasando por buenas prácticas de rendimiento y ejemplos prácticos.
1. Fundamentos de las animaciones CSS
1.1 Transiciones vs. Keyframes
Transiciones permiten animar cambios de propiedades en un elemento al ocurrir un evento (por ejemplo, :hover). Son sencillas de implementar pero limitadas a dos estados: inicio y fin.
Animaciones con @keyframes definen etapas intermedias, dando control completo sobre la secuencia de movimientos.
1.2 Propiedades principales
| Propiedad | Descripción |
|---|---|
transition-property |
Determina qué propiedad(es) cambiarán. |
transition-duration |
Especifica la duración de la transición. |
animation-name |
Nombre de la animación definida en @keyframes. |
animation-duration |
Tiempo total de reproducción. |
animation-timing-function |
Función de aceleración (ease, linear, cubic-bezier, etc.). |
animation-iteration-count |
Número de veces que se repite (infinito, número). |
1.3 Ejemplo práctico: un botón que crece al pasar el ratón
2. Animaciones avanzadas con @keyframes
2.1 Definición de keyframes
Utilizamos @keyframes nombreDeAnimación para indicar las etapas de la animación. Ejemplo de un rebote:
@keyframes rebote {
0% { transform: translateY(0) }
25% { transform: translateY(-20px) }
50% { transform: translateY(0) }
75% { transform: translateY(-10px) }
100% { transform: translateY(0) }
}
Y lo aplicamos al elemento:
.elemento-rebote {
animation-name:rebote
animation-duration:1s
animation-iteration-count:infinite
animation-timing-function:ease-in-out
}
2.2 Control de relleno y dirección
- animation-fill-mode: mantiene el estado inicial o final fuera de la animación.
- animation-direction: alternar la dirección (
normal,reverse,alternate).
3. Animaciones con JavaScript
3.1 requestAnimationFrame
Para animaciones que requieren sincronización al refresco de la pantalla, window.requestAnimationFrame(callback) es la API nativa más eficiente. Ejemplo:
let posY = 0
function moverElemento() {
posY = 2
elemento.style.transform = translateY({posY}px)
if (posY < 200) {
window.requestAnimationFrame(moverElemento)
}
}
moverElemento()
3.2 Bibliotecas especializadas
- Anime.js: sintaxis ligera para animaciones complejas.
- GSAP (GreenSock): rendimiento optimizado y gran comunidad.
4. Buenas prácticas y rendimiento
- Animar transform y opacity en lugar de propiedades que desencadenan reflow (width, height, margin).
- Hardware acceleration: fuerza la aceleración GPU con
transform: translateZ(0)owill-change. - Minimizar layers: demasiados elementos animados a la vez pueden saturar la GPU.
- Debounce y throttle en scroll o resize para no lanzar animaciones excesivas.
5. Accesibilidad y usabilidad
Recuerda permitir desactivar animaciones intensas para usuarios con sensibilidad a movimientos (prefers-reduced-motion en CSS). Ejemplo:
@media (prefers-reduced-motion: reduce) {
{
animation-duration: 0.001s !important
transition-duration: 0.001s !important
}
}
Conclusión
Dominar las animaciones en CSS y JavaScript potencia la interacción y la percepción de calidad de tu sitio web. Desde sencillas transiciones hasta secuencias complejas controladas por librerías, siempre ten en cuenta el rendimiento y la accesibilidad. Para profundizar, consulta la documentación de MDN Web Docs y las guías de W3C CSS Animations.
|
|
Acepto donaciones de BAT's mediante el navegador Brave 🙂 |
