Packery — это библиотека для динамической компоновки элементов сетки в стиле «masonry». Одним из удобных способов её использования является инициализация через HTML-атрибуты, что позволяет минимизировать вмешательство JavaScript-кода и ускорить разработку интерфейсов.
data-packery-optionsДля того чтобы Packery автоматически инициализировался на контейнере,
достаточно добавить к элементу атрибут
data-packery-options. Этот атрибут содержит JSON-объект с
настройками сетки. Пример базовой конфигурации:
<div class="grid" data-packery-options='{ "itemSelector": ".grid-item", "gutter": 10, "percentPosition": true }'>
<div class="grid-item">1</div>
<div class="grid-item">2</div>
<div class="grid-item">3</div>
</div>
itemSelector — CSS-селектор для
элементов сетки.gutter — расстояние между элементами в
пикселях.percentPosition — позволяет задавать
позиции элементов в процентах, что удобно для адаптивного дизайна.Packery автоматически считывает этот атрибут при инициализации и применяет указанные параметры. Важно, чтобы JSON был корректно сформирован: кавычки должны быть двойными, а все ключи — строками.
Все основные параметры Packery могут быть заданы через
data-packery-options. Например, управление методами
позиционирования или включение анимации:
<div class="grid" data-packery-options='{
"itemSelector": ".grid-item",
"gutter": 15,
"transitionDuration": "0.4s",
"stamp": ".stamp"
}'>
<div class="grid-item">A</div>
<div class="grid-item">B</div>
<div class="grid-item stamp">C</div>
</div>
transitionDuration — задает
длительность анимации при перестройке сетки.stamp — элемент, который будет
занимать фиксированное место в сетке, вокруг которого располагаются
другие элементы.Для использования HTML-инициализации необходимо подключить
стандартный Packery JS-файл и библиотеку packery.pkgd.js.
После этого вызов дополнительного JavaScript-кода не обязателен: Packery
сам просканирует DOM на наличие элементов с
data-packery-options и инициализирует сетку.
Если требуется ручной запуск, можно использовать:
var grids = document.querySelectorAll('[data-packery-options]');
grids.forEach(function(grid) {
var options = JSON.parse(grid.getAttribute('data-packery-options'));
new Packery(grid, options);
});
Такой подход обеспечивает полную совместимость с динамическим добавлением элементов и позволяет при необходимости управлять сеткой программно.
Использование percentPosition: true в HTML-атрибутах
позволяет сетке автоматически подстраиваться под ширину контейнера. Для
оптимизации необходимо:
gutter и маргинов для
разных экранов.data-packery-options, если требуется различная логика для
мобильных и десктопных устройств.onLayoutComplete), нельзя передать
через HTML — их нужно подключать через JavaScript.Использование HTML-атрибутов в Packery упрощает интеграцию сетки в статические страницы и ускоряет прототипирование, сохраняя при этом возможность расширенного управления через JS при необходимости.