Gridstack.js — это мощная библиотека для построения сеточных интерфейсов с поддержкой перетаскивания и изменения размеров виджетов. Размеры элементов в Gridstack.js определяются в ячейках сетки, а не в пикселях, что позволяет создавать адаптивные интерфейсы, легко подстраивающиеся под разные разрешения экранов.
Каждый элемент сетки (widget) в Gridstack.js имеет два ключевых атрибута, определяющие его размеры:
data-gs-width — ширина элемента в
ячейках сетки.data-gs-height — высота элемента в
ячейках сетки.Пример разметки:
<div class="grid-stack">
<div class="grid-stack-item" data-gs-x="0" data-gs-y="0" data-gs-width="2" data-gs-height="3">
<div class="grid-stack-item-content">Элемент 1</div>
</div>
<div class="grid-stack-item" data-gs-x="2" data-gs-y="0" data-gs-width="3" data-gs-height="2">
<div class="grid-stack-item-content">Элемент 2</div>
</div>
</div>
В данном примере первый элемент занимает 2 ячейки по ширине и 3 по высоте, второй — 3×2.
Gridstack.js позволяет динамически изменять размеры элементов через методы API:
resize(el, width, height) — изменяет
размеры указанного элемента:const grid = GridStack.init();
const item = document.querySelector('.grid-stack-item');
grid.resize(item, 4, 2); // ширина 4, высота 2
update(el, {width, height}) — более
гибкий метод, позволяет одновременно обновлять положение и размеры:grid.update(item, {width: 3, height: 3, x: 1, y: 2});
Gridstack.js предоставляет возможность задавать минимальные и максимальные размеры элементов:
min-width и min-height —
минимальные размеры в ячейках.max-width и max-height —
максимальные размеры в ячейках.Пример:
grid.addWidget('<div class="grid-stack-item" data-gs-width="2" data-gs-height="2"></div>',
{minWidth: 1, minHeight: 1, maxWidth: 4, maxHeight: 3});
Эти ограничения автоматически применяются при изменении размеров элемента через перетаскивание или API.
Gridstack.js поддерживает автоматическую подгонку размеров элементов при изменении размера сетки. При изменении ширины контейнера сетки все элементы перераспределяются в соответствии с заданными размерами в ячейках, сохраняя пропорции и ограничения.
Чтобы обеспечить адаптивность:
column.cellHeight: 'auto'
для автоматического подстраивания высоты ячеек под содержимое.float: true, чтобы
элементы автоматически смещались, если свободного места
недостаточно.Пример инициализации сетки с адаптивной высотой:
const grid = GridStack.init({
column: 12,
cellHeight: 'auto',
float: true
});
Gridstack.js позволяет отслеживать изменения размеров элементов с помощью событий:
resizestart — начало изменения
размера.resizemove — изменение в
процессе.resizestop — завершение изменения
размера.Пример:
grid.on('resizestop', function(event, el) {
const node = el.gridstackNode;
console.log(`Элемент ${node.id} имеет новые размеры: ${node.width}x${node.height}`);
});
События позволяют синхронизировать размеры виджетов с внешними компонентами, например, графиками или таблицами.
Для создания элементов с нестандартными пропорциями удобно использовать комбинацию min/max ограничений и изменяемых размеров через API.
Пример создания широкого баннера:
grid.addWidget('<div class="grid-stack-item"><div class="grid-stack-item-content">Баннер</div></div>',
{width: 6, height: 2, minWidth: 4, maxWidth: 12});
Элемент может растягиваться по ширине от 4 до 12 ячеек, сохраняя фиксированную высоту.
data-gs-width/data-gs-height или API.Эти инструменты позволяют гибко управлять визуальной структурой интерфейса, создавая сложные динамические панели с возможностью перетаскивания и масштабирования элементов.