Режим fitColumns — это один из алгоритмов компоновки элементов в библиотеке Isotope, предназначенный для размещения блоков в виде равномерной сетки с колонками одинаковой ширины. Основная задача режима — распределить элементы по строкам, сохраняя выравнивание по колонкам, аналогично табличной структуре.
В отличие от режима masonry, где элементы могут иметь разную высоту и формируют «каскадную» структуру, fitColumns создаёт строгую сетку, в которой:
Это делает режим удобным для интерфейсов, где важна предсказуемая геометрия сетки.
Алгоритм fitColumns работает по следующей логике:
Схематично структура выглядит так:
[ A ][ B ][ C ]
[ D ][ E ][ F ]
[ G ][ H ][ I ]
Если один элемент выше остальных:
[ A ][ B ][ C ]
[ D ][ EEEEE ][ F ]
[ G ][ H ][ I ]
Высота строки увеличивается до высоты элемента E.
Режим включается через параметр layoutMode при инициализации Isotope.
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitColumns'
});
| Параметр | Назначение |
|---|---|
layoutMode |
указывает используемый алгоритм компоновки |
itemSelector |
селектор элементов сетки |
fitColumns |
объект с дополнительными настройками |
Для работы fitColumns используется стандартная структура контейнера и элементов.
<div class="grid">
<div class="grid-item">1</div>
<div class="grid-item">2</div>
<div class="grid-item">3</div>
<div class="grid-item">4</div>
<div class="grid-item">5</div>
</div>
CSS обычно задаёт ширину элементов.
.grid-item {
width: 200px;
margin-bottom: 10px;
}
Фиксированная ширина элементов помогает алгоритму корректно вычислять количество колонок.
Режим поддерживает несколько параметров конфигурации.
Параметр gutter задаёт расстояние между колонками.
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitColumns',
fitColumns: {
gutter: 20
}
});
Это создаёт горизонтальный отступ между элементами.
[ A ] 20px [ B ] 20px [ C ]
Позволяет явно задать ширину колонки.
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitColumns',
fitColumns: {
columnWidth: 220
}
});
Если параметр не указан, используется ширина элемента.
Можно использовать отдельный элемент как шаблон ширины колонок.
fitColumns: {
columnWidth: '.grid-sizer'
}
HTML:
<div class="grid">
<div class="grid-sizer"></div>
<div class="grid-item"></div>
<div class="grid-item"></div>
</div>
CSS:
.grid-sizer {
width: 200px;
}
Этот подход часто применяется для адаптивных сеток.
При изменении ширины контейнера Isotope автоматически пересчитывает:
Пример:
window.addEventListener('resize', function() {
iso.layout();
});
Однако обычно Isotope делает это автоматически.
Для создания адаптивной сетки используется процентная ширина элементов.
CSS:
.grid-item {
width: 25%;
}
Инициализация:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitColumns'
});
При изменении ширины контейнера:
1200px → 4 колонки
800px → 3 колонки
600px → 2 колонки
Таким образом сетка динамически перестраивается.
fitColumns полностью совместим с системой фильтрации Isotope.
Инициализация:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitColumns'
});
Фильтрация:
iso.arrange({
filter: '.category-a'
});
После фильтрации:
fitColumns поддерживает сортировку элементов.
Настройка:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitColumns',
getSortData: {
name: '.name',
number: '.number parseInt'
}
});
Сортировка:
iso.arrange({
sortBy: 'name'
});
После изменения порядка:
| Характеристика | fitColumns | masonry |
|---|---|---|
| Тип сетки | строгая | каскадная |
| Высота строк | фиксируется по самому высокому элементу | свободная |
| Выравнивание | по строкам | по колонкам |
| Визуальный стиль | табличный | «Pinterest» |
[ A ]
[ B ][ C ]
[ D ][ E ][ F ]
[ A ][ B ][ C ]
[ D ][ E ][ F ]
Таким образом fitColumns обеспечивает более структурированную компоновку.
Каждый элемент получает абсолютное позиционирование.
Пример вычисленных координат:
A → left: 0px
B → left: 220px
C → left: 440px
При переходе на новую строку изменяется координата top:
D → top: 180px
E → top: 180px
F → top: 180px
Эти координаты рассчитываются Isotope автоматически.
fitColumns считается одним из самых быстрых режимов компоновки в Isotope, поскольку:
Алгоритм фактически работает как:
row = floor(index / columns)
column = index % columns
Это делает режим эффективным даже при большом количестве элементов.
Несмотря на простоту, fitColumns имеет ряд особенностей:
Если элементы имеют сильно различающуюся высоту:
[ A ][ B ][ C ]
и
B = очень высокий
то вся строка увеличится по высоте.
В результате может появляться большое вертикальное пространство.
Последняя строка может содержать меньше элементов:
[ A ][ B ][ C ]
[ D ][ E ]
Это стандартное поведение режима.
Isotope поддерживает анимацию при изменении расположения элементов.
Пример:
var iso = new Isotope('.grid', {
itemSelector: '.grid-item',
layoutMode: 'fitColumns',
transitionDuration: '0.4s'
});
При фильтрации или сортировке элементы плавно перемещаются на новые позиции.
fitColumns чаще всего используется в интерфейсах, где требуется равномерная структура элементов.
Типичные сценарии:
товар | товар | товар
товар | товар | товар
фото | фото | фото
фото | фото | фото
карточка | карточка | карточка
карточка | карточка | карточка
Строгая сетка облегчает восприятие интерфейса.
Режим особенно полезен когда:
fitColumns менее эффективен в случаях:
В таких ситуациях обычно выбирается masonry.
Ключевые свойства fitColumns:
Режим остаётся одним из наиболее используемых алгоритмов компоновки в Isotope при разработке структурированных интерфейсов и сеточных макетов.