Flex-утилиты

Полный набор классов для Flexbox-вёрстки: направление, выравнивание, перенос, gap и flex-grow. Все утилиты имеют адаптивные варианты для каждого брейкпоинта.

Активация flex

КлассCSS
.gr-flexdisplay: flex
.gr-inline-flexdisplay: inline-flex

Направление (flex-direction)

КлассCSS
.gr-flex-rowflex-direction: row
.gr-flex-colflex-direction: column

Перенос (flex-wrap)

КлассCSS
.gr-flex-wrapflex-wrap: wrap
.gr-flex-nowrapflex-wrap: nowrap

Выравнивание по главной оси (justify-content)

КлассCSSПоведение
.gr-flex-startjustify-content: flex-startЭлементы в начале
.gr-flex-centerjustify-content: centerЭлементы по центру
.gr-flex-endjustify-content: flex-endЭлементы в конце
.gr-flex-betweenjustify-content: space-betweenРавномерно с отступами по краям
.gr-flex-aroundjustify-content: space-aroundРавномерно с половинными отступами
.gr-flex-evenlyjustify-content: space-evenlyРавномерно с одинаковыми отступами
justify-content примеры

.gr-flex-start

1
2
3

.gr-flex-center

1
2
3

.gr-flex-between

1
2
3

.gr-flex-evenly

1
2
3

Выравнивание по поперечной оси (align-items)

КлассCSS
.gr-flex-items-startalign-items: flex-start
.gr-flex-items-centeralign-items: center
.gr-flex-items-endalign-items: flex-end
.gr-flex-items-stretchalign-items: stretch
.gr-flex-items-baselinealign-items: baseline
align-items примеры

.gr-flex-items-center

Высокий
Низкий
Ещё выше

Индивидуальное выравнивание (align-self)

КлассCSS
.gr-flex-self-startalign-self: flex-start
.gr-flex-self-centeralign-self: center
.gr-flex-self-endalign-self: flex-end
.gr-flex-self-stretchalign-self: stretch

Flex-grow

КлассCSS
.gr-flex-1flex: 1

Gap-утилиты

Классы отступа общие для флекса, сетки и раскладок data-gr-layout: один .gr-gap вместо отдельных флекс- и грид-модификаторов.

КлассЗначение gapДо md (768px)С md
.gr-gap-smvar(--gr-gap-sm)0.375rem0.5rem
.gr-gapvar(--gr-gap)0.75rem1rem
.gr-gap-lgvar(--gr-gap-lg)1.25rem2rem

Отдельных вариантов с суффиксом брейкпоинта нет: значение меняют сами токены, поэтому один и тот же класс даёт меньший отступ на мобильном и привычный — на десктопе.

Центрирование одним классом

<div class="gr-flex gr-flex-center gr-flex-items-center">
  <div>Идеально по центру</div>
</div>
Результат
Идеально по центру

Адаптивные варианты

Все flex-утилиты имеют варианты с суффиксом брейкпоинта. Они применяются только начиная с указанного размера экрана. Доступны суффиксы: -sm, -md, -lg, -xl.

Базовый классАдаптивный вариантПрименение
.gr-flex.gr-flex-mdflex от 768px
.gr-flex-row.gr-flex-row-lgrow от 1024px
.gr-flex-col.gr-flex-col-smcolumn от 640px
.gr-flex-wrap.gr-flex-wrap-xlwrap от 1280px
.gr-flex-center.gr-flex-center-mdcenter от 768px
.gr-flex-between.gr-flex-between-lgspace-between от 1024px
.gr-flex-items-center.gr-flex-items-center-mdalign-items: center от 768px
.gr-flex-self-end.gr-flex-self-end-smalign-self: flex-end от 640px
.gr-inline-flex.gr-inline-flex-mdinline-flex от 768px
.gr-flex-1.gr-flex-1-lgflex: 1 от 1024px

Адаптивные варианты действуют от брейкпоинта и выше — накопительно, в отличие от раскладок data-gr-layout-*, где диапазоны не пересекаются. Поэтому базовый класс задаёт мобильное поведение, а суффиксные его перекрывают: .gr-flex-col .gr-flex-row-md — колонка до 768px, ряд дальше. Порядок классов в атрибуте роли не играет, решает порядок правил в CSS (smmdlgxl).

<div class="gr-flex gr-flex-col gr-flex-row-md">
  <div>На мобильных — колонка</div>
  <div>На планшетах — ряд</div>
</div>
Результат (измените ширину окна)
На мобильных — колонка
На планшетах (≥768px) — ряд

Контейнерные варианты

Направление и перенос переключаются и по ширине контейнера — ближайшего предка с .gr-cq. Суффикс тот же, с буквой c впереди: .gr-flex-row-cmd против .gr-flex-row-md, шкала — та же карта брейкпоинтов. Так собирается блок, который стоит то в боковой колонке, то в содержимом: столбик в узком гнезде, ряд в широком, без второй разметки и без JS.

Базовый классКонтейнерный вариантПрименение
.gr-flex-row.gr-flex-row-c{sm,md,lg,xl}row от ширины контейнера
.gr-flex-col.gr-flex-col-c{sm,md,lg,xl}column от ширины контейнера
.gr-flex-wrap.gr-flex-wrap-c{sm,md,lg,xl}wrap от ширины контейнера
<div class="gr-cq">
  <div class="gr-flex gr-flex-col gr-flex-row-csm gr-gap">
    <div>В гнезде уже 640px — столбик</div>
    <div>От 640px ширины гнезда — ряд</div>
  </div>
</div>

Только направление и перенос. Выравнивания (.gr-flex-center, .gr-flex-items-*, .gr-flex-self-*), .gr-flex-1 и сам display контейнерных вариантов не получили: по ширине гнезда меняется, куда течёт ряд, а не как он выровнен, и каждый суффикс — ещё четыре правила на класс. Показать или спрятать блок по гнезду — .gr-hidden-c* / .gr-block-c* из утилит (контейнерные запросы).

Примеры использования

Флекс — рабочая лошадка одномерных раскладок: всё, что выстраивается в ряд или колонку, собирается из него и токена .gr-gap-*. Рецепты ниже — от шапки до скролл-ленты; двумерные сетки и именованные области — территория грида.

Шапка с навигацией

<header class="gr-flex gr-flex-between gr-flex-items-center gr-p-4">
  <div class="gr-flex gr-flex-items-center gr-gap">
    <strong>Logo</strong>
    <nav class="gr-flex gr-gap">
      <a href="#">Home</a>
      <a href="#">About</a>
      <a href="#">Contact</a>
    </nav>
  </div>
  <button>Login</button>
</header>
Результат
Login

Карточки в ряд с переносом

<div class="gr-flex gr-flex-wrap gr-gap">
  <div>Карточка 1</div>
  <div>Карточка 2</div>
  <div>Карточка 3</div>
</div>
Результат

Карточка 1

Карточка 2

Карточка 3

Идеальное центрирование

Пустое состояние, сплэш, содержимое модалки — один блок точно по центру обеих осей. Флексом это пара .gr-flex-center .gr-flex-items-center; когда центрируется ровно один элемент, то же самое короче делает .gr-grid-place-center из грида. Флекс-вариант выигрывает, когда в центре стоит стопка: спиннер, подпись и кнопка складываются в .gr-flex-col с зазором.

<div class="gr-flex gr-flex-center gr-flex-items-center gr-min-h-screen">
  <div class="gr-flex gr-flex-col gr-flex-items-center gr-gap-sm">
    <span class="gr-spinner gr-spinner-lg"></span>
    <p class="gr-m-0 gr-text-ink-secondary">Загружаем проекты…</p>
  </div>
</div>
Центр обеих осей + стопка .gr-flex-col внутри (в демо высота ограничена)

Загружаем проекты…

Выравнивание по базовой линии

Цена «2900 ₽ /мес» и шапка секции с ссылкой «Все →» — случаи, где элементы разного кегля должны стоять на одной строчной линии, а не по центру блока: центр у разных кеглей «пляшет». .gr-flex-items-baseline сажает всех на базовую линию текста, .gr-flex-between разводит заголовок и ссылку по краям.

<!-- цена -->
<p class="gr-flex gr-flex-items-baseline gr-gap-sm">
  <span class="gr-text-4xl gr-font-extrabold">2900 ₽</span>
  <span class="gr-text-sm gr-text-ink-secondary">/мес</span>
</p>

<!-- шапка секции -->
<div class="gr-flex gr-flex-between gr-flex-items-baseline">
  <h2>Новинки</h2>
  <a href="#">Все →</a>
</div>
Разные кегли — одна базовая линия

2900 ₽ /мес

Новинки

Все →

Горизонтальная скролл-лента

Мобильный ряд категорий или карточек «с этим покупают»: ряд не переносится (.gr-flex-nowrap) и прокручивается пальцем — .gr-overflow-x-auto на контейнере. Карточкам нельзя сжиматься; класса «flex-none» в ядре нет, и он не нужен — флекс не сжимает элемент ниже его минимума, поэтому ширину ленты держит .gr-min-w-[160px] произвольным значением. Прищёлкивание к краю (scroll-snap) в утилитах не живёт — при желании это две строки своего CSS поверх той же разметки.

<div class="gr-flex gr-flex-nowrap gr-gap gr-overflow-x-auto gr-pb-2">
  <div class="gr-min-w-[160px]">Карточка</div>
  <div class="gr-min-w-[160px]">Карточка</div>
  …
</div>
Лента прокручивается по горизонтали, ряд не переносится

Кроссовки

Куртки

Рюкзаки

Кепки

Очки

Часы