Headroom.js — это библиотека для управления видимостью элементов при прокрутке страницы, чаще всего используется для динамических шапок (header). При работе с ней важную роль играет корректная настройка z-index, чтобы элемент оставался на видимом слое и не перекрывался другими блоками страницы.
Для того чтобы z-index заработал, элемент должен
иметь позиционирование, отличное от
static. Наиболее часто используются:
position: relative;
position: absolute;
position: fixed;
position: sticky;
Headroom.js по умолчанию добавляет элементу класс
headroom, который закрепляет шапку в верхней части страницы
при прокрутке. Чтобы управление слоем работало корректно, рекомендуется
явно задать position: fixed и z-index в
CSS:
.headroom {
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 1000;
}
Ключевой момент: если родительский элемент имеет
z-index и позиционирование, это создаёт новый контекст
наложения. Любые дочерние элементы будут ограничены этим контекстом, что
может мешать корректной работе Headroom.js.
Headroom.js динамически добавляет следующие классы:
headroom--pinned — элемент видим, «закреплён»
вверху.headroom--unpinned — элемент скрыт при прокрутке
вниз.headroom--top — элемент находится в начале
страницы.headroom--not-top — элемент покинул верхнюю границу
страницы.Эти классы можно использовать для изменения z-index в зависимости от состояния шапки. Например, если есть модальное окно, которое должно перекрывать шапку при открытии:
.headroom--pinned {
z-index: 1000;
}
.modal {
z-index: 1050;
}
Это гарантирует, что модальное окно всегда будет выше динамической шапки.
При работе с Headroom.js часто встречаются ситуации, когда шапка теряется за другими блоками. Основные причины:
auto).Решение: выносить шапку в отдельный слой на уровне body
или назначать z-index выше всех потенциальных перекрывающих
элементов.
<body>
<header class="headroom"></header>
<main>
<div class="content"></div>
</main>
</body>
.headroom {
position: fixed;
top: 0;
left: 0;
width: 100%;
z-index: 1000; /* выше большинства элементов */
}
В сложных интерфейсах с множеством слоёв (navbars,
modals, popups) важно выстраивать
иерархию z-index. Рекомендуется использовать переменные
или систематическую схему:
:root {
--z-base: 10;
--z-header: 1000;
--z-modal: 1050;
--z-tooltip: 1100;
}
.headroom {
z-index: var(--z-header);
}
.modal {
z-index: var(--z-modal);
}
.tooltip {
z-index: var(--z-tooltip);
}
Такой подход предотвращает случайное перекрытие динамической шапки другими слоями.
Headroom.js использует CSS-трансформации для скрытия и отображения шапки. Часто применяются:
.headroom--unpinned {
transform: translateY(-100%);
transition: transform 0.3s ease-in-out;
}
.headroom--pinned {
transform: translateY(0%);
transition: transform 0.3s ease-in-out;
}
Если элемент находится внутри блока с transform, это
изменяет контекст наложения, и z-index может перестать
работать ожидаемо. В таких случаях нужно либо убрать transform у
родителя, либо поднять шапку на отдельный слой.
Правильная организация z-index обеспечивает стабильную работу Headroom.js даже на страницах с множеством слоёв и динамических элементов.