Masonry — это JavaScript-библиотека для создания динамических сеток, где элементы располагаются по принципу «кирпичной кладки». Один из ключевых способов управления сеткой — использование фиксированной ширины колонок. В этом режиме ширина каждой колонки задаётся явно, а Masonry автоматически рассчитывает количество колонок, исходя из ширины контейнера. Высота элементов при этом может быть разной, что создаёт эффект плотной, но асимметричной сетки.
Основное преимущество фиксированных колонок — предсказуемость макета. Независимо от размера экрана, ширина колонок остаётся постоянной, что облегчает выравнивание и контроль над расстояниями между элементами.
Для задания фиксированной ширины колонок используется опция
columnWidth при инициализации Masonry:
var elem = document.querySelector('.grid');
var msnry = new Masonry(elem, {
itemSelector: '.grid-item',
columnWidth: 200, // ширина колонок в пикселях
gutter: 20 // расстояние между колонками
});
Пояснения по ключевым параметрам:
itemSelector — CSS-селектор элементов,
которые будут участвовать в сетке.columnWidth — фиксированная ширина
колонок, может быть числом в пикселях или элементом, по ширине которого
Masonry будет рассчитывать колонки.gutter — промежуток между колонками.
Указание этого параметра важно для предотвращения слипания
элементов.Вместо явного указания числа можно задать элемент, на основе которого Masonry определит ширину колонок. Это удобно, если дизайн предполагает адаптивные блоки:
var msnry = new Masonry('.grid', {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer', // элемент-сизер определяет ширину колонок
gutter: 20
});
В этом случае .grid-sizer обычно является невидимым
элементом в сетке:
<div class="grid">
<div class="grid-sizer"></div>
<div class="grid-item"></div>
<div class="grid-item"></div>
</div>
Masonry использует ширину .grid-sizer для расчёта
количества колонок и их расположения.
Даже с фиксированной шириной колонок сетка может быть адаптивной. Masonry автоматически изменяет количество колонок при изменении ширины контейнера, сохраняя фиксированную ширину каждой колонки.
Для корректного обновления при изменении размера окна используется
метод layout():
window.addEventListener('resize', function() {
msnry.layout();
});
Это гарантирует, что элементы будут перераспределены по колонкам без наложений.
imagesLoaded:imagesLoaded( '.grid', function() {
msnry.layout();
});
gutter
помогает создавать аккуратный, визуально ровный макет. Можно
использовать отрицательные значения для эффекта наложения, но это
требует аккуратной верстки.flex для
обеспечения совместимости с адаптивными контейнерами.columnWidth не создаёт горизонтальной
прокрутки.Фиксированная ширина колонок обеспечивает точность и контроль над сеткой Masonry, сохраняя при этом гибкость расположения элементов с разной высотой. Такой подход особенно эффективен для галерей изображений, карточек товаров и блочных интерфейсов.