What is Scroll Timeline Axis?
The scroll-timeline-axis CSS property defines which physical direction of scrolling is used to drive a scroll-based animation timeline. This property gives developers precise control over scroll-driven animations without JavaScript.
Key Points:
- Specifies which scrollbar (vertical or horizontal) drives animation progress
- Works with
scroll-timeline-nameto create complete scroll progress timelines - Enables declarative, CSS-only scroll-linked animations
- Runs on the compositor thread for smooth performance
Before the introduction of CSS scroll-driven animations, developers had to rely heavily on JavaScript event listeners to detect scroll position and manually update animation states. The scroll-timeline properties emerged as part of the CSS Scroll-driven Animations specification to address these challenges by bringing scroll-linked animations into the realm of native CSS capabilities. Chrome for Developers
Modern web development increasingly embraces these CSS-native approaches to create performant, accessible user experiences. By leveraging the compositor thread for scroll-driven animations, developers can achieve smooth 60fps animations even on lower-powered devices, reducing the need for complex JavaScript-based solutions. Our web development services team specializes in implementing these modern CSS capabilities for optimal performance.
Four axis values control scroll direction
block (Default)
Axis along which block-level elements are placed. For horizontal writing modes, this means vertical scrolling (up/down). Adapts to writing mode.
inline
Axis along which inline content flows. For horizontal writing modes, this means horizontal scrolling (left/right). Perpendicular to block axis.
x
Explicit horizontal axis. Always refers to left/right scrolling regardless of writing mode. Useful for consistent cross-language behavior.
y
Explicit vertical axis. Always refers to up/down scrolling regardless of writing mode. Ensures vertical tracking in all contexts.
1/* Syntax */2scroll-timeline-axis: block | inline | x | y;3 4/* Examples */5.container {6 /* Vertical scroll (default) */7 scroll-timeline-axis: block;8}9 10.horizontal-gallery {11 /* Horizontal scroll */12 scroll-timeline-axis: inline;13 /* or */14 scroll-timeline-axis: x;15}16 17/* Shorthand with scroll-timeline */18.scroller {19 scroll-timeline: --my-timeline block;20}How Scroll Timeline Axis Works
The Three-Component System
- Named Timeline:
scroll-timeline-namecreates a referenceable timeline - Axis Specification:
scroll-timeline-axisselects which scroll direction to track - Animation Attachment:
animation-timelineconnects elements to the timeline
Key Requirements
- The scroll container must overflow in the specified axis direction
- If
overflow: hiddenor no scrollable content exists, no timeline progresses - Works with writing modes:
blockandinlineadapt to text direction
When you apply scroll-timeline-name to a scroll container, you create a named timeline that the browser can reference. The scroll-timeline-axis then specifies which scrollbar within that container should provide the progress values. The timeline advances from 0% to 100% as the user scrolls from the start to the end of the scrollable area along the specified axis. MDN Web Docs
The combination of these properties creates a powerful declarative system for scroll-linked animations. This approach aligns with modern web development best practices that emphasize CSS-first solutions, reducing JavaScript bundle sizes and improving initial page load performance. Our AI automation services can help integrate these modern CSS capabilities with intelligent features for next-generation user experiences.
Scrollable Container Example:
.scroller {
scroll-timeline-name: --section-scroll;
scroll-timeline-axis: block;
overflow-y: auto; /* Must have vertical overflow */
}
.animated-element {
animation: fade-in linear both;
animation-timeline: --section-scroll;
}
Progressive Reveal
Elements fade in, slide, or transform as users scroll down the page. Use `block` axis for vertical scrolling.
Horizontal Carousels
Gallery animations respond to swipe gestures. Use `inline` or `x` axis for horizontal tracking.
Progress Indicators
Reading progress bars update as users move through content. Track vertical scroll position.
Parallax Effects
Foreground and background layers move at different speeds. Create depth with scroll-linked transforms.
Sticky Headers
Headers that expand, contract, or change style based on scroll position without JavaScript.
Scroll-Linked Stories
Scrollytelling experiences where animation timing matches user scrolling pace.
Browser Support and Compatibility
Current Support Status
| Browser | Support |
|---|---|
| Chrome | Full support |
| Edge | Full support |
| Safari | Supported (check versions) |
| Firefox | In development |
Chrome and Edge provide full support for scroll-timeline-axis, having implemented the scroll-driven animations specification as part of their ongoing commitment to modern CSS capabilities. Safari has also added support, though with some version-specific considerations that developers should verify. Firefox has announced plans for implementation but currently requires configuration flags for testing. MDN Web Docs
Progressive Enhancement Pattern
.animated-element {
/* Base styles for all browsers */
opacity: 1;
transform: translateY(0);
}
/* Enhanced for supporting browsers */
@supports (scroll-timeline-axis: block) {
.animated-element {
opacity: 0;
transform: translateY(20px);
animation: fade-in linear both;
animation-timeline: --scroll-progress;
animation-range: entry 25% cover 50%;
}
}
Accessibility Note
Always provide reduced motion alternatives:
@media (prefers-reduced-motion: reduce) {
.animated-element {
animation: none;
opacity: 1;
}
}
Implementing scroll-driven animations with proper fallback support ensures your site remains accessible to all users while providing enhanced experiences for those with supporting browsers. This progressive enhancement approach is a hallmark of our web development methodology, prioritizing both performance and inclusivity.
Best Practices & Common Pitfalls
Container has no scroll - animation not working
The scroll container must have overflow content in the specified axis. Verify overflow settings and content size.
Wrong axis selected
Double-check that your axis value matches the actual scroll direction. Use `x` or `y` for explicit physical directions.
Animation plays too quickly
Use `animation-range` to control timing. Values like `entry 25% cover 75%` create longer animation windows.
Performance issues
Limit animations to `transform` and `opacity` only. These properties run on the compositor thread for smooth scrolling.
Mobile behavior differs
Test with both wheel and touch scrolling. Consider `prefers-reduced-motion` for accessibility.
Writing mode compatibility
Use `block`/`inline` for writing-mode adaptive behavior, or `x`/`y` for consistent physical directions.
CSS Scroll-Timeline
The complete scroll-timeline property for creating named scroll progress timelines.
Animation-Timeline
Attach animations to scroll timelines for scroll-linked behavior.
Scroll-Driven Animations
Overview of CSS scroll-driven animations specification and capabilities.
Animation Range
Control when animations play during the scroll with animation-range.
Sources
- MDN Web Docs: scroll-timeline-axis - Primary source for syntax and formal definition
- CSS Portal: scroll-timeline-axis - Reference for property values and examples
- Chrome Developers: Scroll-driven Animations - Axis configuration guidance