Chrome 156 Can Pause a GIF With One CSS Line: What It Changes for WCAG 2.2.2 and the EAA
Chrome 156 hits stable on October 20, 2026 shipping image-animation and the :animated-image pseudo-class — the first native way to pause a GIF without JavaScript. What it means for WCAG 2.2.2 Pause, Stop, Hide, the European Accessibility Act enforcement wave, and the @supports CSS to ship now while Safari and Firefox lag.
Chrome 156 Can Pause a GIF With One CSS Line: What It Changes for WCAG 2.2.2 and the EAA
Chrome 156 lands in stable on October 20, 2026 with image-animation — the first CSS property that pauses an animated image without JavaScript, without touching the server, and without changing the file format. If you run accessibility audits, this matters: WCAG 2.2.2 "Pause, Stop, Hide" (Level A) has been flagging sites with animated GIFs for years, and the technical excuse of "there is no way to pause a GIF" stops existing in Chrome on October 20. If you care about performance, it matters too: the same browser that tells you to stop serving 4 MB GIFs now hands you the control to keep small animations without punishing the user.
This is not a framework revolution. It is a small platform piece that solves an old problem, and — like sizes="auto" or text-wrap: balance — whoever discovers it late collects the crumbs.
What exactly shipped in Chrome 156
Chrome 156 implements the CSS Image Animation Module Level 1 (W3C First Public Working Draft, April 9, 2026, edited by Florian Rivoal). It ships two pieces:
| Piece | What it does | Values / behavior |
|---|---|---|
image-animation | Controls whether an animated image plays | normal (default, synchronized with other instances of the same file), stopped (renders as static: cover frame or first frame), paused (freezes on the current frame), running (plays on its own per-element timeline, out of sync) |
:animated-image | Matches img elements that loaded an actually animated image | The format alone is not enough — the image must really be animated. Lets you build controls only where they are needed |
Details that matter when you implement:
- It inherits. You can write
:root { image-animation: paused }and pause the whole document through inheritance, then handnormalorrunningback to theimgelements that should animate. This is exactly the pattern the specification itself proposes forprefers-reduced-motion. - It applies to content and decorative images:
img(including insidepicture), backgrounds, border images, and images injected viacontent. When an element carries several images, the computed value affects all of them. - It does not apply to
<video>or<canvas>, nor to programmatic images. This is image control, not general media control. normalsynchronizes all instances of the same file;runningbreaks that synchronization per element. Toggling betweenpausedandrunningresumes from the current frame and detaches from the group; returning tonormalre-groups it.
Why this lands right on WCAG 2.2.2
Success criterion 2.2.2 "Pause, Stop, Hide" (Level A) requires: when content starts automatically, lasts more than five seconds, and is presented in parallel with other content, there must be a mechanism for the user to pause, stop, or hide it. A product GIF looping in a carousel, an animated promo banner, a reaction sticker in a feed — all of them fall under it.
The historical problem was that a GIF could not be paused. There was no attribute, no property, no event. The only real workarounds were fragile:
| Previous strategy | What breaks in production |
|---|---|
Serving a static frame (.jpg of frame one) | The animation is gone entirely; it is a content decision the user never made, not a user control |
GIF wrapped in a <div> with a JS overlay that hides it | The download and decode still happen; the user pays the bytes anyway; the overlay usually fails keyboard and screen reader paths |
Replacing it with <video> with controls | It is Google's performance recommendation, but it changes markup, format, and the editorial workflow; it does not work for stickers, replies, or third-party embeds |
| Trusting the OS "reduce motion" setting | No media query paused GIFs before Chrome 156: prefers-reduced-motion only governed CSS/WAAPI animations |
With image-animation: paused plus a visible control (your own button, or the hover/focus play pattern the specification enables via :animated-image), the 2.2.2 mechanism genuinely exists: the user decides, the animation stops or starts, and no JavaScript is needed to hold the state.
One nuance worth keeping: the criterion requires the mechanism to be operable, not merely present in CSS. Pausing everything through prefers-reduced-motion without offering a control does not satisfy 2.2.2 — it satisfies 2.3.3, which is AAA. The correct pattern is to pause by default when the user asked for it, and always offer a visible play/pause for everyone else.
The pressure underneath: the EAA is already auditing
This update does not land in a regulatory vacuum. The European Accessibility Act has been enforceable since June 2025 and surveillance has normalized: the Dutch authority ACM showed in early 2026 that 61% of online shops failed accessibility requirements, and Italy (AgID) gives 90 days to remediate before daily fines start accumulating without a cap. There is also a recent technical twist that stops 2.2.2 from being "a WCAG 2.1 criterion, we'll look at it later": version v4.1.1 of EN 301 549, published on September 2, 2026, adopts WCAG 2.2 Level AA as the technical reference. In practice: audit against 2.1 today, build against 2.2 — we broke down the whole EN 301 549 to WCAG 2.2 migration.
In our EAA audits, the animated-image pattern always shows up in the same places: product galleries, home banners, and embedded social content. It is one of the few findings that used to require structural surgery (changing the format) and now closes with a declaration inside a support block. In the EAA non-compliance audit we published, the expensive findings were architectural; the cheap ones were interface. This one just moved from expensive to cheap.
What to ship on October 20 (and what to wait for)
Honesty first: Chrome 156 is the only implementation. Safari and Firefox do not have it, and the specification is not even a consolidated draft. In a real market, the strategy is dual: progressive enhancement with @supports, format fallback with video.
/* 1. Progressive layer: only browsers that understand the property */
@supports (image-animation: paused) {
/* Pause decorative images through inheritance, keep intentional content animating */
:root { image-animation: stopped; }
.intentional-gif { image-animation: normal; }
/* Reduced motion: pause, but the user can still play */
@media (prefers-reduced-motion: reduce) {
:root { image-animation: paused; }
img:animated-image { cursor: pointer; }
}
}
/* 2. Fallback for Safari/Firefox: the existing JS overlay, or better,
serve the cover frame and animate only under interaction */
.intentional-gif { image-animation: normal; }
Before touching CSS, take the inventory. In every audit we run, this resolves the same way:
| Question | If the answer is... | Action |
|---|---|---|
| Does the GIF run longer than 5 seconds alongside other content? | Yes | Falls under 2.2.2: pause by default or provide an obligatory control |
| Does it weigh more than ~150 KB? | Yes | Convert to MP4/animated WebP and use <video> — image-animation is not an excuse to keep serving heavy GIFs (video embedding performance playbook) |
| Is it decorative (effect, sticker, background)? | Yes | stopped under prefers-reduced-motion, control optional |
| Is it editorial animated content (product, demo)? | Yes | normal plus a visible play/pause built on :animated-image |
| Do you sell into the EU? | Yes | Log it in your accessibility statement and your 2.2 matrix |
And one observation on timing: do not wait for Interop to solve cross-browser availability for you. The module just shipped as a First Public Working Draft; the cycle to three implementations is measured in years, not months. Meanwhile, the difference between a site that pauses GIFs in Chrome and one that does not is exactly the kind of finding an auditor writes into a report — and accessibility reports are showing up more often in procurement processes.
What is still your job
image-animation fixes none of this by itself:
- Heavy GIFs still weigh the same. Pausing a 4 MB GIF still downloads 4 MB. The format plan (video for animations longer than a few seconds, animated WebP for short ones) remains correct and remains performance, not accessibility. In our analysis of the LCP trap with image formats we measured how image format decides LCP before any CSS does.
- CSS animations do not belong here.
animation-play-statealready existed and remains the control for keyframes.image-animationis for animated files — a gap that sat unsolved for twenty years. - Autoplay
<video>still needs its own mechanism — controls or explicit pause. This module does not touch it. - Synchronization matters in galleries: five instances of the same sticker in a feed share a timeline under
normal. If your design depends on them starting together, account for that when toggling values.
The bottom line
Chrome 156 turns a twenty-year-old problem — "there is no way to pause a GIF" — into a one-line declaration, and it does so exactly when Europe starts scrutinizing online stores. It will not change your architecture. It will change what an auditor writes in the findings column, and that column now carries dates, fines, and remediation windows. On October 20, when stable updates, the question in your audits stops being "does this site have a mechanism to pause the GIF?" and becomes "why not, if it is one line?"
Frequently Asked Questions
What is the CSS image-animation property?
image-animation is a CSS property (normal | paused | stopped | running) that controls playback of animated images such as GIF, APNG, or animated WebP. It first shipped in Chrome 156 (stable on October 20, 2026) alongside the :animated-image pseudo-class, which matches img elements that loaded an actually animated image. It does not affect <video> or <canvas>.
Does image-animation satisfy WCAG 2.2.2 Pause, Stop, Hide?
For animation served as an image, yes — and it is the first native solution that has ever existed: there was previously no way to pause a GIF with CSS or HTML. WCAG 2.2.2 (Level A) requires a mechanism for users to pause, stop, or hide content that starts automatically, lasts more than five seconds, and is presented in parallel with other content. The criterion still requires the mechanism to be user-visible and operable, so you must put a UI control on top of image-animation: paused.
Do Safari and Firefox support image-animation yet?
No. CSS Image Animation Module Level 1 is a W3C First Public Working Draft from April 9, 2026, and Chrome 156 is its first implementation. Safari and Firefox have announced no dates. Ship the property inside an @supports (image-animation: paused) block and keep your fallback (convert the GIF to <video> or serve a static frame) until cross-browser support exists.



