Для работы Masonry вместе с Isotope необходимо убедиться, что обе библиотеки подключены на страницу. Masonry используется как движок для раскладки элементов сетки, а Isotope обеспечивает расширенные возможности фильтрации и сортировки.
<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js"></script>
<script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.min.js"></script>
Подключение должно происходить в правильном порядке: сначала Masonry, затем Isotope, так как последняя библиотека использует методы первой для расчета расположения элементов.
Isotope может работать с различными layout-режимами, включая
masonry. Для этого нужно задать соответствующий параметр
при инициализации:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'masonry',
masonry: {
gutter: 10
}
});
Ключевые параметры:
itemSelector — селектор для элементов сетки.layoutMode: 'masonry' — активация Masonry для
динамической раскладки.masonry.gutter — расстояние между элементами в
пикселях.Masonry через Isotope поддерживает все стандартные функции: автоматическое выравнивание колонок, адаптивную сетку и перерасчет при изменении размеров контейнера.
Isotope позволяет легко добавлять новые элементы в сетку Masonry и корректно пересчитывать расположение.
var newItem = document.createElement('div');
newItem.className = 'grid-item';
newItem.textContent = 'Новый элемент';
iso.appended(newItem);
iso.layout();
Для удаления элементов используется метод remove:
var itemToRemove = document.querySelector('.grid-item:last-child');
iso.remove(itemToRemove);
iso.layout();
Использование layout() после добавления или удаления
элементов гарантирует корректное перераспределение всех элементов
сетки.
Isotope предоставляет мощные методы фильтрации и сортировки элементов сетки, не нарушая раскладки Masonry.
Фильтрация по классу:
iso.arrange({ filter: '.category-1' });
Сортировка по атрибуту или содержимому:
iso.arrange({
sortBy: 'name',
getSortData: {
name: '[data-name]'
}
});
filter принимает CSS-селектор для отображения
определённых элементов.sortBy задаёт критерий сортировки.getSortData позволяет настроить, по какому атрибуту или
тексту сортировать элементы.Если содержимое сетки динамически изменяется, например, изображения загружаются асинхронно, необходимо пересчитать расположение:
imagesLoaded('.grid', function() {
iso.layout();
});
Использование imagesLoaded предотвращает некорректное
наложение элементов до полной загрузки изображений, что важно для
адаптивных сеток.
Isotope с Masonry поддерживает адаптивность при изменении ширины контейнера. Для этого используется CSS:
.grid {
width: 100%;
}
.grid-item {
width: 30%;
margin-bottom: 10px;
}
При изменении размеров окна браузера Isotope автоматически пересчитывает расположение элементов. Для принудительного перерасчёта можно использовать:
window.addEventListener('resize', function() {
iso.layout();
});
Isotope поддерживает анимацию при фильтрации и сортировке, что делает сетку Masonry более динамичной.
iso.arrange({
filter: '.category-2',
transitionDuration: '0.5s'
});
transitionDuration задаёт длительность анимации.Isotope позволяет передавать специфические настройки Masonry, такие как:
columnWidth — ширина колонки, можно задать через
селектор или число.percentPosition — использование процентов для
адаптивной сетки.horizontalOrder — элементы располагаются по
горизонтальному порядку, а не по вертикальному.var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'masonry',
masonry: {
columnWidth: '.grid-sizer',
percentPosition: true,
horizontalOrder: true
}
});
Использование .grid-sizer позволяет гибко управлять
размерами колонок без изменения CSS каждого элемента вручную.
Masonry в связке с Isotope превращает простую сетку в мощный инструмент для динамического, адаптивного и интерактивного контента, сохраняя стабильность расположения элементов и высокую производительность при любых сценариях работы.