Gridstack.js предоставляет мощный инструмент для создания адаптивных сеток на веб-страницах, где элементы могут динамически изменять свои размеры и позиции. Ключевой принцип управления адаптивностью — это работа с опциями сетки и методами API, которые позволяют управлять поведением виджетов при изменении размера экрана или контейнера.
Для начала необходимо инициализировать сетку с учетом адаптивности:
const grid = GridStack.init({
cellHeight: 100,
verticalMargin: 10,
float: true,
disableOneColumnMode: false,
column: 12,
animate: true,
});
Ключевые параметры:
cellHeight — высота ячейки в пикселях, может быть
функцией для динамической подгонки.verticalMargin — вертикальный отступ между
виджетами.float — позволяет элементам плавно перемещаться вверх
при освобождении места.disableOneColumnMode — если false, при
узком экране сетка автоматически переходит в одну колонку.column — количество колонок сетки по умолчанию.animate — анимация перемещения и изменения
размеров.Gridstack.js позволяет программно изменять количество колонок в зависимости от ширины контейнера или окна:
window.addEventListener('resize', () => {
const width = window.innerWidth;
if (width < 768) {
grid.column(1); // мобильный режим
} else if (width < 1200) {
grid.column(6); // планшет
} else {
grid.column(12); // десктоп
}
});
Важно: изменение количества колонок автоматически
перестраивает сетку, сохраняя относительные позиции виджетов. Для
плавного перехода рекомендуется включить опцию animate.
Gridstack.js предоставляет методы для динамического управления виджетами:
update(el, opts) — обновление позиции и размеров
конкретного элемента.
grid.update(widgetElement, {x: 2, y: 1, width: 4, height: 2});move(el, x, y) — перемещение виджета в указанную
ячейку.
resize(el, width, height) — изменение размеров
виджета без перемещения.
Использование этих методов позволяет создавать адаптивные сценарии, где виджеты перестраиваются под условия конкретного устройства.
Gridstack.js поддерживает breakpoints через
конфигурацию responsiveGrid или программную логику. Это
позволяет заранее задать параметры виджетов для разных ширин экрана:
const breakpoints = {
lg: 12, // ≥1200px
md: 6, // ≥768px
sm: 1 // <768px
};
function applyColumns() {
const width = window.innerWidth;
if (width >= 1200) grid.column(breakpoints.lg);
else if (width >= 768) grid.column(breakpoints.md);
else grid.column(breakpoints.sm);
}
window.addEventListener('resize', applyColumns);
applyColumns();
Такой подход позволяет полностью контролировать адаптивность сетки, обеспечивая стабильное расположение виджетов на любых устройствах.
Для повышения гибкости применяются следующие техники:
Минимальные и максимальные размеры:
grid.update(widgetElement, {minWidth: 2, maxWidth: 6, minHeight: 1, maxHeight: 3});
Это предотвращает разрушение макета при резком изменении размера контейнера.
Перемещение с ограничениями: Можно задать
locked: true, чтобы элемент не изменял положение на малых
экранах, или использовать коллбэки resizestop и
dragstop для динамической коррекции.
Динамическое добавление и удаление виджетов:
grid.addWidget(`<div class="grid-stack-item" data-gs-width="4" data-gs-height="2"></div>`);
grid.removeWidget(widgetElement);
Это позволяет создавать адаптивные интерфейсы с изменяемым количеством элементов в зависимости от устройства.
Gridstack.js генерирует события при изменении размеров или позиции виджетов:
change — любое изменение сетки.added / removed — добавление или удаление
виджетов.resizestart / resizestop — начало и конец
изменения размеров.dragstart / dragstop — начало и конец
перетаскивания.Пример отслеживания адаптивных изменений:
grid.on('change', function(event, items) {
items.forEach(item => {
if (item.width > 6) {
item.el.style.backgroundColor = 'lightblue';
} else {
item.el.style.backgroundColor = '';
}
});
});
Такой подход позволяет программно подстраивать интерфейс под текущие условия, создавая адаптивные и интерактивные панели.
Для сложных адаптивных макетов полезно управлять параметрами сетки в реальном времени:
grid.cellHeight(80); // изменение высоты ячеек
grid.verticalMargin(5); // изменение вертикального отступа
grid.float(true); // разрешение «плавающих» виджетов
Эти методы дают полный контроль над визуальной структурой сетки без пересоздания контейнера.
Gridstack.js легко интегрируется с React, Angular или Vue, где
адаптивность часто требуется при динамическом изменении состояния.
Основная стратегия — хранить состояние виджетов и их
параметры сетки в глобальном или компонентном состоянии
и применять методы update, move и
resize при изменении состояния или размеров контейнера.
column, float,
disableOneColumnMode.grid.column().update(), resize(),
move().change, resizestop,
dragstop для динамической подстройки.window.resize с логикой breakpoints.Эти инструменты обеспечивают гибкую и детально контролируемую адаптивность сетки, позволяя создавать интерфейсы, которые одинаково хорошо работают на мобильных устройствах, планшетах и десктопах.