Элемент-сайзер (sizer) в Isotope служит для контроля размера
элементов сетки и расчёта расположения элементов при динамическом
изменении контента. Основная задача сайзера — задать базовую единицу
измерения для всех элементов, что особенно важно при использовании
макета masonry или packery.
Элемент-сайзер определяется в HTML как обычный элемент контейнера,
который не участвует в визуальном отображении контента. Например, это
может быть пустой div с классом grid-sizer.
Размер этого элемента будет служить опорой для вычисления размеров
остальных элементов сетки.
Пример HTML-разметки:
<div class="grid">
<div class="grid-sizer"></div>
<div class="grid-item"></div>
<div class="grid-item"></div>
<div class="grid-item"></div>
</div>
В этом примере .grid-sizer определяет ширину одного
столбца сетки, а .grid-item будут располагаться с учётом
этой ширины.
При инициализации Isotope указывается опция columnWidth,
которая может принимать селектор элемента-сайзера или числовое значение
в пикселях. Использование селектора является более гибким, так как
позволяет легко изменять размеры сетки через CSS.
Пример JavaScript-кода:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'masonry',
percentPosition: true,
masonry: {
columnWidth: '.grid-sizer'
}
});
Ключевые моменты:
itemSelector определяет элементы,
которые будут позиционироваться в сетке.layoutMode: 'masonry' задаёт метод
расположения элементов, основанный на кирпичной кладке.percentPosition: true позволяет
использовать процентные ширины, что делает сетку адаптивной.columnWidth: '.grid-sizer' указывает
на элемент-сайзер, который задаёт базовую ширину столбца.Элемент-сайзер позволяет легко менять размеры сетки при изменении ширины окна. Если сетка должна быть адаптивной, достаточно задать процентную ширину сайзера в CSS:
.grid-sizer {
width: 25%;
}
.grid-item {
width: 25%;
}
При изменении размеров окна браузера Isotope автоматически пересчитает расположение элементов на основе размера сайзера. Это устраняет необходимость вручную пересчитывать позиции каждого элемента при адаптивном дизайне.
gutterЭлемент-сайзер можно использовать совместно с отступами между
элементами (gutter). Для этого создаётся дополнительный
пустой элемент или используется CSS-свойство margin.
Пример:
.grid-sizer {
width: 20%;
}
.grid-item {
width: 20%;
margin-bottom: 20px;
}
При таком подходе Isotope корректно учитывает как ширину столбца, так и вертикальные отступы между элементами, поддерживая ровное расположение сетки.
Размеры элемента-сайзера могут меняться не только через CSS, но и
через JavaScript. После изменения размеров необходимо вызвать метод
layout для пересчёта расположения элементов:
document.querySelector('.grid-sizer').style.width = '30%';
iso.layout();
Это особенно полезно при создании интерфейсов с динамическим контентом, где количество колонок или ширина элементов может меняться в зависимости от условий отображения.
В некоторых сложных макетах допускается использование нескольких элементов-сайзеров для различных групп элементов. В этом случае каждая группа может иметь свою базовую ширину, а Isotope корректно позиционирует элементы относительно заданного сайзера.
Ключевое правило — элемент-сайзер должен быть первым дочерним
элементом контейнера .grid, чтобы Isotope корректно его
учитывал при расчётах.
percentPosition: true, чтобы избежать
постоянного пересчёта пиксельных значений при ресайзе окна.Элемент-сайзер является фундаментальным инструментом для управления адаптивной и гибкой сеткой в Isotope, обеспечивая точное позиционирование элементов и стабильность макета при изменении размеров контента или окна браузера.