← Back to all briefs
CSS50s read

CSS Scroll-Driven Animations Are Now Baseline, No JS Required

Scroll-driven animations achieved Baseline status in 2026, meaning they're available in all major browsers. Parallax, scroll-triggered reveals, and progress-linked animations now work with pure CSS, no JavaScript, no IntersectionObserver, no animation libraries.

CSS Scroll-Driven Animations are now Baseline, supported across Chrome, Firefox, and Safari. This means a whole category of JavaScript animation libraries is now replaceable with a few lines of CSS.

The two types

Scroll Progress Timeline

Link animation progress directly to scroll position:

@keyframes fade-in {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}

.hero-image {
  animation: fade-in linear;
  animation-timeline: scroll();
  animation-range: entry 0% entry 100%;
}

The image fades in as it scrolls into view. No IntersectionObserver. No JavaScript.

View Progress Timeline

Trigger animations based on an element's visibility in the viewport:

.reveal {
  animation: reveal linear both;
  animation-timeline: view();
  animation-range: entry 10% cover 30%;
}

What this replaces

Browser support

Feature Chrome Firefox Safari
scroll() timeline ✅ 115+ ✅ 130+ ✅ 17.4+
view() timeline ✅ 115+ ✅ 130+ ✅ 17.4+
animation-range ✅ 115+ ✅ 130+ ✅ 17.4+

Progressive enhancement

Wrap scroll-driven animations in @supports:

@supports (animation-timeline: scroll()) {
  .parallax { animation-timeline: scroll(); }
}

Browsers that don't support it fall back to static positioning. No broken layouts.

The bottom line

Scroll-driven animations are the biggest CSS animation upgrade since CSS animations themselves. They're now safe to use in production, with fallbacks. If you're still importing a scroll animation library, it's time to check whether pure CSS can replace it.

CSS50s read

CSS Anchor Positioning Lands in All Major Browsers

Position tooltips, popovers, and dropdowns relative to any anchor element , without a single line of JavaScript. Native anchor positioning replaces a decade of third-party positioning libraries.

1 source