Chrome 156 puede pausar un GIF con una línea de CSS: lo que esto cambia para WCAG 2.2.2 y la EAA
Chrome 156 llega a stable el 20 de octubre de 2026 con la propiedad image-animation y el pseudo-clase :animated-image: la primera forma nativa de pausar un GIF sin JavaScript. Explicamos qué implica para el criterio WCAG 2.2.2 (Pausar, detener, ocultar), la presión de la European Accessibility Act y qué CSS enviar hoy con @supports mientras Safari y Firefox no lo implementan.
Chrome 156 puede pausar un GIF con una línea de CSS: lo que esto cambia para WCAG 2.2.2 y la EAA
Chrome 156 llega a stable el 20 de octubre de 2026 y trae consigo image-animation, la primera propiedad CSS que pausa una imagen animada sin JavaScript, sin tocar el servidor y sin cambiar el formato del archivo. Si auditas accesibilidad, esto importa porque el criterio WCAG 2.2.2 "Pausar, detener, ocultar" (nivel A) lleva años marcando como incumplidos a los sitios con GIF animados — y la excusa técnica de "no se puede pausar un GIF" deja de existir en Chrome el 20 de octubre. Si auditas rendimiento, también: el mismo navegador que te obliga a dejar de servir GIFs de 4 MB ahora te da el control para mantener animaciones pequeñas sin castigar al usuario.
No es una revolución de framework. Es una pieza pequeña del platform que resuelve un problema viejo, y como pasa con sizes="auto" o text-wrap: balance, quien la descubra tarde se lleva las migajas.
Qué llegó exactamente a Chrome 156
Chrome 156 implementa el módulo CSS Image Animation Module Level 1 (First Public Working Draft del W3C, 9 de abril de 2026, editado por Florian Rivoal). Trae dos piezas:
| Pieza | Qué hace | Valores / comportamiento |
|---|---|---|
image-animation | Controla si una imagen animada corre o no | normal (por defecto, sincronizado con otras instancias del mismo archivo), stopped (se muestra como estática: cover frame o primer fotograma), paused (congela en el fotograma actual), running (reproduce con timeline propia, sin sincronizar) |
:animated-image | Identifica los img que cargaron una imagen realmente animada | No basta con que el formato admita animación: la imagen debe estar animada de verdad. Permite construir controles solo donde hacen falta |
Detalles que importan al implementar:
- Se hereda. Puedes escribir
:root { image-animation: paused }y pausar todo el documento por herencia, luego devolvernormalorunninga losimgque sí deban animarse. Es exactamente el patrón que la propia especificación propone paraprefers-reduced-motion. - Aplica a imágenes de contenido y decorativas:
img(incluido dentro depicture), fondos, bordes e imágenes inyectadas porcontent. Si un elemento tiene varias imágenes, el valor computado afecta a todas. - No aplica a
<video>ni a<canvas>, ni a imágenes programáticas. Es control de imágenes, no de media general. normalsincroniza todas las instancias del mismo archivo;runningrompe esa sincronía a nivel de elemento. Si alternas entrepausedyrunning, la animación continúa desde donde estaba y pierde el grupo; volver anormalla re-agrupa.
Por qué esto aterriza justo en WCAG 2.2.2
El criterio 2.2.2 "Pausar, detener, ocultar" (nivel A) exige: si el contenido arranca automáticamente, dura más de cinco segundos y se presenta en paralelo con otro contenido, debe existir un mecanismo para que el usuario lo pause, detenga u oculte. Un GIF de producto en bucle, un banner promocional animado, un sticker reaccional en un feed: todos caen ahí.
El problema histórico era que un GIF no se podía pausar. No existía atributo, propiedad ni evento. Las únicas salidas reales eran frágiles:
| Estrategia previa | Problema en producción |
|---|---|
Servir un fotograma estático (.jpg del primer frame) | Pierdes la animación por completo; decisión irreversible de contenido, no del usuario |
GIF envuelto en un <div> con overlay JS que lo oculta | No pausa la descarga ni la decodificación; el usuario sigue pagando los bytes; el overlay suele fallar con teclado y lector de pantalla |
Reemplazar por <video> con controles | Es la recomendación de rendimiento de Google, pero cambia el markup, el formato y el flujo editorial; no sirve para stickers, respuestas o contenido incrustado de terceros |
| Confiar en "reduced motion" del sistema | No hay media query que pause GIFs antes de Chrome 156: prefers-reduced-motion solo controlaba animaciones CSS/WAAPI |
Con image-animation: paused más un control visible (botón propio o el enfoque/hover que la especificación permite construir con :animated-image), el mecanismo de 2.2.2 existe de verdad: el usuario decide, la animación se detiene o arranca, y no hace falta JavaScript para sostener el estado.
Matiz que no conviene saltarse: el criterio pide que el mecanismo sea operable, no que exista solo en el CSS. Pausar todo por prefers-reduced-motion sin ofrecer control no cumple 2.2.2 — cumple 2.3.3 (que es AAA). Lo correcto es pausar por defecto cuando el usuario lo pidió, y siempre ofrecer un play/pause visible para el resto.
La presión de fondo: la EAA ya está auditando
Este update no cae en un vacío regulatorio. La European Accessibility Act es exigible desde junio de 2025 y la vigilancia se ha normalizado: la autoridad neerlandesa ACM mostró a inicios de 2026 que el 61% de las tiendas online no cumplía los requisitos de accesibilidad, e Italia (AgID) da 90 días para corregir antes de activar multas diarias sin tope. Y hay un giro técnico reciente que hace que 2.2.2 deje de ser "criterio de WCAG 2.1, lo miramos luego": la versión v4.1.1 de EN 301 549, publicada el 2 de septiembre de 2026, adopta WCAG 2.2 a nivel AA como referencia técnica. En la práctica, audita contra 2.1 hoy y construye contra 2.2 — te contamos el desglose completo en el análisis de la migración EN 301 549 a WCAG 2.2.
En nuestras auditorías EAA el patrón de imagen animada aparece siempre en el mismo sitio: galerías de producto, banners de home y contenido incrustado de redes. Es de los pocos hallazgos que antes requería cirugía estructural (cambiar el formato) y ahora se cierra con una declaración CSS dentro de un bloque de soporte. En la auditoría de incumplimiento EAA que publicamos los hallazgos caros eran los de arquitectura; los baratos eran los de interfaz. Esto pasó de caro a barato.
Qué enviar el 20 de octubre (y qué esperar)
Honestidad primero: Chrome 156 es la única implementación. Safari y Firefox no lo tienen, y la especificación ni siquiera es una draft consolidada. En un mercado real, la estrategia es doble: capa progresiva con @supports, plan B con formato de video.
/* 1. Capa progresiva: solo los navegadores que entienden la propiedad */
@supports (image-animation: paused) {
/* Pausa decorativas por herencia, respeta contenido animado intencional */
:root { image-animation: stopped; }
.gif-intencional { image-animation: normal; }
/* Reduced motion: pausa, pero el usuario puede reproducir */
@media (prefers-reduced-motion: reduce) {
:root { image-animation: paused; }
img:animated-image { cursor: pointer; }
}
}
/* 2. Plan B para Safari/Firefox: el overlay JS existente, o mejor,
servir cover frame y animar solo bajo interacción */
.gif-intencional { image-animation: normal; }
Antes de tocar el CSS, haz el inventario. En cada auditoría que hacemos esto se resuelve igual:
| Pregunta | Si la respuesta es... | Acción |
|---|---|---|
| ¿El GIF dura más de 5 segundos y se ve en paralelo con el contenido? | Sí | Entra en 2.2.2: pausa por defecto o control obligatorio |
| ¿Pesa más de ~150 KB? | Sí | Convertir a MP4/WebP animado y usar <video> — image-animation no es excusa para seguir sirviendo GIFs pesados (guía de rendimiento de video e incrustaciones) |
| ¿Es decorativo (efecto, sticker, fondo)? | Sí | stopped bajo prefers-reduced-motion, control opcional |
| ¿Es contenido editorial animado (producto, demo)? | Sí | normal + play/pause visible construido con :animated-image |
| ¿Vendes en la UE? | Sí | Regístralo en la declaración de accesibilidad y en tu matriz 2.2 |
Y una observación sobre el calendario: no esperes a que Interop resuelva la disponibilidad cruzada por ti. El módulo acaba de salir como FPWD; el ciclo hasta tres implementaciones se mide en años, no en meses. Mientras tanto, la diferencia entre un sitio que pausa GIFs en Chrome y uno que no es exactamente el tipo de hallazgo que un auditor anota en un informe — y los informes de accesibilidad son cada vez más frecuentes en los procesos de compra.
Lo que sí sigue siendo trabajo tuyo
image-animation no arregla nada de esto solo:
- Los GIFs pesados siguen pesando. Pausar un GIF de 4 MB descarga igual 4 MB. El plan de formato (video para animaciones de más de unos segundos, WebP animado para las cortas) sigue siendo el correcto y sigue siendo rendimiento, no accesibilidad. En nuestro análisis de la trampa del LCP con imágenes medimos cómo el formato de imagen decide el LCP antes que cualquier CSS.
- Las animaciones CSS no entran aquí.
animation-play-stateya existía y sigue siendo el control de keyframes.image-animationes para archivos animados, un hueco que llevaba veinte años sin solución. - Los
<video>autoplay siguen necesitando su propio mecanismo — controles o pausa explícita. Este módulo no los toca. - La sincronía importa en galerías: cinco instancias del mismo sticker en un feed comparten timeline con
normal. Si tu diseño depende de que arranquen juntas, tenlo en cuenta al alternar valores.
La línea de fondo
Chrome 156 convierte un problema de veinte años — "no se puede pausar un GIF" — en una declaración de una línea, y lo hace justo cuando Europa empieza a mirar las tiendas online con lupa. No va a cambiar tu arquitectura. Va a cambiar lo que un auditor escribe en la columna de hallazgos, y esa columna hoy tiene fechas, multas y ventanas de corrección. El 20 de octubre, cuando stable se actualice, la pregunta en tus auditorías deja de ser "¿tiene el sitio mecanismo para pausar el GIF?" y pasa a ser "¿por qué no lo tiene, si es una línea?".
Preguntas Frecuentes
¿Qué es la propiedad CSS image-animation?
image-animation es una propiedad CSS (normal | paused | stopped | running) que controla la reproducción de imágenes animadas como GIF, APNG o WebP animado. Se envió por primera vez en Chrome 156 (stable el 20 de octubre de 2026) junto con el pseudo-clase :animated-image, que identifica los elementos img que cargaron una imagen realmente animada. No afecta a <video> ni a <canvas>.
¿image-animation resuelve el criterio WCAG 2.2.2 Pausar, detener, ocultar?
Para contenido animado servido como imagen, sí, y es la primera vez que existe una solución nativa: antes no se podía pausar un GIF con CSS ni con HTML. WCAG 2.2.2 (nivel A) exige un mecanismo para pausar, detener u ocultar contenido que arranca solo, dura más de cinco segundos y se presenta en paralelo con otro contenido. El criterio sigue exigiendo que el mecanismo sea visible y operable por el usuario, así que hay que añadir un control de interfaz encima de image-animation: paused.
¿Safari y Firefox ya soportan image-animation?
No. La especificación CSS Image Animation Module Level 1 es un First Public Working Draft del 9 de abril de 2026 y Chrome 156 es su primera implementación. Safari y Firefox no han anunciado fecha. Envía la propiedad dentro de un bloque @supports (image-animation: paused) y conserva el plan B (convertir el GIF a <video> o servir un fotograma estático) mientras no haya disponibilidad cruzada.



