Параметр columnWidth в библиотеке
Packery является одной из ключевых настроек при
организации сетки элементов. Он определяет ширину колонок, по которым
Packery выстраивает расположение элементов. От корректного выбора этого
параметра зависит, насколько аккуратно и равномерно будут размещены
блоки, а также эффективность использования пространства.
columnWidth может принимать несколько типов
значений:
Число (в пикселях) Указывает фиксированную ширину колонки в пикселях. Например:
var grid = document.querySelector('.grid');
var pckry = new Packery(grid, {
itemSelector: '.grid-item',
columnWidth: 100
});
В этом случае каждая колонка будет иметь ширину
100px, и элементы будут подстраиваться под это
значение. Если ширина контейнера не делится ровно на
columnWidth, последние колонки могут быть частично
заполнены, что нужно учитывать при дизайне.
CSS-селектор Можно указать селектор элемента, на основе которого Packery будет вычислять ширину колонок:
var pckry = new Packery('.grid', {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer'
});
Элемент с классом .grid-sizer выступает эталоном ширины
колонок. Это удобно при адаптивной сетке, когда ширина колонки может
изменяться через медиазапросы или процентные значения.
Функция В качестве значения можно передать функцию, которая возвращает ширину колонок динамически:
var pckry = new Packery('.grid', {
itemSelector: '.grid-item',
columnWidth: function(containerWidth) {
return containerWidth / 4; // делим контейнер на 4 колонки
}
});
Такой подход позволяет автоматически подстраивать количество колонок под ширину контейнера, обеспечивая адаптивность сетки без дополнительных медиазапросов.
columnWidth тесно связан с параметром
gutter, который задаёт промежутки между
колонками. Если указана ширина колонки через число, gutter
прибавляется к этой ширине для расчета позиции следующей колонки.
Пример:
var pckry = new Packery('.grid', {
itemSelector: '.grid-item',
columnWidth: 120,
gutter: 10
});
В этом случае каждая колонка будет занимать 130px с учётом промежутка, что необходимо учитывать при расчётах макета.
Использование дополнительного элемента .grid-sizer
позволяет легко управлять шириной колонок и делает сетку более
предсказуемой. Пример разметки:
Инициализация:
var pckry = new Packery('.grid', {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
gutter: 10
});
.grid-sizer может быть невидимым (например, с
display: none не работает, лучше использовать
visibility: hidden или opacity: 0), и он
служит только для расчета сетки.
Если колонка задана через селектор, в CSS можно использовать процентные значения:
.grid-sizer { width: 25%; }
.grid-item { width: 25%; }
Packery автоматически вычисляет количество колонок в зависимости от ширины контейнера. Такой подход идеально подходит для гибких макетов, когда сетка должна масштабироваться при изменении размера окна.
Packery поддерживает элементы разных размеров, но точное
позиционирование зависит от columnWidth.
Рекомендуется, чтобы ширина каждого элемента была кратна колонке:
.grid-item--w2 { width: 50%; } /* занимает 2 колонки */
.grid-item--w3 { width: 75%; } /* занимает 3 колонки */
Инициализация с grid-sizer гарантирует, что все элементы выстроятся ровно по колонкам.
gutter, чтобы избежать
неожиданных смещений.columnWidth является основой точного и предсказуемого
позиционирования элементов в Packery, от него зависят эстетика и
эффективность использования пространства в любой сетке.