Headroom.js — это легковесная библиотека для управления поведением заголовков и навигационных панелей при прокрутке страницы. Основная задача — скрытие и отображение элементов интерфейса в зависимости от направления скролла и скорости прокрутки. Для корректной работы библиотеки крайне важен правильный критический CSS, обеспечивающий мгновенное визуальное поведение элементов при загрузке страницы и предотвращающий “рывки” или мерцания.
Для начала необходимо подключить Headroom.js через
<script> или через пакетный менеджер (npm/yarn).
После подключения библиотека требует инициализации на выбранном
элементе:
var header = document.querySelector("header");
var headroom = new Headroom(header, {
tolerance: {
up: 5,
down: 0
},
offset: 100,
classes: {
initial: "headroom",
pinned: "headroom--pinned",
unpinned: "headroom--unpinned",
top: "headroom--top",
notTop: "headroom--not-top",
bottom: "headroom--bottom",
notBottom: "headroom--not-bottom"
}
});
headroom.init();
Ключевые моменты:
tolerance регулирует чувствительность к прокрутке.offset определяет минимальное расстояние прокрутки
перед активацией анимации.classes задаёт CSS-классы для разных состояний:
закреплён, скрыт, в верхней позиции и т.д.Критический CSS — это минимальный набор стилей, который необходим для корректного отображения заголовка до загрузки всех остальных стилей. Для Headroom.js критический CSS обеспечивает:
Пример критического CSS:
header.headroom {
position: fixed;
top: 0;
left: 0;
right: 0;
height: 60px;
background-color: #fff;
z-index: 1000;
transition: transform 0.25s ease-in-out;
will-change: transform;
}
.headroom--unpinned {
transform: translateY(-100%);
}
.headroom--pinned {
transform: translateY(0);
}
.headroom--top {
box-shadow: none;
}
.headroom--not-top {
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
Пояснения к ключевым свойствам:
position: fixed фиксирует заголовок, чтобы он оставался
видимым или скрытым независимо от прокрутки.transition управляет плавностью движения.will-change: transform подсказывает браузеру о
предстоящей трансформации, оптимизируя производительность.headroom--pinned и
headroom--unpinned управляют видимостью через
transform.Для корректного поведения на мобильных устройствах важно учитывать:
height), чтобы он не
перекрывал контент.transition) — слишком медленные
анимации вызывают лаги на слабых устройствах.Пример адаптивного критического CSS:
@media (max-width: 768px) {
header.headroom {
height: 50px;
}
}
Если страница использует ленивую загрузку контента или CSS, важно
внедрить критический CSS прямо в <head>:
<style>
/* Вставка критического CSS для Headroom.js */
header.headroom { ... }
.headroom--unpinned { ... }
.headroom--pinned { ... }
</style>
Это гарантирует, что визуальное поведение заголовка не нарушится до полной загрузки основного CSS.
transform: translateY вместо
top или margin-top снижает нагрузку на
рендеринг и делает анимацию более плавной.will-change помогает браузеру оптимизировать
графический слой заранее.transform, opacity) для анимаций.Эта методика позволяет создать заголовок, который мгновенно реагирует на прокрутку, остаётся плавным и стабильно отображается даже при медленной загрузке страницы. Оптимизация критического CSS обеспечивает идеальное взаимодействие Headroom.js с любым современным интерфейсом.