В библиотеке Packery для JavaScript управление сеткой и расположением элементов осуществляется через систему контейнеров и ячеек (items). При этом использование процентных значений в размерах элементов и контейнера играет ключевую роль в создании адаптивного дизайна.
Контейнер, инициализируемый через Packery, может иметь
как фиксированные размеры, так и размеры, заданные в процентах.
Например:
.grid {
width: 100%;
}
.grid-item {
width: 25%;
height: 200px;
}
При такой настройке Packery автоматически учитывает ширину контейнера и вычисляет количество элементов в ряду на основе процентной ширины элемента. Если ширина контейнера изменяется, например, при изменении размера окна браузера, сетка перестраивается динамически без дополнительных манипуляций.
columnWidth и процентные значенияОпция columnWidth определяет ширину колонки, на основе
которой Packery располагает элементы. В случае использования процентных
значений важно понимать взаимодействие с опцией
percentPosition:
var grid = document.querySelector('.grid');
var pckry = new Packery(grid, {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
percentPosition: true
});
columnWidth может быть указан в
пикселях, либо через CSS-класс, который задает размер колонки в
процентах.percentPosition: true переводит
расчёты Packery из абсолютных пикселей в относительные проценты. Это
позволяет сохранять пропорции при изменении размеров контейнера.Пример CSS для .grid-sizer:
.grid-sizer {
width: 25%;
}
Таким образом, каждая колонка будет занимать четверть ширины контейнера независимо от его текущей ширины.
Использование процентных значений делает сетку полностью адаптивной. При изменении ширины окна браузера Packery пересчитывает позиции элементов автоматически, что особенно важно для мобильных версий сайтов.
Для обеспечения корректного поведения рекомендуется:
percentPosition: true при
инициализации.Пример полной структуры:
<div class="grid">
<div class="grid-sizer"></div>
<div class="grid-item"></div>
<div class="grid-item"></div>
<div class="grid-item"></div>
</div>
Packery не ограничивается только шириной. Высоту элементов можно задавать также в процентах, но важно учитывать контекст родительского блока. Например:
.grid-item {
width: 33.3333%;
height: 50%;
}
В этом случае высота элемента рассчитывается относительно высоты
контейнера. При использовании percentPosition Packery
корректно размещает такие элементы без наложений.
При добавлении элементов динамически через append или
prepended важно учитывать, что новые элементы с процентными
размерами автоматически включаются в пересчет сетки:
var newItem = document.createElement('div');
newItem.className = 'grid-item';
grid.appendChild(newItem);
pckry.appended(newItem);
Packery сразу вычисляет новые позиции элементов, сохраняя пропорции.
fitWidthОпция fitWidth часто используется совместно с
процентными размерами, чтобы сетка занимала только необходимую
ширину:
var pckry = new Packery(grid, {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
percentPosition: true,
fitWidth: true
});
При этом ширина контейнера автоматически подстраивается под количество элементов, сохраняя адаптивность.
grid-sizer +
percentPosition: true является стандартной практикой при
построении сеток с Packery.Использование процентных значений в Packery обеспечивает гибкость и адаптивность сетки без сложных вычислений в JavaScript. Этот подход позволяет создавать макеты, которые корректно реагируют на изменения размера окна, количество элементов и динамически добавляемый контент.