Параметр useStickyClasses в библиотеке Stickybits
отвечает за автоматическое управление CSS-классами в зависимости от
текущего состояния «прилипающего» элемента. Эта опция позволяет
отказаться от ручного отслеживания состояний и реализовать визуальные
изменения через стили, а не через JavaScript.
По умолчанию Stickybits добавляет и удаляет классы, отражающие
поведение элемента при прокрутке. Включение
useStickyClasses делает это поведение явным и
управляемым.
Stickybits отслеживает три ключевых состояния элемента:
При активной опции useStickyClasses библиотека
автоматически переключает CSS-классы, соответствующие этим
состояниям.
stickybits('.element', {
useStickyClasses: true
});
Если опция не указана, поведение классов может отличаться в зависимости от версии библиотеки, но рекомендуется всегда явно задавать её для предсказуемости.
При использовании useStickyClasses Stickybits управляет
следующими классами:
.js-is-stickyДобавляется, когда элемент входит в состояние «липкого».
Условия:
Пример использования:
.js-is-sticky {
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15);
}
.js-is-stuckДобавляется, когда элемент достигает нижней границы родительского контейнера.
Условия:
Пример:
.js-is-stuck {
opacity: 0.7;
}
.js-is-sticky и .js-is-stuck вместеВ некоторых сценариях возможна кратковременная комбинация состояний, особенно при пересчёте позиций. Однако в нормальной логике они взаимно исключают друг друга.
useStickyClassesЕсли опция отключена:
Sticky-состояние часто используется для изменения визуального восприятия интерфейса:
.header {
transition: all 0.3s ease;
}
.header.js-is-sticky {
background-color: white;
height: 60px;
}
.sidebar {
transform: translateY(0);
}
.sidebar.js-is-sticky {
transform: translateY(10px);
}
.button {
position: relative;
}
.button.js-is-sticky {
position: fixed;
bottom: 20px;
}
Stickybits позволяет изменить стандартные имена классов через дополнительные настройки:
stickybits('.element', {
useStickyClasses: true,
stickyClass: 'is-sticky',
stuckClass: 'is-stuck'
});
Это удобно при использовании BEM или других методологий именования:
.block--sticky {
border-bottom: 2px solid #000;
}
.block--stuck {
opacity: 0.5;
}
position: stickyStickybits может работать как полифилл для
position: sticky, но при наличии нативной поддержки
браузера:
Это делает useStickyClasses особенно полезным даже в
современных браузерах.
Использование useStickyClasses:
Для диагностики поведения удобно временно добавить стили:
.js-is-sticky {
outline: 2px solid green;
}
.js-is-stuck {
outline: 2px solid red;
}
Это позволяет визуально отслеживать переходы между состояниями.
Если родительский контейнер не ограничивает высоту:
.js-is-stuck никогда не наступаетЕсли вручную добавляются классы с теми же именами:
.element {
background: blue;
}
.js-is-sticky {
background: red;
}
Если .element имеет более высокий приоритет, изменения
не применятся. Решение — повысить специфичность:
.element.js-is-sticky {
background: red;
}
useStickyClasses часто используется вместе с:
offsetПозволяет смещать момент «прилипания»:
stickybits('.element', {
useStickyClasses: true,
stickyBitStickyOffset: 20
});
verticalPositionУправляет направлением:
stickybits('.element', {
useStickyClasses: true,
verticalPosition: 'bottom'
});
stickybits('.item', {
useStickyClasses: true
});
Каждый элемент получает собственные классы независимо.
Классы можно использовать как триггеры:
.js-is-sticky {
animation: fadeIn 0.3s ease;
}
При вложенных контейнерах Stickybits корректно переключает классы, если:
useStickyClasses при работе с
визуальными эффектамиoverflow: hidden и
overflow: autoStickybits отслеживает:
При изменении состояния:
Это происходит в обработчике прокрутки с оптимизациями (throttling), что делает механизм достаточно эффективным.
useStickyClasses позволяет легко адаптировать поведение
под разные экраны:
@media (max-width: 768px) {
.js-is-sticky {
position: static;
}
}
Таким образом можно отключать или менять поведение sticky-элементов без изменения JavaScript-кода.