Scrollytelling Web Design: A Sequence, Not a Scroll Trick
6 min read
scrollytellingweb designaccessibility

Two scroll pages land on your desk the same week. One is a parallax showreel that wins the client pitch in the room and gets forgotten by the next scroll; the other reads cleanly with every animation switched off, and its motion, when it runs, actually carries the story forward. Only one of them is scrollytelling, and the difference is the whole answer: scrollytelling web design works when you treat scroll as an input to a sequence of meaningful states, not as a trigger for a flashy effect. Design the story first, decide what each scene says and why it belongs, and make the page read as plain static content before any motion exists. A scroll story that respects the reader’s intent and motion preferences beats spectacle every time.
The other page, the one that won the room, is a scroll trick wearing the costume. It is the version you quietly redesign a year from now, once the novelty has worn off and the analytics show people scrolling straight past it.
A sequence of states, not a bag of effects
The word scrollytelling gets attached to any page that moves when you scroll, which is why so much of it is forgettable. The useful definition is narrower. A scroll story is a sequence of states, and scroll position is the control that moves you between them. Scene one establishes something. Scene two changes it. Scene three pays it off. If you cannot say what each scene is for in a single sentence, the motion is decoration, and decoration is the first thing a reader tunes out.
That framing also tells you when to stop adding. A scene exists to advance understanding. If an effect does not change what the reader knows or feels, it is a scroll trick, and scroll tricks are exactly what people mean when they call a site “too much.”
Write the story before you animate
The strongest scroll pages survive with the animation turned off. That is not luck. It is the design constraint that makes them good. Start with the content in document order: headings, paragraphs, images, in the sequence you want them understood. Read it top to bottom as a plain page. If the argument does not land in static text, no amount of parallax will save it, and you will spend your whole budget animating a story that was never there.
Only once the static version reads well do you layer motion on top, scene by scene, as an enhancement. This order pays off in a way that has nothing to do with taste. The plain page is what search engines, screen readers, and unsupported browsers get, and it is what you fall back to when the fancy layer cannot run. Build it last and it is an afterthought. Build it first and it is your foundation.
The new capability, and why it is not a baseline yet
There is genuinely new ground to talk about this year. CSS scroll-driven animations shipped in Chrome 115 in July, which means you can now link an animation’s progress to scroll without a JavaScript loop running on every frame. As MDN describes it, these animations tie progress to a scroll container’s position or to an element’s visibility as it crosses the viewport. That is the sequence-of-states idea expressed directly in CSS, which is a real step up from hand-wiring scroll listeners.
The catch, in late 2023, is support. This is a recent, Chrome-first feature, not something every visitor’s browser understands yet. The honest way to use it is as an enhancement with a readable non-animated fallback, never as a requirement. Build the page so a browser without scroll-driven animations still shows the content and makes sense. Then, where the feature is available, let it upgrade the experience. Betting the whole page on a feature most browsers do not have yet is how you ship something that looks broken to half your audience.
Keep scroll behavior predictable
Readers have a strong mental model of what scrolling does: it moves the page at the speed they push it. The fastest way to lose them is to break that model with scroll-jacking, where the page hijacks the wheel and decides how far you go. Direct response keeps trust. Scroll a little, a little happens. Scroll a lot, the scene advances further. Nothing lurches on its own, and nobody has to fight the page to get past it.
Performance is part of predictability. The web.dev guide to Cumulative Layout Shift draws a useful line between expected movement, which the reader caused, and unexpected movement, which the reader did not. A scroll story should be all expected movement. The same guide recommends animating with the CSS transform property to move or scale elements, because transforms do not trigger the layout recalculations that positional or sizing properties cause. In plain terms: move things with transforms so the rest of the page does not jump around them and hand the reader a lurch they never asked for.
Respect the reader’s motion preferences
Some people find large or unexpected motion genuinely unpleasant, and for some it is an accessibility problem, not a matter of taste. The prefers-reduced-motion media query exists so a visitor can tell the browser they want non-essential motion minimized, and you can read that preference in CSS. The CLS guide makes the same point from the accessibility side and advises respecting it.
Honoring it is not a token gesture bolted on at the end. When reduced motion is requested, serve the static sequence: the same scenes, the same copy, the same images, without the animated transitions. Because you built the readable static page first, that fallback already exists. You are just choosing to show it, which is the whole reward for doing the work in the right order.
The checklist that separates a story from a trick
Before you ship, ask five plain questions. Can a reader understand the story with animation off? Does every scene have a job you can state in one line? Does scrolling respond directly, with no hijacking? Are you animating transforms rather than layout properties? Is there a reduced-motion version that keeps the meaning? Five yeses mean you have a scroll story. A single no sends you back to the sequence before you add another effect, because the extra effect is not the fix. The story is.
That is the real difference between the two pages on your desk. One was designed as a sequence and then dressed in motion. The other was designed as motion and hoped a story would show up. Readers can tell which is which, even when they could never name it.
FAQ
What is scrollytelling in web design? It is a page where scroll position drives a sequence of meaningful states: as you scroll, scenes advance and the story develops. The key word is sequence. Good scrollytelling has scenes that each do a job, not effects added for their own sake.
Do I need JavaScript for scroll animation now? Not always. CSS scroll-driven animations shipped in Chrome 115 in July 2023 and can link animation progress to scroll without a per-frame JavaScript loop. Support is still Chrome-first, though, so treat it as an enhancement and keep a fallback for browsers that do not have it.
How do I make a scroll story accessible?
Build a readable static version first, keep scroll behavior direct instead of hijacked, animate with transforms to avoid layout shifts, and honor prefers-reduced-motion by serving the static sequence when a visitor asks for reduced motion.
Why does my scroll page feel janky? Common causes are animating layout-affecting properties instead of transforms, running heavy work on every scroll frame, and hijacking the scroll so movement no longer matches input. Move with transforms, keep per-frame work light, and let the reader keep control of the pace.
