Skip to content
JustTools

Scroll Animation Generator

Make elements fade, slide, zoom or wipe in as visitors scroll — with modern CSS scroll-driven animations, a tiny fallback for browsers that lack them, and respect for people who prefer less motion.

Runs in your browser Free · no sign-up

At a glance

  • 14 reveal effects — fades in four directions, slide, zoom, blur, flips, rotate and three wipes — plus parallax, a reading progress bar and a shrinking header.
  • Uses CSS scroll-driven animations (animation-timeline: view() and scroll() with animation-range), which run in Chrome and Edge 115+ and Safari 26+ without JavaScript.
  • Firefox only has scroll-driven animations in test builds so far, so an optional script of about 20 lines takes over there — IntersectionObserver for reveals, a scroll listener for the rest — and stops at once where CSS can do the job.
  • Or choose Plays once in view: a short transition when each element appears, with a delay, a stagger for elements that appear together, and an option to replay.
  • Every motion is wrapped in prefers-reduced-motion: no-preference, and elements are only hidden when something will reveal them, so content never disappears.
  • The generated CSS was checked with Lightning CSS, and the fallback scripts were run in tests; copy the CSS, the script, the HTML or a complete demo page.

Step by step

How to animate elements on scroll with CSS

  1. 1

    Choose what to animate

    Reveal elements as they scroll in, add Parallax, a Progress bar or a Shrinking header.

  2. 2

    Pick an effect

    Choose fade up, zoom, blur, a wipe or another effect, and adjust its distance, size, blur or angle.

  3. 3

    Choose how it plays

    Follows the scroll ties the animation to the scroll position; Plays once in view runs it once, with a duration, delay and stagger.

  4. 4

    Watch the preview

    Scroll inside the preview box, or press Replay. Change the range until it starts and finishes where you want.

  5. 5

    Add it to your page

    Copy the CSS, put the HTML tab’s head line in your <head>, add the class to your elements, and include the JavaScript if there is one.

Features

Everything you need, nothing you don’t

Modern CSS first

Scroll-driven animations follow the scroll position on the compositor, with no scroll listeners. The tool writes them with the correct order of animation and animation-timeline, which the shorthand otherwise resets.

Works everywhere

The fallback script switches itself on only in browsers that need it, and the line for the page head stops elements from flashing before it runs.

See it while you tweak it

Scroll the preview box to watch the effect. Browsers without scroll-driven animations see the fallback, just as your visitors would.

Exact control

Pick when the animation runs — while the element comes into view, until it reaches the middle, or the whole time it is on screen — or set the range by hand, and read it back in plain words.

Kind to everyone

People who ask their system to reduce motion see no movement, and nothing stays invisible if a script fails or is blocked.

No library

No AOS, GSAP or other dependency: plain CSS and, where needed, a few lines of JavaScript you can read.

What scroll-driven animations are

A normal CSS animation runs over time. A scroll-driven animation runs over a scroll distance instead: animation-timeline: view() ties it to the element’s journey through the screen, and animation-timeline: scroll() ties it to how far the whole page has scrolled. Scroll down and the animation moves forward; scroll back up and it moves back.

animation-range says which part of that journey the animation covers. entry 0% cover 40% starts as the element’s top edge appears at the bottom of the screen and finishes when it is 40% of the way through its time on screen.

The range names

RangeCovers the time when the element…
entrycomes into view at the bottom of the screen
exitleaves at the top of the screen
coveris at least partly on screen, from first to last pixel
containis completely on screen (or fills it, if it is taller than the screen)
entry-crossingcrosses the bottom edge of the screen
exit-crossingcrosses the top edge of the screen

Browser support

Figures from MDN’s browser compatibility data, October 2026.

BrowserScroll-driven animationsWhat the generated code does
Chrome and Edgesince version 115runs the CSS
Safari (macOS and iOS)since version 26runs the CSS
Firefoxtest builds onlyruns the fallback script
Older browsersnoruns the fallback script, or shows content without animation

FAQ

Frequently asked questions

Do scroll animations need JavaScript?

Not in Chrome, Edge and Safari 26 or later: animation-timeline does it in CSS. Firefox only has it in test builds, so the tool adds a short optional script that does the same job there. Plays once in view always uses a small script, because only Chrome 146 and later can start an animation on scroll with CSS alone (animation-trigger).

Why must animation-timeline come after the animation shorthand?

The animation shorthand resets every animation property it does not mention, including animation-timeline. Written before the shorthand, the timeline would be thrown away and the animation would run on the clock instead. The generated CSS always puts it after.

How do I make elements fade in on scroll?

Choose Reveal and the Fade up effect, copy the CSS, and add class="reveal" to the elements. For a scroll-linked version that is all you need in Chrome, Edge and Safari; add the script and the head line for other browsers.

Is this an alternative to AOS (Animate On Scroll)?

Yes. AOS is a JavaScript library that adds classes as elements come into view. This tool writes the same kind of effect as a few lines of CSS — plus about 20 lines of script where needed — with nothing to install.

What happens for people who prefer reduced motion?

All movement sits inside @media (prefers-reduced-motion: no-preference), so people who have asked their device to reduce motion see the content straight away with no animation. The reading progress bar still works, because it shows information rather than decoration.

Will hidden elements stay invisible if the script fails?

No. Elements are only hidden when the line in the page head has confirmed that the script will run, and in scroll-linked mode the hidden state exists only inside the animation itself. If anything fails, the content simply appears.

Can I animate several elements one after another?

Yes. With Plays once in view, set a Stagger: elements that come into view together start one after another. With Follows the scroll, each element already animates at its own position.

Are my settings saved?

Yes, in this browser’s local storage, so they are still there when you come back. Nothing is uploaded.

Keep going

Browse every tool

Last updated Report a problem or suggest a feature