Isotope — это библиотека для создания динамических сеток и фильтрации элементов на веб-страницах. Один из ключевых аспектов работы с сеткой — правильное управление размерами элементов, особенно когда они должны иметь фиксированную ширину и высоту. Это важно для стабильного отображения сетки, равномерного распределения элементов и корректной работы анимаций при фильтрации или сортировке.
Фиксированные размеры задаются через CSS с использованием свойств
width и height. Isotope ориентируется на эти
значения при вычислении расположения элементов в сетке. Например:
.grid-item {
width: 200px;
height: 150px;
}
При таком определении каждый элемент будет иметь одинаковую ширину и высоту, а Isotope сможет точно рассчитывать позиции элементов без необходимости адаптации под содержимое.
percentPositionЕсли сетка расположена внутри контейнера с изменяющейся шириной,
рекомендуется включать опцию percentPosition при
инициализации Isotope:
var grid = document.querySelector('.grid');
var iso = new Isotope(grid, {
itemSelector: '.grid-item',
layoutMode: 'fitRows',
percentPosition: true
});
percentPosition: true позволяет использовать
процентные значения в CSS для ширины элементов и
гарантирует, что сетка будет корректно масштабироваться при изменении
ширины контейнера.
.grid-item {
width: 25%; /* 4 элемента в ряд */
height: 200px; /* фиксированная высота */
}
Для фиксированных размеров оптимальны режимы
fitRows и
masonry:
fitRows: располагает элементы рядами,
выравнивая их по верхнему краю. Фиксированные размеры упрощают расчет
количества элементов в ряду.masonry: используется, когда элементы
имеют одинаковую ширину, но различную высоту. При полностью
фиксированных размерах masonry также работает стабильно, но теряется
преимущество «вытягивания» элементов по высоте.Пример инициализации fitRows с фиксированными
элементами:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitRows',
transitionDuration: '0.4s'
});
Чтобы фиксированные размеры элементов учитывали внутренние
отступы и границы, рекомендуется использовать свойство
box-sizing: border-box:
.grid-item {
box-sizing: border-box;
width: 200px;
height: 150px;
padding: 10px;
border: 2px solid #ccc;
}
Без border-box фактическая ширина элемента будет больше
заданной, что нарушит расчет Isotope и приведет к некорректному
расположению сетки.
Если размеры элементов меняются после загрузки страницы (например, через JavaScript или при загрузке изображений), необходимо перезапускать Isotope, чтобы перерассчитать сетку:
imagesLoaded('.grid', function() {
iso.layout();
});
Использование imagesLoaded важно, если элементы содержат
изображения, так как их загрузка влияет на высоту блока. Для полностью
фиксированных размеров это можно опустить, но при любых динамических
изменениях фиксированная высота должна быть гарантирована.
Для более точного управления фиксированными размерами элементов можно
использовать ширину колонок, задаваемую в CSS или через
опцию columnWidth:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'masonry',
columnWidth: 200
});
При этом все элементы будут располагаться согласно фиксированной ширине колонок, а пустое пространство между элементами минимизируется.
Фиксированные размеры упрощают работу с анимацией при фильтрации или сортировке. Можно задать CSS-переход для плавного изменения положения элементов:
.grid-item {
transition: transform 0.4s, opacity 0.4s;
}
Isotope автоматически обновляет transform каждого
элемента, а фиксированная ширина и высота позволяют избежать «прыжков» и
непредсказуемого смещения элементов.
width и height в CSS для всех
элементов.box-sizing: border-box для корректного
учета отступов и границ.percentPosition: true при процентной ширине
элементов.layoutMode (fitRows
для одинаковых размеров, masonry для одинаковой
ширины).layout().Фиксированные размеры создают стабильную и предсказуемую сетку, упрощают расчет позиций и обеспечивают корректное поведение при фильтрации, сортировке и анимации.