Scroll-driven анимации уже в Chrome и Safari — это не экспериментальная фича, а рабочий инструмент для production. Вместо подключения тяжёлого ScrollTrigger для простых эффектов вроде параллакса на hero‑секции или прогресс‑бара чтения статьи, хватит двух свойств. Частая ошибка — сразу тащить JS для анимаций, которые браузер может сделать сам, быстрее и без дёрганий.
Как работает animation‑timeline
Привяжи keyframes к прокрутке через
scroll(). Браузер сам сопоставляет позицию скролла с ключевыми кадрами. Никаких слушателей scroll, никаких расчётов процентов. Пример — параллакс фона:.parallax-element {
animation: parallax linear;
animation-timeline: scroll(root block);
}
@keyframes parallax {
from { transform: translateY(0); }
to { transform: translateY(-30%); }
}scroll(root block) — вертикальная ось, корневой контейнер. Если нужно ограничить скроллируемым блоком, используй nearest.Progress‑бар и анимации при входе
Progress‑бар на чистом CSS: никаких вычислений, просто
scaleX от 0 до 1..progress-bar {
height: 4px;
background: linear-gradient(90deg, #4facfe, #00f2fe);
transform-origin: 0 50%;
animation: grow linear;
animation-timeline: scroll(root block);
}
@keyframes grow {
from { transform: scaleX(0); }
to { transform: scaleX(1); }
}Для анимаций при появлении —
view(). Элемент плавно выезжает, когда допрокрутили до него:.reveal {
animation: fade-in linear;
animation-timeline: view();
animation-range: entry 0% entry 100%;
}
@keyframes fade-in {
from { opacity: 0; transform: scale(0.8); }
to { opacity: 1; transform: scale(1); }
}animation‑range задаёт момент старта и конца (entry, exit, cover). Не злоупотребляй — каждая анимация на блоке может просадить FPS, несмотря на нативность.Поддержка и fallback
Chrome 115+, Safari 18+, Firefox в процессе. Обязательно оборачивай в
@supports:@supports (animation-timeline: scroll()) {
.parallax {
animation: parallax linear;
animation-timeline: scroll(root block);
}
}Тогда в старых браузерах эффект исчезнет, но вёрстка не сломается. На iOS с
position: fixed или внутри iframe возможны дёрганья — тестируй на реальных устройствах, а не только в DevTools.Trade‑offs
Минус: нельзя гибко контролировать скорость или easing, как в ScrollTrigger. Анимация строго пропорциональна прокрутке. Для сложных параллаксов с curve это не подходит. Плюс: нулевой JS, встроенная производительность, предсказуемый layout без перекомпоновки.
Вывод: Scroll‑driven анимации — production‑готовый инструмент для лёгких параллаксов и прогресс‑баров, который заменяет ScrollTrigger без потери производительности и с явным fallback через
@supports.