Sticky-элемент — это элемент, который сохраняет своё положение на
экране при прокрутке, но только в пределах родительского контейнера. В
HTML и CSS для этого используется свойство
position: sticky, однако его поведение часто ограничено и
требует доработки с помощью JavaScript, особенно при сложных формах с
динамическим контентом. Библиотека Stickybits решает
эти ограничения, предоставляя гибкий и кросс-браузерный способ
управления «прилипшими» элементами.
Для начала работы с библиотекой необходимо подключить её через npm или CDN:
// npm
import Stickybits from 'stickybits';
// CDN
// <script src="https://cdn.jsdelivr.net/npm/stickybits@3.7.7/dist/stickybits.min.js"></script>
После подключения создаётся экземпляр sticky-элемента, который привязывается к DOM-узлу:
const sticky = Stickybits('.form-header', {
stickyBitStickyOffset: 10,
useStickyClasses: true,
verticalPosition: 'top'
});
Пояснения параметров:
stickyBitStickyOffset — смещение от верхнего края при
фиксации элемента.useStickyClasses — добавляет CSS-классы
(.is-sticky, .is-stuck) для управления стилями
через CSS.verticalPosition — положение элемента при прилипающем
состоянии (top или bottom).При работе с длинными формами часто возникает задача закрепить шапку формы или пояснения к полям. Stickybits позволяет:
Пример закрепления заголовка секции формы:
Stickybits('.form-section-header', {
stickyBitStickyOffset: 20,
useStickyClasses: true
});
Если форма содержит несколько секций с динамической высотой, Stickybits корректно вычисляет границы родителя и предотвращает наложение элементов.
В формах с динамическими полями (например, добавление новых блоков,
раскрывающиеся списки) sticky-элементы могут терять положение.
Stickybits предоставляет метод update() для пересчёта
позиции:
sticky.update();
Эта функция вызывается после изменения DOM внутри родительского контейнера, чтобы элемент снова корректно «прилипал» в нужной позиции.
Stickybits автоматически добавляет следующие CSS-классы:
.is-sticky — элемент зафиксирован на экране..is-stuck — элемент достиг нижней границы родителя и
перестал скроллиться..stickybit — базовый класс для всех управляемых
элементов.Использование этих классов позволяет управлять стилями через CSS:
.form-header.is-sticky {
background-color: #fff;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
z-index: 10;
}
.form-header.is-stuck {
background-color: #f9f9f9;
}
Stickybits корректно работает в сочетании с:
position.stickyBitStickyOffset можно
менять через медиазапросы или JS.Пример адаптивного смещения:
const offset = window.innerWidth > 768 ? 20 : 10;
Stickybits('.form-header', { stickyBitStickyOffset: offset });
Фиксированные кнопки действий или подсказки в длинных формах должны оставаться видимыми:
Stickybits('.form-action', {
verticalPosition: 'bottom',
stickyBitStickyOffset: 15
});
Это позволяет закрепить элемент снизу формы без необходимости
отдельного position: fixed и ручного управления
смещением.
Если необходимо удалить sticky-эффект:
sticky.cleanup();
Для повторного закрепления после динамических изменений DOM:
sticky = Stickybits('.form-header');
update() только при необходимости, например,
после добавления новых секций.Stickybits делает sticky-элементы предсказуемыми, совместимыми и простыми в управлении даже в сложных многоуровневых формах. Это особенно актуально для интерфейсов с длинными формами, подсказками, кнопками действий и динамическим контентом.