Stickybits — это лёгкая JavaScript-библиотека, предназначенная для создания «липких» элементов на странице с минимальными зависимостями. Одной из ключевых задач при работе с липкими элементами является корректная адаптация их поведения под разные размеры экранов. Для этого активно используются media queries и breakpoints.
Stickybits позволяет задавать параметры, которые влияют на поведение
элемента, такие как stickyBitStickyOffset,
useStickyClasses и parentClass. Для реализации
адаптивного поведения используют проверку размеров экрана через
window.matchMedia.
Пример базовой интеграции с breakpoint:
if (window.matchMedia('(min-width: 1024px)').matches) {
stickybits('.sticky-element', { useStickyClasses: true, stickyBitStickyOffset: 20 });
} else {
stickybits('.sticky-element', { useStickyClasses: false });
}
В этом примере элемент будет вести себя как «липкий» только на экранах шириной от 1024 пикселей. На меньших экранах классические sticky-эффекты отключаются.
Для корректной работы при изменении размера окна важно использовать слушатели событий:
function initSticky() {
const isDesktop = window.matchMedia('(min-width: 1024px)').matches;
stickybits('.sticky-element', {
useStickyClasses: isDesktop,
stickyBitStickyOffset: isDesktop ? 20 : 0
});
}
window.addEventListener('resize', () => {
stickybits.cleanup('.sticky-element');
initSticky();
});
initSticky();
Метод stickybits.cleanup() удаляет все ранее применённые
эффекты, что позволяет переинициализировать элементы при смене
брейкпоинта.
Для более сложных интерфейсов удобно определять несколько брейкпоинтов:
const breakpoints = [
{ query: '(min-width: 1200px)', offset: 30 },
{ query: '(min-width: 768px) and (max-width: 1199px)', offset: 20 },
{ query: '(max-width: 767px)', offset: 10 }
];
function applyStickyByBreakpoint() {
breakpoints.forEach(bp => {
if (window.matchMedia(bp.query).matches) {
stickybits('.sticky-element', { stickyBitStickyOffset: bp.offset });
}
});
}
window.addEventListener('resize', () => {
stickybits.cleanup('.sticky-element');
applyStickyByBreakpoint();
});
applyStickyByBreakpoint();
Такой подход обеспечивает точное управление поведением липкого элемента на разных устройствах: от мобильных телефонов до больших мониторов.
Stickybits поддерживает динамическое добавление CSS-классов через
опцию useStickyClasses. Можно комбинировать media queries с
классами, чтобы изменять стили элемента в зависимости от текущего
брейкпоинта:
.sticky-element.sticky {
background-color: rgba(255, 255, 255, 0.9);
}
@media (max-width: 767px) {
.sticky-element.sticky {
background-color: rgba(255, 255, 255, 0.7);
}
}
JS-инициализация:
const isMobile = window.matchMedia('(max-width: 767px)').matches;
stickybits('.sticky-element', { useStickyClasses: true, stickyBitStickyOffset: isMobile ? 10 : 20 });
Если липкий элемент находится внутри контейнера, важно учитывать
parentClass. Stickybits позволяет задать родительский
элемент, чтобы ограничить зону липкости:
stickybits('.sticky-element', {
parentClass: '.container',
useStickyClasses: true,
stickyBitStickyOffset: 20
});
При изменении размера экрана и переходе между брейкпоинтами нужно заново вычислять родительские границы, чтобы элемент не выходил за пределы контейнера.
Оптимальная структура с breakpoints включает:
stickybits.cleanup() при resize.Такой подход позволяет создавать «липкие» элементы, которые ведут себя предсказуемо на любых экранах, без избыточной нагрузки на браузер и без необходимости сложных CSS-хаков.