Библиотека AOS (Animate on Scroll) активно
применяется для создания плавных анимаций элементов при скролле
страницы. Несмотря на простоту интеграции, одна из часто встречающихся
проблем — конфликты с уровнем наложения элементов, то
есть некорректное поведение z-index.
z-indexНеявное наследование Элементы с анимацией AOS
могут находиться внутри контейнеров с уже установленными
z-index. Если родитель имеет
position: relative или position: absolute и
высокий z-index, дочерний элемент с анимацией может
отображаться под другими блоками, даже если у него
выставлен высокий z-index.
Автоматическое добавление стилей AOS AOS при
активации анимации добавляет классы .aos-animate и
inline-стили для управления transform и opacity. Трансформация через CSS
(transform: translate, scale,
rotate) создает новый контекст наложения,
что может изменить порядок отображения по сравнению с соседними
элементами.
Сочетание position и
z-index Для корректной работы z-index
элемент должен иметь position отличный от
static. Если анимируемый элемент не имеет
position: relative|absolute|fixed|sticky, его
z-index игнорируется.
1. Проверка контекста наложения Необходимо
определить, у каких родительских блоков задан z-index и
position. Элементы с анимацией могут оказаться в новом
stacking context из-за родителя или CSS-трансформаций:
.container {
position: relative;
z-index: 1;
}
.animated-element {
position: relative;
z-index: 10;
}
2. Установка position и z-index на
самом анимируемом элементе Для элементов с AOS лучше явно
указывать:
[data-aos] {
position: relative;
z-index: 5;
}
Это гарантирует, что элемент появится поверх фона и соседних блоков с
меньшими значениями z-index.
3. Учет transform и opacity Любые CSS-трансформации
(transform, opacity) создают новый stacking
context. Это означает, что даже высокий z-index может не
помочь:
/* Проблема */
.aos-fade-up {
transform: translateY(20px);
z-index: 100; /* может не сработать, если родитель создал stacking context */
}
Решение — поднять z-index родительского
контейнера, либо вынести анимируемый элемент в отдельный
контейнер с необходимым контекстом.
4. Использование AOS с абсолютным позиционированием для overlay Если анимация должна появляться поверх всех блоков (например, всплывающие уведомления):
.overlay-animation {
position: absolute;
top: 0;
left: 0;
width: 100%;
z-index: 9999;
}
AOS будет управлять только transform и opacity, не мешая уровню наложения.
Ошибка: элемент внутри
overflow: hidden контейнера. Последствие:
часть анимации обрезается, z-index не поможет, поскольку
контейнер ограничивает видимость.
Ошибка: использование z-index без
position. Последствие: браузер игнорирует
значение z-index, элемент может скрываться под соседними
блоками.
Ошибка: смешение fixed и relative элементов с разными stacking context. Последствие: анимация может визуально «прятаться» за другими слоями при скролле.
z-index.z-index родителя.position: fixed с максимальным z-index.Правильное понимание работы z-index и stacking context при использовании AOS позволяет избежать большинства проблем с видимостью анимируемых блоков и обеспечивает стабильное воспроизведение эффектов на всех уровнях страницы.