Свойство itemSelector в библиотеке Packery является
ключевым параметром конфигурации. Оно определяет CSS-селектор элементов,
которые будут участвовать в компоновке сетки. Без корректного указания
itemSelector Packery не сможет определить, какие DOM-узлы
должны быть расположены по схеме «masonry» или «grid».
Пример базовой конфигурации:
var grid = document.querySelector('.grid');
var pckry = new Packery(grid, {
itemSelector: '.grid-item',
gutter: 10
});
Здесь .grid-item – селектор элементов, которые будут
упорядочены. Все дочерние элементы контейнера .grid без
этого класса игнорируются Packery.
Точность селектора itemSelector
должен точно соответствовать классам или типам элементов, которые
требуется позиционировать. Селекторы типа .grid-item или
div.item работают корректно, но * (все
элементы) может привести к неожиданному поведению, особенно если внутри
контейнера есть элементы, не предназначенные для сетки.
Влияние на производительность При большом количестве элементов точные селекторы помогают ускорить работу Packery, так как библиотека будет обрабатывать только необходимые узлы.
Динамическое добавление элементов Когда новые
элементы добавляются в DOM после инициализации, их также необходимо
регистрировать с помощью метода append или
prepended, чтобы Packery смог применить к ним правила
itemSelector.
var newItem = document.createElement('div');
newItem.className = 'grid-item';
grid.appendChild(newItem);
pckry.appended(newItem);
itemSelector напрямую влияет на работу методов
layout и fit. Packery будет учитывать только
те элементы, которые соответствуют селектору, при перерасчёте
сетки.Избегать универсальных селекторов Использование
* или слишком общих классов может привести к конфликту
стилей и пересечению элементов, что нарушает визуальный порядок
сетки.
Использовать семантические классы Присваивание отдельного класса каждому элементу сетки повышает читаемость кода и облегчает поддержку.
Совместимость с анимациями Если элементы
анимируются или изменяют размеры динамически, важно, чтобы
itemSelector корректно выделял именно те элементы, которые
должны двигаться. В противном случае анимации могут нарушить логику
компоновки.
Поддержка вложенных контейнеров Если внутри
основного контейнера есть вложенные блоки, их следует исключать из
itemSelector, иначе Packery будет пытаться упорядочить и
эти узлы, что приведёт к визуальным сбоям.
gutter – промежуток между элементами;
применяется только к узлам, выбранным через
itemSelector.percentPosition – влияет на расчет
координат в процентах для элементов, указанных через
itemSelector.remove, stamp –
оперируют только с элементами, соответствующими
itemSelector.var pckry = new Packery('.grid', {
itemSelector: '.grid-item, .grid-featured',
gutter: 15
});
В этом примере одновременно учитываются два типа элементов с разными классами.
var pckry = new Packery('.grid', {
itemSelector: '.grid-item[data-active="true"]',
gutter: 10
});
Packery будет игнорировать элементы с
data-active="false".
pckry.options.itemSelector = '.new-grid-item';
pckry.reloadItems();
pckry.layout();
Позволяет изменять тип элементов, участвующих в компоновке, без полной реинициализации.
itemSelector – основной фильтр для элементов
сетки.append, prepended).Корректное использование itemSelector формирует основу
стабильной и предсказуемой работы Packery с любыми типами сеток и
динамическим контентом.