Masonry — это библиотека для построения сеток с динамической высотой элементов, которая автоматически размещает блоки так, чтобы минимизировать пустое пространство. Одним из ключевых аспектов настройки сетки является управление количеством колонок, что напрямую влияет на визуальную плотность и адаптивность макета.
columnWidthСвойство columnWidth задаёт ширину колонок в пикселях
или в виде CSS-селектора элемента. Masonry использует его для расчёта,
сколько колонок может поместиться в контейнере:
const msnry = new Masonry('.grid', {
itemSelector: '.grid-item',
columnWidth: 200,
gutter: 10
});
200px) или элемент сетки, ширина которого
используется как шаблон.Если columnWidth указан в процентах или используется
элемент-шаблон с адаптивной шириной, количество колонок автоматически
изменяется при изменении ширины контейнера.
Masonry не ограничивает адаптивность сетки. Количество колонок можно изменять через CSS, задавая размер элементов сетки в процентах:
.grid-item {
width: 33.33%; /* 3 колонки */
}
@media (max-width: 800px) {
.grid-item {
width: 50%; /* 2 колонки */
}
}
@media (max-width: 500px) {
.grid-item {
width: 100%; /* 1 колонка */
}
}
resize: true.Для динамических интерфейсов, где элементы добавляются или удаляются,
необходимо пересчитывать количество колонок вручную через метод
layout():
msnry.appended(newItems); // Добавление новых элементов
msnry.layout(); // Пересчёт расположения колонок
Если требуется полностью изменить ширину колонок после инициализации:
msnry.options.columnWidth = 150;
msnry.layout();
Можно задать columnWidth как элемент
сетки, что позволяет использовать разные размеры блоков без
жесткой фиксации ширины:
const msnry = new Masonry('.grid', {
itemSelector: '.grid-item',
columnWidth: '.grid-sizer',
percentPosition: true
});
.grid, задающий базовую ширину колонок.Эта схема особенно полезна для сложных сеток, где элементы могут иметь различную ширину, но требуется единообразное распределение по колонкам.
Для более гибкой настройки количества колонок можно использовать
событие resize окна:
window.addEventListener('resize', () => {
const containerWidth = document.querySelector('.grid').clientWidth;
const newColumnWidth = containerWidth > 1200 ? 250 : 150;
msnry.options.columnWidth = newColumnWidth;
msnry.layout();
});
Помимо ширины колонок, важно учитывать gutter — промежуток между колонками:
const msnry = new Masonry('.grid', {
itemSelector: '.grid-item',
columnWidth: 200,
gutter: 20
});
gutter уменьшает количество колонок,
помещающихся в контейнере.grid-sizer) для адаптивных макетов.Эти методы позволяют Masonry обеспечивать оптимальное количество колонок для любого макета, сохраняя гибкость и адаптивность интерфейса.