Для использования Isotope с раскладкой Masonry необходимо подключить саму библиотеку Isotope и убедиться, что на странице присутствует контейнер с элементами сетки. Masonry-режим позволяет автоматически выравнивать элементы по колонкам, заполняя вертикальные промежутки, что особенно удобно для динамического контента разной высоты.
Пример подключения через CDN:
<script src="https://unpkg.com/isotope-layout@3/dist/isotope.pkgd.min.js"></script>
Инициализация Isotope с Masonry:
var grid = document.querySelector('.grid');
var iso = new Isotope(grid, {
itemSelector: '.grid-item',
layoutMode: 'masonry',
masonry: {
columnWidth: '.grid-sizer', // Определяет ширину колонок
gutter: 10 // Отступы между элементами
}
});
Ключевые моменты:
itemSelector — CSS-селектор для каждого элемента
сетки.layoutMode: 'masonry' активирует режим Masonry.masonry.columnWidth можно указать фиксированным или
через отдельный элемент-сизер, чтобы Isotope рассчитывал ширину колонок
динамически.masonry.gutter задаёт промежутки между элементами.Для адаптивности сетки элементы могут иметь процентную ширину, а sizier-элемент использовать для определения базовой колонки. Пример HTML:
<div class="grid">
<div class="grid-sizer"></div>
<div class="grid-item">Элемент 1</div>
<div class="grid-item">Элемент 2</div>
<div class="grid-item">Элемент 3</div>
...
</div>
CSS для адаптивности:
.grid {
display: block;
}
.grid-sizer,
.grid-item {
width: 33.33%; /* 3 колонки */
}
.grid-item {
margin-bottom: 10px;
}
Особенности:
.grid-sizer используется только как опорный элемент для
расчёта ширины колонок.gutter и margin-bottom.Isotope с Masonry легко сочетает фильтрацию и сортировку, сохраняя аккуратную раскладку без пробелов. Пример фильтрации по категории:
var filterButtons = document.querySelectorAll('.filter-button');
filterButtons.forEach(function(button) {
button.addEventListener('click', function() {
var filterValue = button.getAttribute('data-filter');
iso.arrange({ filter: filterValue });
});
});
Пример сортировки по атрибуту:
iso.arrange({
sortBy: 'name',
getSortData: {
name: '[data-name]'
}
});
Ключевые моменты:
arrange({ filter: ... }) обновляет отображение
элементов без пересоздания сетки.getSortData позволяет задавать кастомные параметры для
сортировки, например, числовые значения или строки.Isotope поддерживает добавление новых элементов с плавной анимацией:
var newItem = document.createElement('div');
newItem.classList.add('grid-item');
newItem.textContent = 'Новый элемент';
grid.appendChild(newItem);
iso.appended(newItem);
Удаление элемента:
var itemToRemove = document.querySelector('.grid-item-to-remove');
iso.remove(itemToRemove);
iso.layout(); // Перерасчёт Masonry
Особенности работы с Masonry:
appended автоматически перестраивает сетку после
добавления элементов.remove удаляет элементы и корректно сдвигает
оставшиеся.layout() применяется для перерасчёта позиции всех
элементов при изменении размера контейнера или содержимого.Для больших сеток с Masonry важно учитывать производительность:
.grid-sizer уменьшает количество вычислений при
перерасчётах.window.addEventListener('resize', debounce(function() {
iso.layout();
}, 200));
iso.layout() для корректного отображения элементов с разной
высотой.Isotope позволяет задавать кастомные эффекты появления и исчезновения элементов:
.grid-item {
transition: transform 0.4s, opacity 0.4s;
}
iso.arrange({ filter: '.active' });
Особенности:
transform и opacity даёт плавные
и ресурсоэффективные анимации.Хотя Masonry является самым популярным режимом для динамических сеток, Isotope позволяет комбинировать его с:
Использование Masonry предпочтительно для сеток с переменной высотой элементов, где важно максимально плотное заполнение пространства.