Web Design and Engineering

WebGL o animaciones CSS: cuándo usar cada una (2026)

CSS anima transform y opacity fuera del hilo principal, gratis. WebGL te da la GPU en bruto. Aquí está la línea entre ambos, con los costes de bundle y batería.

7 de julio de 20266 min de lectura
Abstract 3D render with geometric shapes, pink cubes, and spheres.

La elección entre WebGL y una animación CSS se reduce a una pregunta: ¿el efecto necesita la GPU como motor de render de propósito general, o solo como compositor? Una animación CSS le pasa dos o tres propiedades al navegador y consigue 60fps casi gratis. Con WebGL coges la GPU en bruto y un lienzo vacío, y luego construyes tú la geometría, la iluminación y el bucle de render. La mayoría de las interfaces de producto nunca necesitan la segunda vía.

Esta decisión aparece en cada web de marketing y en cada panel con movimiento. Si te inclinas demasiado hacia WebGL, envías un bundle de 600KB y gastas batería por un fundido que el CSS hace en cuatro líneas. Si te inclinas demasiado hacia el CSS, pasas tres semanas peleando con el compositor para fingir un campo de partículas que WebGL dibuja sin esfuerzo. Así trazamos la línea.

La respuesta en 30 segundos: quién elige qué

Usa una animación CSS cuando el efecto mueve elementos del DOM que ya existen: fundidos, deslizamientos, escala al pasar el ratón, un spinner de carga, un menú que se abre, una tarjeta que se eleva. Si puedes expresar el movimiento como un cambio en transform y opacity, el CSS es la herramienta correcta y cualquier cosa más pesada sobra.

Usa WebGL cuando el efecto es el contenido, no un adorno encima del contenido: un configurador 3D de producto, un sistema de partículas con miles de puntos, un efecto de fluido o un shader, una visualización que anima 10.000 nodos, una escena alrededor de la que el usuario orbita. El DOM no puede representar estas cosas, así que la pregunta de si el CSS podría hacerlo ni siquiera surge.

Los casos interesantes están en medio. Ahí es donde la comparación sirve de verdad.

WebGL y animaciones CSS de un vistazo

AspectoAnimación CSSWebGL
Qué esMovimiento declarativo sobre elementos del DOMAPI de GPU de bajo nivel que dibuja en un lienzo
Ideal paraTransiciones de interfaz, microinteracciones3D, shaders, miles de objetos en movimiento
Modelo de rendimientoEl compositor anima transform y opacity fuera del hilo principalEl bucle de render lo llevas tú; nada es gratis
Peso extra del bundleCero (CSS nativo)Unos pocos KB en bruto, 150KB o más con Three.js
Hilo principalIntacto para transform y opacityEl setup y las draw call corren en JavaScript
AccesibilidadRespeta prefers-reduced-motion de forma nativaLa ruta reduced-motion la conectas tú
Batería en móvilBarataCara; las GPU se frenan bajo carga sostenida
Si no hay soporteEl elemento se queda quietoNecesita un fallback explícito sin WebGL

Dónde gana la animación CSS

En la GPU es gratis si te quedas en transform y opacity

El navegador acelera por hardware cualquier transición o keyframe sobre transform y opacity, porque esas dos propiedades no disparan ni layout ni repaint. Corren en el hilo del compositor, así que la animación sigue fluida incluso mientras tu JavaScript está ocupado. El equipo de render de Chrome lo documenta sin rodeos: una animación compuesta se salta el hilo principal por completo. MDN da la misma indicación para todo lo que es mayormente estático y se anima poco.

Degrada con seguridad

Una animación CSS que el dispositivo no puede seguir simplemente no se mueve. Sin fallo, sin lienzo en blanco, sin código de fallback que escribir. La envuelves en @media (prefers-reduced-motion: reduce) y respeta el ajuste de accesibilidad del usuario en tres líneas, sin una sola línea de JavaScript. Es un ahorro real en accesibilidad y mantenimiento.

Su modo de fallar es fácil de ver

La animación CSS se tuerce cuando animas las propiedades caras: width, height, top, left, margin. Cada una obliga al navegador a recalcular el layout en cada frame, y la tasa de frames se cae. La solución casi siempre es reescribir el efecto con transform. Y no tapes el tirón poniendo will-change en todo: cada elemento promovido se vuelve una textura en la memoria de la GPU, y el abuso crea una presión de memoria que expulsa texturas y provoca tirones durante interacciones sin relación. CSS-Tricks trata will-change como último recurso, acotado al momento justo antes de la animación y retirado después. Nosotros hacemos lo mismo.

Dónde gana WebGL

Volúmenes que el DOM no aguanta

Anima 5.000 nodos del DOM y el navegador se derrumba. Un benchmark cross-device de sistemas de animación web de 2025 encontró que WebGL mantenía las tasas de frames más estables entre 5.000 y 10.000 objetos, donde el DOM y el SVG se hunden mucho antes. Una GPU moderna dibuja decenas de miles de polígonos a 60fps. Si tu efecto es un enjambre, un campo o una malla, WebGL no es la opción pesada: es la única que funciona.

Efectos que solo existen en shaders

Simulación de fluidos, displacement, iluminación por píxel, profundidad de campo, ruido procedural: viven en los fragment shaders y no tienen equivalente en CSS. No los aproximas con transform y opacity, por muchos keyframes que apiles. Cuando el diseño pide uno de estos, la decisión ya está tomada.

El coste que aceptas

WebGL no es gratis. Three.js añade unos 150KB antes de dibujar un solo triángulo; usar el WebGLRenderer en bruto en vez de la librería completa recorta ese peso de forma notable. En móvil el impuesto real es el calor: las GPU se frenan por throttling térmico bajo carga sostenida, así que una escena que corre a 60fps los primeros segundos puede caer a 20fps tras 30. Muchas experiencias 3D en móvil limitan a 30fps a propósito para ahorrar batería, como señala la hoja de ruta de Three.js sobre el consumo en móvil. Presupuesta una ruta reduced-motion y una imagen estática de reserva para los dispositivos que no deberían ejecutar esa escena.

El punto medio que todos olvidan: Canvas 2D y SVG

WebGL y CSS son los dos extremos. Entre ellos hay dos herramientas, y saltárselas es el error más común que vemos. Canvas 2D maneja cientos de partículas o un patrón generativo sin tocar 3D ni shaders. SVG anima unas decenas de formas vectoriales con escalado nítido y acceso completo al DOM, así que puedes estilar e inspeccionar cada nodo. Cuando el efecto es más de lo que el CSS puede cargar pero menos que una escena 3D, la respuesta suele ser una de estas dos, y pesa menos que meter un render de WebGL. Explicamos dónde encaja cada librería en nuestro repaso del stack web inmersivo.

Qué usamos, y por qué

En un proyecto SaaS típico, cerca del 95% del movimiento es CSS: transform y opacity, guiados por el estado, respetando prefers-reduced-motion. Para el movimiento ligado al scroll elegimos una librería ligera en vez de un lienzo. Añadimos WebGL solo cuando la escena 3D o el shader son aquello por lo que vino el usuario, y cada vez lo enviamos detrás de una comprobación de reduced-motion y un fallback estático. La regla que mantenemos: el recurso más pesado que carga una página debe responder a algo que el visitante quería, no a un adorno de fondo. Si basta un fundido, gana el fundido. Si el producto es la escena 3D, pagamos el impuesto de WebGL a propósito y lo mantenemos fuera del hilo principal y fuera de la ruta crítica. Para el lado de métricas de este intercambio, mira nuestra guía para llevar los Core Web Vitals a verde en Next.js.

Foto de Brecht Corbeel en Unsplash

Preguntas frecuentes

¿Puede una animación CSS igualar a WebGL para un efecto de partículas de fondo?
Para unas decenas de partículas movidas con transform y opacity sí, y será más ligera y más segura. Pasados unos cientos de puntos en movimiento el DOM empieza a ahogarse, y conviene pasar a Canvas 2D o WebGL. El punto de ruptura no es exacto, pero si te ves creando cientos de nodos del DOM solo para animarlos, es la señal de que te has quedado sin CSS.
¿WebGL perjudica el SEO o los Core Web Vitals?
El contenido del lienzo es invisible para los rastreadores, así que una escena WebGL no aporta nada al texto indexable y nunca debería llevar información que un buscador necesite. Su bundle y el trabajo de setup pueden dañar LCP e INP si corren al cargar o bloquean el hilo principal. Carga la escena en lazy, aplázala bajo el pliegue y muestra primero una imagen estática, para que la experiencia interactiva no retrase el primer pintado.
¿WebGPU va a reemplazar a WebGL en 2026?
WebGPU ya está disponible en los navegadores actuales y es más eficiente en consumo, con cifras de hasta 10 veces más rendimiento en escenas con mucho cálculo y más batería en portátiles y móviles. WebGL sigue siendo la base segura para el soporte más amplio de dispositivos. La postura práctica para 2026 es usar WebGPU donde controlas la audiencia, con un fallback a WebGL, en vez de abandonar WebGL del todo.

Studio

Empieza un proyecto.

Un partner único para el producto digital que necesitas construir. Producción más rápida, tecnología moderna, costes reducidos. Un equipo, una factura.