Masonry — это библиотека для создания динамической сетки с «кирпичной» раскладкой элементов, которая автоматически упорядочивает блоки по вертикали, заполняя свободное пространство. Для начала необходимо подключить саму библиотеку. Существует несколько способов подключения: через CDN или через установку npm-пакета. Пример через CDN:
<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js"></script>
Через npm установка выглядит так:
npm install masonry-layout
После подключения библиотека становится доступной через глобальный
объект Masonry или импорт:
import Masonry from 'masonry-layout';
Для корректной работы Masonry требуется выбрать контейнер и элементы сетки. Пример базовой инициализации:
const grid = document.querySelector('.grid');
const msnry = new Masonry(grid, {
itemSelector: '.grid-item',
columnWidth: 200,
gutter: 10,
fitWidth: true
});
Ключевые параметры:
itemSelector — CSS-селектор для элементов сетки.columnWidth — ширина колонки; может быть числом или
элементом DOM.gutter — расстояние между элементами.fitWidth — выравнивание по центру контейнера.Masonry поддерживает добавление новых элементов после инициализации.
Для этого используется метод append:
const newItems = document.createElement('div');
newItems.classList.add('grid-item');
grid.appendChild(newItems);
msnry.appended(newItems);
msnry.layout();
Метод layout() пересчитывает расположение всех
элементов, что важно при изменении размеров блоков или добавлении
новых.
Masonry использует CSS-свойства position: absolute и
transform, поэтому кросс-браузерная поддержка зависит от
корректной работы этих стилей. Для современных браузеров проблем
практически нет, однако следует учитывать следующие нюансы:
fitWidth и задавать
явные размеры элементов.transition. Использование
imagesLoaded помогает корректно отображать сетку после
загрузки изображений.Частая проблема при кросс-браузерном тестировании — некорректная
раскладка до полной загрузки изображений. Для этого используется
библиотека imagesLoaded:
import imagesLoaded from 'imagesloaded';
imagesLoaded(grid, () => {
msnry.layout();
});
Это гарантирует, что Masonry перестроит сетку только после того, как все изображения получили свои размеры.
Masonry хорошо сочетается с медиазапросами. Для адаптивной сетки
рекомендуется менять columnWidth в зависимости от ширины
окна:
function updateMasonry() {
const width = window.innerWidth;
msnry.options.columnWidth = width < 600 ? 100 : 200;
msnry.layout();
}
window.addEventListener('resize', updateMasonry);
updateMasonry();
Это позволяет сохранять корректное отображение элементов на всех устройствах, что критично при тестировании кросс-браузерной совместимости.
Masonry поддерживает анимации при перестройке сетки через CSS. Для
плавного перехода можно использовать transition:
.grid-item {
transition: transform 0.4s ease;
}
В сочетании с вызовом msnry.layout() после добавления
или удаления элементов, это создаёт эффект плавного «перетасовывания»
блоков.
При кросс-браузерном тестировании важно:
polyfill для requestAnimationFrame и
classList при необходимости.Masonry может сочетаться с Infinite Scroll и другими динамическими
загрузками контента. Пример с добавлением элементов через
fetch:
fetch('/api/items')
.then(response => response.json())
.then(data => {
const items = data.map(item => {
const el = document.createElement('div');
el.className = 'grid-item';
el.textContent = item.title;
grid.appendChild(el);
return el;
});
msnry.appended(items);
msnry.layout();
});
Такой подход позволяет сохранять кросс-браузерную стабильность даже при динамически изменяющемся контенте.
imagesLoaded для корректного расчёта
размеров.layout().Эти техники гарантируют, что Masonry будет работать стабильно на различных браузерах и устройствах, сохраняя визуальную целостность сетки и плавность анимаций.