Библиотека Masonry позволяет создавать гибкие сетки с динамическим расположением элементов, автоматически подстраивая их под доступное пространство. Один из ключевых аспектов настройки сетки — управление шириной колонок. Процентная ширина колонок является удобным инструментом для адаптивного дизайна, так как позволяет сетке корректно перестраиваться при изменении размера окна браузера.
Процентная ширина колонок задается через CSS для элементов сетки. Masonry использует ширину элемента-контейнера и ширину колонки, чтобы вычислить, сколько колонок будет отображаться на экране.
Пример базовой структуры HTML:
<div class="grid">
<div class="grid-item">Элемент 1</div>
<div class="grid-item">Элемент 2</div>
<div class="grid-item">Элемент 3</div>
</div>
CSS с использованием процентной ширины:
.grid {
width: 100%;
}
.grid-item {
width: 30%; /* каждая колонка занимает 30% ширины контейнера */
margin-bottom: 10px;
float: left;
}
В этом примере Masonry определяет ширину колонок автоматически, но важно, чтобы ширина элементов была установлена в процентах, что позволяет сетке адаптироваться под различные разрешения экрана.
Количество колонок вычисляется исходя из ширины контейнера и ширины элемента, включая отступы. Формула для расчета:
количество колонок = floor(ширина контейнера / (ширина элемента + отступ))
Это позволяет Masonry динамически размещать элементы, выравнивая их по высоте.
columnWidth с процентамиMasonry предоставляет опцию columnWidth, которая может
принимать как число в пикселях, так и CSS-селектор. При работе с
процентными значениями обычно используется селектор первого
элемента:
const grid = document.querySelector('.grid');
const msnry = new Masonry(grid, {
itemSelector: '.grid-item',
columnWidth: '.grid-item',
percentPosition: true
});
Ключевые моменты:
columnWidth: '.grid-item' сообщает Masonry использовать
ширину элемента как базовую для расчета колонок.percentPosition: true указывает библиотеке использовать
процентные значения вместо фиксированных пикселей, что критично для
адаптивного дизайна.При работе с процентной шириной колонок необходимо учитывать
внешние отступы (margin) элементов.
Masonry учитывает их при размещении, но если они не включены в расчет
ширины, сетка может “ломаться” на небольших разрешениях.
Пример правильного подхода с учетом отступов:
.grid-item {
width: 30%;
margin: 1.66%; /* общий отступ между колонками */
float: left;
}
Здесь 30% + 2 × 1.66% ≈ 33.32%, что позволяет разместить ровно три колонки без наложений.
Процентная ширина колонок упрощает создание адаптивных сеток с помощью медиазапросов:
@media (max-width: 1024px) {
.grid-item {
width: 45%;
margin: 2.5%;
}
}
@media (max-width: 600px) {
.grid-item {
width: 100%;
margin: 0 0 10px 0;
}
}
Masonry автоматически перераспределяет элементы, используя новые ширины и отступы, что обеспечивает корректное отображение на любых устройствах.
При работе с большим количеством элементов рекомендуется:
resize, если Masonry
инициализируется вручную.Пример с автоматическим обновлением:
window.addEventListener('resize', () => {
msnry.layout();
});
columnWidth через селектор и включать
percentPosition: true.Процентная ширина колонок — это основной инструмент для создания гибких и адаптивных сеток, который позволяет Masonry эффективно использовать пространство и поддерживать визуальную гармонию независимо от размеров экрана.