Masonry — это библиотека для динамической верстки сеток, которая позволяет располагать элементы в виде кирпичной кладки, оптимизируя использование пространства и создавая гибкий, адаптивный дизайн. Она особенно полезна для галерей изображений, карточек товаров и других визуальных коллекций, где элементы имеют разную высоту.
Для работы с Masonry требуется подключение самой библиотеки и, при необходимости, jQuery:
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://unpkg.com/masonry-layout@4/dist/masonry.pkgd.min.js"></script>
Инициализация осуществляется через выборку контейнера, внутри которого располагаются элементы сетки:
$('.grid').masonry({
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
percentPosition: true
});
Пояснения параметров:
true
Masonry использует проценты вместо пикселей для позиционирования, что
делает сетку более гибкой при изменении ширины контейнера.Правильная разметка сетки критически важна для корректной работы Masonry:
<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>
Masonry предоставляет множество опций для тонкой настройки:
$('.grid').masonry({
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
gutter: 20,
percentPosition: true
});
true сетка будет
выравниваться по ширине контейнера, не растягиваясь на всю ширину:$('.grid').masonry({
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
fitWidth: true
});
Masonry позволяет добавлять элементы после инициализации:
var $grid = $('.grid').masonry({
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
percentPosition: true
});
var $newItem = $('<div class="grid-item">Новый элемент</div>');
$grid.append($newItem).masonry('appended', $newItem);
Иногда требуется обновить расположение элементов после изменения их размеров или после загрузки изображений:
$grid.masonry('layout');
Для изображений часто используют событие imagesLoaded,
чтобы Masonry перестроила сетку только после полной загрузки всех
изображений:
$grid.imagesLoaded().progress(function() {
$grid.masonry('layout');
});
Для адаптивного дизайна важно использовать процентные размеры и медиазапросы в CSS:
.grid-sizer, .grid-item {
width: 33.333%;
}
@media (max-width: 768px) {
.grid-sizer, .grid-item {
width: 50%;
}
}
@media (max-width: 480px) {
.grid-sizer, .grid-item {
width: 100%;
}
}
percentPosition: true
обеспечивают плавное изменение структуры сетки при ресайзе окна.Masonry можно сочетать с CSS-анимациями для плавного появления и перестройки элементов:
.grid-item {
transition: transform 0.4s ease, opacity 0.4s ease;
}
$grid.masonry({
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
percentPosition: true
});
transform, что
делает анимацию плавной и GPU-оптимизированной.Для реализации фильтров можно комбинировать Masonry с jQuery:
$('.filter-button').on('click', function() {
var filterClass = $(this).data('filter');
$('.grid-item').hide();
$('.grid-item.' + filterClass).show();
$grid.masonry('layout');
});
imagesLoaded для корректного
отображения изображений.Masonry полностью совместим с jQuery, но также поддерживает работу без него. Использование jQuery облегчает:
$('.grid-item'))click, hover)Это делает библиотеку удобной для проектов, где jQuery уже подключен.
Эта структура позволяет создавать гибкие, визуально привлекательные сетки, легко адаптируемые к любым размерам экрана, с возможностью динамического обновления контента и плавной анимацией.