Библиотека Packery обеспечивает динамическую сетку, где элементы размещаются в оптимальном порядке, минимизируя пустое пространство. Одним из ключевых аспектов управления компоновкой является настройка ширины колонок, поскольку от этого напрямую зависит визуальная структура и поведение сетки при изменении размеров окна.
columnWidthПараметр columnWidth отвечает за ширину колонок сетки.
Его можно задавать несколькими способами:
var grid = document.querySelector('.grid');
var pckry = new Packery(grid, {
itemSelector: '.grid-item',
columnWidth: 200
});
В этом примере каждая колонка будет иметь фиксированную ширину 200px. Элементы автоматически выстраиваются по этой ширине, учитывая их собственный размер.
var pckry = new Packery(grid, {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer'
});
Элемент с классом .grid-sizer служит эталоном. Packery
вычисляет ширину колонок по его размеру, что позволяет легко
использовать адаптивные сетки.
var pckry = new Packery(grid, {
itemSelector: '.grid-item',
columnWidth: function() {
return window.innerWidth / 4;
}
});
Здесь ширина колонок изменяется в зависимости от ширины окна, создавая сетку с четырьмя колонками.
.grid-sizer и .gutter-sizerДля точной настройки ширины колонок часто применяют вспомогательные элементы:
.grid-sizer — задает базовую ширину колонок..gutter-sizer — задает промежуток (gutter) между
колонками.Пример разметки:
<div class="grid">
<div class="grid-sizer"></div>
<div class="gutter-sizer"></div>
<div class="grid-item"></div>
<div class="grid-item"></div>
</div>
И соответствующая инициализация Packery:
var grid = document.querySelector('.grid');
var pckry = new Packery(grid, {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
gutter: '.gutter-sizer'
});
Преимущество такого подхода — легкая адаптация сетки при изменении стилей CSS, например, при использовании медиа-запросов.
Packery автоматически подстраивает элементы под ширину колонок. Важно учитывать, что если ширина элемента больше ширины колонки, он займёт несколько колонок. Для контроля этого используется CSS-свойство:
.grid-item {
width: 2 * var(--column-width);
}
При использовании .grid-sizer ширина колонок может быть
задана через CSS-переменные:
.grid-sizer {
width: 25%;
}
Таким образом, сетка становится резиновой, а Packery адаптирует расположение элементов без необходимости пересчитывать JavaScript.
Packery поддерживает динамическое перераспределение элементов при
изменении ширины окна. Для этого обычно вызывают метод
layout() после изменения размеров контейнера:
window.addEventListener('resize', function() {
pckry.layout();
});
Если используется относительная ширина колонок (%),
сетка автоматически подстраивается под новое значение, а элементы
корректно перераспределяются по колонкам.
.grid-sizer и
.gutter-sizer для точной адаптивной сетки.pckry.layout() для перерасчета компоновки.Настройка ширины колонок в Packery — это баланс между CSS-стилями и
параметрами инициализации. Правильная комбинация
columnWidth, вспомогательных элементов и адаптивных стилей
позволяет создавать сетки, которые остаются визуально аккуратными и
функциональными на любых экранах.