Библиотека AOS (Animate On Scroll) опирается на заранее определённую систему CSS-классов, которые динамически добавляются и удаляются в процессе прокрутки страницы. Эти классы управляют состояниями элементов, их анимациями и переходами.
Основная идея — разделение состояния элемента на до появления в зоне видимости и после появления, с возможностью настройки промежуточных эффектов через модификаторы.
.aos-initПрисваивается элементу сразу после инициализации AOS.
Назначение:
Особенности:
data-aosopacity,
transform)Пример:
.aos-init {
opacity: 0;
transition-property: transform, opacity;
}
.aos-animateДобавляется, когда элемент попадает в область видимости (viewport).
Назначение:
Пример:
.aos-animate {
opacity: 1;
transform: translate(0, 0);
}
Механика работы:
.aos-init.aos-animateAOS использует атрибут data-aos, который определяет тип
анимации. Под каждый тип генерируется соответствующий CSS-селектор.
<div data-aos="fade-up"></div>
Соответствующий CSS:
[data-aos="fade-up"] {
transform: translateY(100px);
}
[data-aos="fade-up"].aos-animate {
transform: translateY(0);
}
[data-aos="fade"] {
opacity: 0;
}
[data-aos="fade"].aos-animate {
opacity: 1;
}
[data-aos="fade-up"] {
opacity: 0;
transform: translateY(40px);
}
[data-aos="fade-up"].aos-animate {
opacity: 1;
transform: translateY(0);
}
[data-aos="fade-down"] {
opacity: 0;
transform: translateY(-40px);
}
[data-aos="fade-down"].aos-animate {
opacity: 1;
transform: translateY(0);
}
[data-aos="zoom-in"] {
opacity: 0;
transform: scale(0.6);
}
[data-aos="zoom-in"].aos-animate {
opacity: 1;
transform: scale(1);
}
[data-aos="slide-left"] {
transform: translateX(100px);
}
[data-aos="slide-left"].aos-animate {
transform: translateX(0);
}
AOS активно использует дополнительные атрибуты, которые влияют на CSS через селекторы.
data-aos-durationУправляет длительностью анимации.
[data-aos][data-aos-duration="1000"] {
transition-duration: 1s;
}
data-aos-delayДобавляет задержку перед началом анимации.
[data-aos][data-aos-delay="300"] {
transition-delay: 0.3s;
}
data-aos-easingОпределяет функцию плавности.
[data-aos][data-aos-easing="ease-in-out"] {
transition-timing-function: ease-in-out;
}
data-aos-anchor-placementВлияет на момент срабатывания анимации, но косвенно может участвовать в CSS-логике через кастомные стили.
body[data-aos-easing],
body[data-aos-duration]AOS может применять глобальные настройки через body,
которые затем наследуются элементами.
Пример:
body[data-aos-duration="800"] [data-aos] {
transition-duration: 0.8s;
}
Система классов AOS полностью расширяема. Можно переопределять любые значения:
[data-aos="fade-up"] {
transform: translateY(200px);
opacity: 0;
}
[data-aos="fade-up"].aos-animate {
transform: translateY(0);
opacity: 1;
}
Возможна более сложная логика с использованием вложенных селекторов:
.section .card[data-aos="zoom-in"] {
transform: scale(0.8);
}
.section .card[data-aos="zoom-in"].aos-animate {
transform: scale(1);
}
Анимации могут адаптироваться под разные устройства:
@media (max-width: 768px) {
[data-aos="fade-up"] {
transform: translateY(20px);
}
}
Для гибкой настройки:
[data-aos] {
--aos-distance: 50px;
transform: translateY(var(--aos-distance));
}
[data-aos].aos-animate {
transform: translateY(0);
}
Ключевые рекомендации при работе с классами:
transform вместо
top/leftbox-shadow,
filter)Пример оптимального класса:
[data-aos] {
will-change: transform, opacity;
}
Можно создавать собственные анимации, добавляя новые значения
data-aos.
Пример:
<div data-aos="flip-x"></div>
[data-aos="flip-x"] {
transform: rotateX(90deg);
opacity: 0;
}
[data-aos="flip-x"].aos-animate {
transform: rotateX(0);
opacity: 1;
}
Классы .aos-init и .aos-animate управляются
библиотекой автоматически, но при необходимости можно вмешиваться:
document.querySelector('.element').classList.add('aos-animate');
Элемент получает:
data-aos="animation".aos-initВ CSS задаётся:
[data-aos="..."]).aos-animate)При скролле:
.aos-animateСистема классов AOS строится по принципу:
атрибут → базовый стиль → модификатор состояния → переход
[data-aos="type"] → .aos-init → .aos-animate
Такой подход делает архитектуру:
Благодаря тому, что вся анимация реализуется через CSS-классы:
.list-item:nth-child(1) { transition-delay: 0.1s; }
.list-item:nth-child(2) { transition-delay: 0.2s; }
.list-item:nth-child(3) { transition-delay: 0.3s; }
AOS может повторно применять .aos-animate, если включён
once: false. CSS-классы остаются теми же, но поведение
меняется.
.card.active[data-aos="fade-up"].aos-animate {
transform: translateY(0) scale(1.05);
}
Часто используется следующая организация CSS:
/* Базовые состояния */
[data-aos] { ... }
/* Типы анимаций */
[data-aos="fade-up"] { ... }
/* Активное состояние */
.aos-animate { ... }
/* Модификаторы */
[data-aos-duration] { ... }
[data-aos-delay] { ... }
Такая структура делает код масштабируемым и удобным для поддержки при большом количестве анимированных элементов.