Библиотека Masonry в JavaScript предназначена для динамического расположения блоков на странице в виде «кирпичной кладки», где элементы автоматически подстраиваются под доступное пространство, минимизируя пустые промежутки. Ключевым аспектом её работы является корректная структура HTML, которая определяет, как элементы будут позиционироваться и взаимодействовать между собой.
Все элементы Masonry должны находиться внутри единого контейнера.
Этот контейнер играет роль основного блока управления
расположением. Обычно он представляет собой div с
уникальным классом или идентификатором. Пример базовой разметки:
<div class="grid">
<div class="grid-item">Элемент 1</div>
<div class="grid-item">Элемент 2</div>
<div class="grid-item">Элемент 3</div>
<div class="grid-item">Элемент 4</div>
</div>
Ключевые моменты:
grid — контейнер для Masonry.grid-item — отдельные элементы сетки, которые будут
автоматически позиционироваться.Каждый элемент сетки (grid-item) может содержать любой
HTML-контент: изображения, текст, видео, карты и другие блоки. Masonry
учитывает фактические размеры блока, поэтому элементы
различной высоты автоматически формируют «кирпичную» сетку.
<div class="grid-item">
<img src="image1.jpg" alt="Описание изображения">
<p>Текст под изображением</p>
</div>
<div class="grid-item">
<img src="image2.jpg" alt="Описание изображения">
</div>
Рекомендации по структуре элементов:
grid-item должен оставаться атомарным.object-fit и
max-width: 100% для корректного расчета Masonry.HTML-разметка должна предусматривать возможность сортировки и фильтрации, если планируется динамическое изменение содержимого. Для этого часто используют дополнительные классы или data-атрибуты:
<div class="grid-item" data-category="nature">...</div>
<div class="grid-item" data-category="architecture">...</div>
Это позволяет при необходимости применять методы Masonry для динамического скрытия и показа элементов без нарушения основной структуры.
Контейнер и элементы должны иметь одинаковые базовые стили, обеспечивающие правильное позиционирование:
.grid {
display: flex; /* Masonry может работать с flex или position:absolute */
flex-wrap: wrap;
margin-left: -10px; /* компенсирует отступы между элементами */
}
.grid-item {
margin-left: 10px;
margin-bottom: 10px;
}
position: absolute через Masonry,
важно задавать размеры элементов через CSS или атрибуты, чтобы
библиотека могла правильно рассчитать координаты.Для сетки с изображениями HTML-разметка должна обеспечивать загрузку
контента перед инициализацией Masonry. Обычно это достигается через
библиотеку imagesLoaded:
<script>
var grid = document.querySelector('.grid');
var msnry;
imagesLoaded(grid, function() {
msnry = new Masonry(grid, {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
percentPosition: true
});
});
</script>
Структурный элемент .grid-sizer
(опционально) используется для определения ширины колонок, что позволяет
Masonry рассчитывать позиционирование всех блоков.
<div class="grid">
<div class="grid-sizer"></div>
<div class="grid-item"><img src="img1.jpg" alt=""><p>Описание 1</p></div>
<div class="grid-item"><img src="img2.jpg" alt=""><p>Описание 2</p></div>
<div class="grid-item"><img src="img3.jpg" alt=""><p>Описание 3</p></div>
<div class="grid-item"><img src="img4.jpg" alt=""><p>Описание 4</p></div>
</div>
.grid-sizer задаёт базовую ширину колонки..grid-sizer) улучшает точность расчета колонок.grid-item.Такой подход к HTML-разметке обеспечивает оптимальное поведение Masonry, минимальные пустые пространства и гибкость при работе с различным контентом.