Packery — это библиотека для создания динамических сеток, где элементы располагаются в упорядоченном, но свободном формате, с возможностью «залипания» к свободному пространству. Ключевым аспектом является контроль выравнивания элементов, что позволяет достичь аккуратного и визуально гармоничного расположения блоков.
Packery оперирует понятием grid layout: элементы не привязаны к строгим строкам и столбцам, а автоматически подбираются к свободным позициям. При этом выравнивание может происходить по разным осям: горизонтальной (лево, центр, право) и вертикальной (верх, центр, низ).
originLeft и
originTopЭти параметры задаются при инициализации Packery:
var pckry = new Packery( '.grid', {
itemSelector: '.grid-item',
gutter: 10,
originLeft: true, // выравнивание слева (false для справа)
originTop: true // выравнивание сверху (false для снизу)
});
originLeft: true — элементы выстраиваются начиная с
левого края контейнера.originLeft: false — выравнивание по правому краю.originTop: true — элементы укладываются сверху
вниз.originTop: false — выравнивание снизу вверх.Эти настройки особенно полезны при изменении языка интерфейса (LTR или RTL) или при нестандартных макетах.
Packery учитывает размеры контейнера и элементов, поэтому можно комбинировать свойства CSS с параметрами библиотеки:
.grid {
display: block;
margin: 0 auto; /* центрирование всей сетки */
}
.grid-item {
width: 100px;
height: 100px;
margin-bottom: 10px; /* отступы между элементами */
}
margin: 0 auto позволяет центрировать
весь контейнер сетки в родительском блоке.margin-bottom задает вертикальный промежуток между
элементами.flex или
inline-block к элементам внутри .grid, хотя
Packery сам управляет позиционированием.Packery предоставляет API для динамического выравнивания после инициализации:
layout()pckry.layout();
Принудительно пересчитывает позиции всех элементов и обновляет выравнивание в контейнере.
fit()var elem = document.querySelector('.grid-item');
pckry.fit(elem);
Размещает конкретный элемент в ближайшей доступной позиции, учитывая текущую сетку.
stamp()var stampElem = document.querySelector('.stamp');
pckry.stamp(stampElem);
Выделяет элемент, который не будет перемещаться при дальнейшем выравнивании остальных элементов. Остальные блоки выстраиваются вокруг него.
shiftLayout()Позволяет перемещать элементы с сохранением их порядка, при этом выравнивание происходит более гладко и предсказуемо.
pckry.shiftLayout();
Packery автоматически управляет размером и положением элементов, даже если они отличаются по ширине и высоте. Для корректного выравнивания рекомендуется:
percentage для адаптивного макета.gutter при инициализации для контроля
промежутков.layout().pckry.options.gutter = 20;
pckry.layout();
Packery по умолчанию выравнивает элементы по верхнему левому
углу (или по параметрам
originLeft/originTop). Для создания
центрированной сетки можно использовать трюк с
оберткой:
<div class="outer-grid">
<div class="grid">
<div class="grid-item"></div>
<div class="grid-item"></div>
</div>
</div>
.outer-grid {
display: flex;
justify-content: center;
}
.grid {
display: block;
}
.outer-grid центрирует всю сетку
горизонтально.Для адаптивных макетов важно пересчитывать позиции при изменении размера окна:
window.addEventListener('resize', function() {
pckry.layout();
});
Это предотвращает наложение элементов и сохраняет аккуратное выравнивание, особенно если размеры контейнера зависят от ширины экрана.
originLeft и originTop для
контроля основных осей.gutter для аккуратного промежутка между
элементами.layout() после
изменения контента.flex для
визуальной симметрии.Packery сочетает гибкость динамического позиционирования и контроль выравнивания, позволяя создавать сетки, которые выглядят аккуратно и органично независимо от количества и размеров элементов.