Свойство itemSelector является ключевым при работе с
библиотекой Masonry в JavaScript. Оно определяет, какие
элементы внутри контейнера будут позиционироваться с помощью Masonry. По
сути, это CSS-селектор, который сообщает Masonry, на какие дочерние
элементы следует применять алгоритм расположения.
var msnry = new Masonry('.grid', {
itemSelector: '.grid-item',
columnWidth: 200,
gutter: 10
});
В этом примере Masonry будет применять свои вычисления только к
элементам с классом .grid-item внутри контейнера
.grid. Все остальные элементы контейнера остаются без
изменений.
itemSelector принимает строку с любым валидным
CSS-селектором:
.grid-item — выбирает элементы
с указанным классом.#item1 — выбирает конкретный
элемент с указанным ID.div — выбирает все элементы
указанного тега внутри контейнера..grid-item.highlight — выбирает элементы с обоими классами
.grid-item и .highlight.Важно помнить, что Masonry применяет позиционирование только к непосредственным потомкам контейнера, соответствующим селектору.
При динамическом добавлении элементов в Masonry (append
или prepend) itemSelector автоматически
используется для фильтрации новых элементов. Пример:
var newItem = document.createElement('div');
newItem.className = 'grid-item';
document.querySelector('.grid').appendChild(newItem);
msnry.appended(newItem);
Если элемент не соответствует селектору, Masonry не будет его
позиционировать. Это делает itemSelector эффективным
инструментом для фильтрации только нужных элементов, исключая
декоративные или служебные блоки.
columnWidth и gutterЭффективная работа Masonry требует синхронизации
itemSelector с columnWidth. Например:
var msnry = new Masonry('.grid', {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
gutter: '.gutter-sizer'
});
Здесь .grid-sizer определяет базовую ширину колонки,
.gutter-sizer — промежутки между элементами. Masonry
вычисляет позиции всех элементов, подходящих под
itemSelector, исходя из этих значений. Если селектор задан
неправильно, Masonry не сможет корректно распределить элементы по
колонкам, что приведет к наложению или пропускам в сетке.
itemSelector можно использовать для реализации фильтров
контента. Например, с помощью динамического изменения классов можно
показывать только элементы определённого типа:
// Показываем только элементы с классом "featured"
msnry.items.forEach(function(item){
if (!item.element.classList.contains('featured')) {
item.element.style.display = 'none';
} else {
item.element.style.display = '';
}
});
msnry.layout();
Эффект: Masonry перестраивает сетку, учитывая только видимые
элементы, которые соответствуют itemSelector.
itemSelector корректно отражает
структуру HTML-контейнера..grid-sizer) и промежутки
(.gutter-sizer).appended,
prepended и remove для новых или удалённых
элементов, чтобы Masonry корректно обновлял позиции.itemSelector обеспечивает точный контроль над тем, какие
элементы Masonry будет учитывать при построении сетки. Правильное
использование этого свойства является основой стабильной и красивой
верстки с динамическими и разнородными элементами.