percentPosition — это опция в библиотеке
Packery для JavaScript, которая позволяет управлять
позиционированием элементов сетки в процентах, а не в пикселях. Этот
подход особенно полезен для адаптивных макетов, где ширина контейнера
изменяется в зависимости от размера экрана или родительского блока.
По умолчанию Packery использует абсолютные значения в пикселях для
расчета положения элементов. При изменении ширины контейнера это может
привести к нарушению сетки, так как координаты элементов фиксированы.
Установка percentPosition: true заставляет библиотеку
рассчитывать относительные координаты, что обеспечивает
гибкость и правильное масштабирование элементов при изменении размеров
контейнера.
var elem = document.querySelector('.grid');
var pckry = new Packery(elem, {
itemSelector: '.grid-item',
gutter: 10,
percentPosition: true
});
Использование percentPosition: true делает сетку Packery
полностью адаптивной. Элементы сохраняют пропорции и правильно
перестраиваются при изменении ширины окна. Это особенно важно для
макетов с переменной шириной колонок или при динамическом
добавлении/удалении элементов.
Пример: если сетка имеет три колонки с элементами разной ширины, при изменении ширины контейнера элементы будут перераспределяться пропорционально, а не смещаться хаотично.
gutter и шириной элементовpercentPosition корректно работает только в сочетании с
шириной элементов, заданной в процентах. Если размеры элементов заданы в
пикселях, при изменении размера контейнера сетка может ломаться.
Рекомендуется использовать CSS правила вида:
.grid-item {
width: 30%; /* ширина элемента в процентах */
}
Также необходимо учитывать отступы между элементами
(gutter). Packery корректно учитывает gutter
при расчете процентного положения элементов, что позволяет сохранять
равномерные интервалы независимо от размера контейнера.
var pckry = new Packery('.grid', {
itemSelector: '.grid-item',
gutter: '.gutter-sizer',
percentPosition: true
});
При работе с percentPosition важно вызывать методы
layout и appended после изменения
содержимого. Это гарантирует, что Packery правильно пересчитает позиции
всех элементов в процентах. Пример добавления нового элемента:
var newItem = document.createElement('div');
newItem.className = 'grid-item';
grid.appendChild(newItem);
pckry.appended(newItem);
pckry.layout();
layout() пересчитывает расположение всех элементов, а
appended() уведомляет Packery о добавлении нового элемента,
что особенно важно для динамических интерфейсов.
originLeft и originTop —
при включенном percentPosition Packery сохраняет ориентацию
сетки. Можно использовать originLeft: false для построения
сетки справа налево.stamp — объекты с классом
stamp остаются на месте, а остальные элементы
перераспределяются в процентных координатах.transitionDuration — анимация при
изменении размера элементов также корректно учитывает процентное
позиционирование.gutter через CSS или Packery, чтобы
сохранять ровные промежутки.layout() после изменения DOM для корректного
пересчета.Применение percentPosition: true является ключевым для
создания гибких и динамичных сеток в Packery, позволяя интегрировать
библиотеку в современные адаптивные интерфейсы без необходимости вручную
перерасчитывать координаты элементов.