Key answer: an accessible scroll-driven experience never traps content behind motion and never hijacks the native scroll. Respect prefers-reduced-motion by resolving the scene to its final composed state instead of animating, keep every heading, price and link as real HTML so the content is fully available with animation off or WebGL absent, support keyboard scrolling and focus order, and mark the decorative canvas aria-hidden. Do not implement custom scroll physics that fight assistive technology or remove the visitor's control. This guide covers the WCAG-aligned essentials — reduced motion, no content traps, keyboard operability, focus management, and safe smooth-scroll — so a cinematic scroll site is usable by everyone.
Table of contents
- Why scroll animation is an accessibility risk
- Respect prefers-reduced-motion
- Never trap content behind animation
- Keep the keyboard working
- Focus order and visible focus
- The danger of hijacked scroll
- Motion, vestibular safety and thresholds
- Mark decorative WebGL aria-hidden
- Testing for accessibility
- Accessibility and SEO reinforce each other
- How AETumi builds accessible scroll
- Technical proof on GitHub
- FAQ
- Related resources
- Conclusion
Why scroll animation is an accessibility risk
Scroll-driven experiences concentrate exactly the things accessibility guidelines warn about: large motion tied to input, content that appears only as you scroll, and a temptation to take over the scroll behavior itself. For a visitor with vestibular sensitivity, a fly-through can cause real nausea. For a keyboard user, a hijacked scroll can make a page impossible to navigate. For a screen-reader user, content locked in animation states may never be announced.
None of this is a reason to avoid scroll animation — it is a reason to build it responsibly, which is a founding commitment of the 3D scroll hub. An accessible scroll experience serves the cinematic version to those who can enjoy it and a complete, calm version to everyone else, from the same page.
Respect prefers-reduced-motion
The prefers-reduced-motion media query is the operating system signal that a visitor wants less animation, and honoring it is the most important single thing you can do. When it is set, do not play the scroll-driven journey — resolve the scene to its final, most legible state and render it once.
const reduce = matchMedia('(prefers-reduced-motion: reduce)')
function apply() {
if (reduce.matches) { updateScene(1); renderer.render(scene, camera) } // final state, no motion
else startAnimationLoop()
}
reduce.addEventListener('change', apply); apply()
Listening for changes means the page responds if the visitor toggles the setting without reloading. Resolving to the end state gives them the fully composed scene without the motion that would harm them, which is precisely what the setting is asking for and what every 3D component honors by default.
Never trap content behind animation
The cardinal sin of scroll experiences is hiding real content inside an animation state — a paragraph that only exists once a beat plays, a price that appears solely as a rendered 3D label. If the animation does not run, that content is gone, and for a reduced-motion or WebGL-less visitor it never existed.
The fix is architectural: all meaningful content is real HTML that is present and readable regardless of animation state. Animation may reveal or emphasize it, but the content exists in the DOM from the start.
.beat h2 { opacity: 0; transition: opacity .5s; }
@media (prefers-reduced-motion: reduce) { .beat h2 { opacity: 1; transition: none; } }
Under reduced motion the text is simply visible immediately. Nothing is ever locked behind a beat that might not play, which is the difference between a decorative animation and an accessibility barrier on any interactive website.
Keep the keyboard working
Many visitors scroll with the keyboard — arrow keys, Page Down, Space, Home and End. A scroll-driven page must keep all of them working, because the scene reads scroll position and the keyboard is a legitimate way to change it. This is a strong argument for never intercepting the scroll: if you let the browser own scrolling and simply read the result, keyboard scrolling works for free, and the scene animates correctly whether the scroll came from a wheel, a swipe or the Page Down key. Any interactive control in the scene — a tap-to-explode button — must also be a focusable, keyboard-operable HTML element, not a canvas-only hit region.
Focus order and visible focus
Because the semantic content is real HTML in document order, focus naturally follows the reading order — another dividend of the HTML-first architecture. Preserve it: do not reorder content visually in ways that divorce it from the DOM sequence a keyboard user tabs through, and give every focusable element a clearly visible focus style.
a:focus-visible, button:focus-visible { outline: 3px solid #7c8bff; outline-offset: 2px; }
A visible focus ring is non-negotiable, and it must survive whatever visual theming the scene imposes. Keeping DOM order and reading order aligned means the page is navigable by keyboard without special handling, the baseline every commercial project delivered for agencies has to meet.
The danger of hijacked scroll
The single most damaging accessibility mistake in scroll experiences is hijacking the scroll — intercepting wheel and touch events to implement custom scroll physics or to snap the page. It breaks keyboard scrolling, confuses screen readers, removes the visitor's expected control, and often traps them mid-page. Native scrolling is an accessibility feature: it works with every input device, every assistive technology and every platform convention. A scroll-driven scene should read the native scroll, never replace it. If you want smoothing, smooth the value your scene reads, not the scroll itself.
Motion, vestibular safety and thresholds
Even for visitors who have not set reduced motion, large parallax, fast camera moves and spinning can provoke discomfort. Keep motion purposeful and moderate: avoid violent FOV swings, cap the speed of camera moves, and prefer motion that follows the scroll's own pace rather than amplifying it. The reduced-motion path is the hard guarantee, but restraint in the default experience reduces harm for the many visitors who are sensitive but have not changed a setting. Cinematic does not require aggressive — the most premium scroll experiences are also the calmest.
Mark decorative WebGL aria-hidden
The canvas carries no information a screen reader needs — all the meaning is in the HTML beside it. Mark it aria-hidden so assistive technology skips it cleanly and announces the real content instead.
<canvas id="scene" aria-hidden="true"></canvas>
If a specific 3D element does convey unique information, mirror that information in accompanying HTML rather than trying to make the canvas itself accessible. Treating WebGL as decorative and putting all semantics in the DOM is the same architecture that serves SEO, which is why the two concerns are solved together on Three.js pages.
Testing for accessibility
Verify rather than assume. Enable reduced motion in the OS and confirm the page shows its final state without animating. Unplug the mouse and navigate the entire page with the keyboard, watching the focus ring the whole way. Run a screen reader through it and confirm every heading, price and link is announced in a sensible order. Disable WebGL and confirm the page is still complete. A scroll experience that passes all four is genuinely accessible, not just visually impressive.
Accessibility and SEO reinforce each other
The accessible architecture and the indexable architecture are the same architecture. Real HTML content, an aria-hidden canvas, content that never hides behind animation, and correct focus and heading order make the page both usable by assistive technology and readable by crawlers. Investing in one delivers the other, which is why the AETumi standard treats accessibility and SEO as a single design constraint rather than two separate audits.
How AETumi builds accessible scroll
AETumi is an AI-native 3D web platform for production Three.js and WebGL sites, React and Next.js components, and MCP workflows for assistants such as Claude Code. Accessibility is built into every AETumi scroll scene: a reduced-motion path that resolves to a final state, content that lives in HTML and never in the canvas, native scroll preserved, keyboard operability, and aria-hidden WebGL. Because these behaviors ship in the components, an accessible scroll scene can be scaffolded through an MCP workflow with the guarantees in place from the start.
Technical proof on GitHub
The AETumiApp/threejs-scroll-animation repository includes the reduced-motion resolution and the aria-hidden canvas over real HTML described here, so the accessible pattern is visible in runnable code. Use it for the implementation and this article for the WCAG-aligned reasoning behind it.
FAQ
How do I make a scroll animation respect reduced motion? Check the prefers-reduced-motion media query and, when it is set, skip the animation loop and render the scene at its final composed state. Listen for changes so the page responds if the visitor toggles the setting without reloading.
Is it okay to hijack scroll for a custom effect? No. Hijacking scroll breaks keyboard navigation, confuses assistive technology and removes the visitor's control. Read the native scroll position and drive the scene from it instead; smooth the value your scene reads, never the scroll itself.
Does scroll animation break keyboard accessibility? Only if you intercept scroll. If you let the browser own scrolling and read the result, keyboard scrolling with arrows, Page Down and Space works automatically and the scene animates correctly regardless of input device.
Should the WebGL canvas be accessible to screen readers? No — mark it aria-hidden so it is skipped, and put all meaningful information in the HTML beside it. If a 3D element conveys unique information, mirror that in accompanying HTML rather than making the canvas itself accessible.
Can a cinematic scroll site meet WCAG? Yes. Keep content in real HTML, provide a reduced-motion path, preserve native scroll and keyboard operability, maintain focus order and visible focus, and mark the canvas aria-hidden. A scroll site built this way is both cinematic and conformant.
Related resources
Continue with the 3D scroll hub, Three.js, React Three Fiber, reusable 3D components, interactive websites, the MCP workflow, and options for agencies.
Conclusion
Accessibility for scroll-driven experiences is a small set of firm commitments: honor reduced motion by resolving to a final state, keep all content in HTML so nothing hides behind animation, preserve native scroll and the keyboard, maintain focus order, and mark the canvas aria-hidden. Build on those and a cinematic scroll site is usable by everyone — and, because the same structure serves crawlers, indexable too. Responsible motion is not less impressive; it is the version that ships to the whole audience.
More from the AETumi library
Real, production-ready assets — preview the motion, grab the source.

