Перейти к содержимому

Flexbox

Модуль для работы с flexbox раскладкой — гибкое выравнивание и распределение элементов.

<!-- Flex контейнер -->
<div class="flex">
<div>Элемент 1</div>
<div>Элемент 2</div>
<div>Элемент 3</div>
</div>
<!-- Вертикальная колонка -->
<div class="flex-col">
<div>Элемент 1</div>
<div>Элемент 2</div>
<div>Элемент 3</div>
</div>
<!-- Горизонтальный ряд -->
<div class="flex-row">
<div>Элемент 1</div>
<div>Элемент 2</div>
</div>
<!-- С переносом -->
<div class="flex-wrap">
<div>Элемент 1</div>
<div>Элемент 2</div>
<div>Элемент 3</div>
</div>
КлассCSS свойство
.flex-rowflex-direction: row
.flex-row-reverseflex-direction: row-reverse
.flex-col (.flex-col)flex-direction: column
.flex-col-reverse (.flex-col-reverse)flex-direction: column-reverse
<!-- Ряд (по умолчанию) -->
<div class="flex flex-row gap-2">
<div class="bg-primary-100 p-4">1</div>
<div class="bg-primary-100 p-4">2</div>
<div class="bg-primary-100 p-4">3</div>
</div>
<!-- Колонка -->
<div class="flex flex-col gap-2">
<div class="bg-primary-100 p-4">1</div>
<div class="bg-primary-100 p-4">2</div>
<div class="bg-primary-100 p-4">3</div>
</div>
КлассCSS свойство
.items-startalign-items: flex-start
.items-endalign-items: flex-end
.items-centeralign-items: center
.items-baselinealign-items: baseline
.items-stretchalign-items: stretch
<!-- По центру вертикально -->
<div class="flex items-center h-32 border">
<div class="bg-primary-100 p-4">По центру</div>
</div>
<!-- По верху -->
<div class="flex items-start h-32 border">
<div class="bg-primary-100 p-4">По верху</div>
</div>
<!-- По низу -->
<div class="flex items-end h-32 border">
<div class="bg-primary-100 p-4">По низу</div>
</div>
КлассCSS свойство
.justify-startjustify-content: flex-start
.justify-endjustify-content: flex-end
.justify-centerjustify-content: center
.justify-betweenjustify-content: space-between
.justify-aroundjustify-content: space-around
.justify-evenlyjustify-content: space-evenly
<!-- По центру горизонтально -->
<div class="flex justify-center gap-4">
<div class="bg-primary-100 p-4">1</div>
<div class="bg-primary-100 p-4">2</div>
<div class="bg-primary-100 p-4">3</div>
</div>
<!-- Распределение с промежутками -->
<div class="flex justify-between gap-4">
<div class="bg-primary-100 p-4">1</div>
<div class="bg-primary-100 p-4">2</div>
<div class="bg-primary-100 p-4">3</div>
</div>
<!-- По правому краю -->
<div class="flex justify-end gap-4">
<div class="bg-primary-100 p-4">1</div>
<div class="bg-primary-100 p-4">2</div>
</div>

Для многократно обёрнутого flex-контейнера:

КлассCSS свойство
.content-startalign-content: flex-start
.content-endalign-content: flex-end
.content-centeralign-content: center
.content-betweenalign-content: space-between
.content-aroundalign-content: space-around
.content-baselinealign-content: baseline
.content-stretchalign-content: stretch
<!-- Центрирование нескольких строк -->
<div class="flex flex-wrap content-center h-64 border gap-2">
<div class="bg-primary-100 p-4">1</div>
<div class="bg-primary-100 p-4">2</div>
<div class="bg-primary-100 p-4">3</div>
<div class="bg-primary-100 p-4">4</div>
</div>
КлассCSS свойство
.self-startalign-self: flex-start
.self-endalign-self: flex-end
.self-centeralign-self: center
.self-baselinealign-self: baseline
.self-stretchalign-self: stretch
<div class="flex items-center h-32 border gap-4">
<div class="bg-primary-100 p-4">1</div>
<div class="self-start bg-primary-100 p-4">2 (по верху)</div>
<div class="self-end bg-primary-100 p-4">3 (по низу)</div>
<div class="bg-primary-100 p-4">4</div>
</div>

##伸缩 (flex)

КлассCSS свойство
.flex-0flex: 0 0 auto
.flex-autoflex: 1 1 auto
.flex-1flex: 1
.flex-noneflex: none
<!-- Равномерное распределение -->
<div class="flex gap-4">
<div class="flex-1 bg-primary-100 p-4">1</div>
<div class="flex-1 bg-primary-100 p-4">2</div>
<div class="flex-1 bg-primary-100 p-4">3</div>
</div>
<!-- Элемент фиксированной ширины + растягивающийся -->
<div class="flex gap-4">
<div class="flex-none w-32 bg-primary-100 p-4">Фиксированный</div>
<div class="flex-1 bg-primary-100 p-4">Растягивающийся</div>
</div>
КлассCSS свойство
.grow-0flex-grow: 0
.grow-1flex-grow: 1
.grow-2flex-grow: 2
.grow-3flex-grow: 3
<!-- Второй элемент растягивается больше -->
<div class="flex gap-4">
<div class="grow-1 bg-primary-100 p-4">1</div>
<div class="grow-2 bg-primary-100 p-4">2 (больше)</div>
<div class="grow-1 bg-primary-100 p-4">3</div>
</div>
КлассCSS свойство
.shrink-0flex-shrink: 0
.shrink-1flex-shrink: 1
.shrink-2flex-shrink: 2
<!-- Первый элемент не сжимается -->
<div class="flex gap-4">
<div class="shrink-0 w-48 bg-primary-100 p-4">Не сжимается</div>
<div class="shrink-1 bg-primary-100 p-4">Сжимается</div>
</div>
КлассCSS свойство
.order-0.order-10order: 010
.order-lastorder: 99999
<!-- Изменение порядка -->
<div class="flex gap-4">
<div class="order-2 bg-primary-100 p-4">1 (третий)</div>
<div class="order-1 bg-primary-100 p-4">2 (второй)</div>
<div class="order-0 bg-primary-100 p-4">3 (первый)</div>
</div>
<header class="flex items-center justify-between px-6 py-4 border-b">
<a href="/" class="text-xl font-bold">Логотип</a>
<nav class="flex items-center gap-6">
<a href="/about" class="hover:text-primary-500">О нас</a>
<a href="/products" class="hover:text-primary-500">Продукты</a>
<a href="/contact" class="hover:text-primary-500">Контакты</a>
</nav>
</header>
<div class="border rounded-lg overflow-hidden">
<img src="image.jpg" alt="Изображение" class="w-full h-48" />
<div class="p-4">
<h3 class="text-lg font-bold mb-2">Заголовок</h3>
<p class="text-gray-600">Описание</p>
</div>
<div class="flex justify-between items-center px-4 py-3 bg-gray-50 border-t">
<span class="text-primary-500 font-bold">$99.99</span>
<button
class="bg-primary-500 text-white px-4 py-2 rounded hover:bg-primary-600"
>
Купить
</button>
</div>
</div>
<form class="flex flex-col gap-4">
<div class="flex flex-col gap-1">
<label class="text-sm font-medium">Email</label>
<input type="email" class="border rounded px-4 py-2" />
</div>
<div class="flex flex-col gap-1">
<label class="text-sm font-medium">Пароль</label>
<input type="password" class="border rounded px-4 py-2" />
</div>
<button type="submit" class="bg-primary-500 text-white px-4 py-2 rounded">
Войти
</button>
</form>
<div class="flex flex-wrap gap-4">
<div class="w-48">
<img src="photo1.jpg" class="w-full h-32 rounded" />
<p class="text-center mt-2 text-sm">Подпись 1</p>
</div>
<div class="w-48">
<img src="photo2.jpg" class="w-full h-32 rounded" />
<p class="text-center mt-2 text-sm">Подпись 2</p>
</div>
<div class="w-48">
<img src="photo3.jpg" class="w-full h-32 rounded" />
<p class="text-center mt-2 text-sm">Подпись 3</p>
</div>
</div>
КатегорияКлассы
Displayflex, flex-col, flex-row, flex-wrap, flex-nowrap
Directionflex-row, flex-row-reverse, flex-col, flex-col-reverse
Align Itemsitems-start, items-end, items-center, items-baseline, items-stretch
Justifyjustify-start, justify-end, justify-center, justify-between, justify-around, justify-evenly
Align Contentcontent-start, content-end, content-center, content-between, content-around, content-stretch
Align Selfself-start, self-end, self-center, self-baseline, self-stretch
Flexflex-0, flex-auto, flex-1, flex-none
Growgrow, grow-0, grow-1, grow-2, grow-3
Shrinkshrink, shrink-0, shrink-1, shrink-2, shrink-3
Orderorder-0order-11, order-last
  • Gap — отступы между элементами
  • Grid — сеточная раскладка
  • Отступы — margin и padding