Stickybits — это легковесная библиотека для управления «липким» позиционированием элементов на странице с использованием CSS и JavaScript. Основная цель — сделать фиксированные элементы (например, заголовки таблиц) «прилипшими» к верхней границе контейнера при скролле, сохраняя при этом гибкость и контроль через JS.
Ключевой принцип работы Stickybits заключается в том, что библиотека
отслеживает положение элемента относительно окна браузера и
родительского контейнера, применяя соответствующие классы и стили для
имитации поведения position: sticky, даже в браузерах с
ограниченной поддержкой или для более сложных случаев, когда требуется
динамическое управление.
import stickybits from 'stickybits';
const stickyHeader = stickybits('.table-header', {
stickyBitStickyOffset: 0,
useStickyClasses: true
});
.table-header — селектор элемента,
который должен стать «липким».stickyBitStickyOffset — смещение от
верхней границы окна.useStickyClasses — добавление
CSS-классов .js-is-sticky и .js-is-stuck для
управления стилями.Для таблиц Stickybits особенно полезен при работе с длинными списками
данных, когда нужно, чтобы заголовок оставался видимым. Подход простой:
каждый <thead> или отдельный <tr>
в шапке таблицы получает «липкость», а библиотека автоматически
управляет позиционированием.
const stickyTableHeaders = stickybits('thead', {
stickyBitStickyOffset: 0,
useStickyClasses: true,
verticalPosition: 'top'
});
verticalPosition — определяет, к какой
границе привязать элемент (top или
bottom)..js-is-sticky {
background-color: #fff;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
}
.js-is-stuck {
opacity: 0.9;
}
Stickybits позволяет задавать индивидуальные смещения для элементов, что особенно важно при наличии фиксированных шапок, панелей навигации или динамически изменяющихся интерфейсов.
stickybits('.table-header', {
stickyBitStickyOffset: 50, // учитывает высоту фиксированной шапки
parentClass: 'table-container' // ограничивает «липкость» пределами родителя
});
parentClass — класс родительского
контейнера, который ограничивает область действия липкости.Если таблица загружается динамически через AJAX или изменяет количество строк, необходимо пересоздавать Stickybits или обновлять его состояние.
const tableHeaders = stickybits('thead', {useStickyClasses: true});
// После добавления новых данных
tableHeaders.update();
Метод .update() пересчитывает позиции и гарантирует
корректное поведение при изменении размера элементов или контейнера.
Stickybits добавляет и удаляет классы:
.js-is-sticky — элемент начал «прилипать»..js-is-stuck — элемент достиг нижней границы
контейнера.Дополнительно можно использовать колбэки через события DOM для расширенной кастомизации:
document.querySelector('.table-header').addEventListener('stickybit:state-change', (e) => {
console.log(e.detail.isSticky ? 'Начало липкости' : 'Конец липкости');
});
useStickyClasses вместо прямого применения
inline-стилей для лучшей оптимизации и контроля через CSS.<thead> или ключевым строкам, чтобы избежать лишнего
пересчета при скролле.Stickybits работает совместно с position: sticky,
улучшая кроссбраузерную поддержку. Можно комбинировать с CSS-анимациями
и transition для плавного эффекта при переключении состояния:
.js-is-sticky {
transition: all 0.3s ease;
}
Таким образом, Stickybits обеспечивает гибкое управление липкими элементами таблиц, учитывает смещение, контейнер и динамический контент, предоставляя удобный набор классов для стилизации и интеграции с современными интерфейсами.