Генератор Flexbox
Flexbox раскладывает элементы вдоль одной оси, и почти вся путаница в нём — от того, какая ось считается главной. Инструмент показывает это наглядно: меняете направление, и подписи у выравнивания меняются местами, потому что justify-content всегда работает по главной оси, а align-items по поперечной.
Предпросмотр
Контейнер
Выбранный элемент
Готовый CSS
Главная ось и всё остальное
Flexbox раскладывает элементы вдоль одной оси и сам делит между ними свободное место. Путаница в нём почти всегда об одном: какая ось считается главной. При direction row главная ось горизонтальная, и justify-content раздвигает элементы влево-вправо, а align-items прижимает их по вертикали. Стоит поставить column, и обе роли меняются местами.
Инструмент показывает это наглядно: вы меняете направление, и подписи у выравнивания переезжают. Кроме выравнивания настраиваются перенос строк, отступы между элементами и поведение каждого блока по отдельности — насколько он готов растягиваться и сжиматься. Готовый код собирается сразу и вставляется в стили без правки.
Свойство flex у элемента — это три числа в одном: способность расти, способность сжиматься и базовый размер. Запись flex: 1 означает, что блок разделит свободное место поровну с такими же соседями. Запись flex: 0 0 200px делает блок ровно двухсотпиксельным и запрещает ему меняться.

| Свойство | Что делает | Частое значение |
|---|---|---|
| flex-direction | Задаёт главную ось | row / column |
| justify-content | Раскладка по главной оси | space-between |
| align-items | Выравнивание по поперечной | center |
| flex-wrap | Перенос на новую строку | wrap |
| gap | Отступ между элементами | 16px |
От таблиц и float до гибкой раскладки
До двухтысячных страницы верстали таблицами: сетку строили из tr и td, потому что других инструментов раскладки не было. Затем пришли float и позиционирование — приёмы, придуманные для обтекания картинки текстом и приспособленные под колонки. Отсюда родились хаки вроде clearfix, без которых родительский блок не замечал высоты своих детей.
Рабочий черновик Flexible Box Layout появился в 2009 году, и синтаксис в нём менялся трижды: box, flexbox, flex. Из-за этого в старых руководствах встречаются три несовместимых набора свойств, и код из статьи 2011 года сегодня не работает. Устоявшаяся версия закрепилась к 2012 году, а массовая поддержка браузерами пришла к 2015-му.
Идея делить свободное место между элементами старше интернета. В металлическом наборе наборщик добивал строку шпациями, распределяя пробел между словами, — та же задача выравнивания по ширине. Grid и Flexbox вернули эту логику в браузер, отдав вычисление машине. Сегодня Flexbox поддерживают все живые браузеры, и префиксы нужны разве что для очень старых мобильных версий Safari.


Как собрать раскладку и не поймать переполнение
Начните с направления оси, дальше выберите выравнивание. Если элементы должны разъехаться по краям, берите space-between; если сгруппироваться по центру — center с заданным gap. Перенос включайте, когда блоков много и они не обязаны помещаться в одну строку: без wrap flex сожмёт их до нечитаемого размера.
Частая ошибка — забыть min-width: auto. По умолчанию flex-элемент не сжимается уже своего содержимого, поэтому длинное слово или таблица внутри распирают всю раскладку. Лечится правилом min-width: 0 на элементе. Для раскладки сразу по двум осям берите генератор Grid, а перевести размеры в относительные единицы поможет конвертер CSS-единиц. Отдельная тонкость — свойство align-content: оно управляет тем, как распределяются строки при переносе, и работает только когда строк больше одной. Его регулярно путают с align-items, и от этого выравнивание в многострочном флексе ведёт себя неожиданно.
| Черновик спецификации | 2009 |
| Устоявшийся синтаксис | 2012 |
| Массовая поддержка | 2015 |
| Осей | одна |
| flex: 1 | делить место поровну |
| flex: 0 0 200px | фиксированный размер |
| Отступ между элементами | gap |
| Лечение переполнения | min-width: 0 |
Как пользоваться
Настраиваются и контейнер, и отдельные элементы — можно задать разный grow и basis и посмотреть, как делится свободное место. Число блоков и их содержимое меняются, чтобы проверить поведение на реальных данных: одинаковые квадраты скрывают половину проблем. Готовый CSS собирается для контейнера и для тех элементов, у которых свойства отличаются от значений по умолчанию.
- Строка или колонка. От него зависит, какая ось главная и что делает каждое выравнивание.
- justify-content распределяет по главной оси, align-items прижимает по поперечной.
- Клик по блоку открывает его свойства: grow, shrink, basis, order и своё выравнивание.
- Готовые правила для контейнера и для изменённых элементов.
Частые вопросы
Какая ось считается главной
Та, вдоль которой выстраиваются элементы, и задаёт её flex-direction. При row главная — горизонтальная, при column — вертикальная. Это ключ ко всему: justify-content работает по главной оси, align-items по перпендикулярной ей. Смените направление на column — и justify-content начнёт выравнивать по вертикали.
Чем отличаются grow, shrink и basis
basis — начальный размер элемента до распределения места. grow — доля свободного места, которую он заберёт, если место осталось. shrink — доля сжатия, если места не хватило. Значения по умолчанию 0, 1 и auto: элемент не растягивается, но сжимается. Короткая запись flex: 1 разворачивается в grow 1, shrink 1, basis 0%.
Почему элемент не сжимается меньше содержимого
Из-за min-width со значением auto, которое действует на flex-элементы по умолчанию. Длинное слово или широкая картинка не дают блоку стать уже. Лечится явным min-width: 0 на элементе — это самая частая причина, по которой flex-раскладка вылезает за экран.
Чем flexbox отличается от grid
Flexbox раскладывает по одной оси и хорош там, где число элементов заранее неизвестно: панель кнопок, шапка, список тегов. Grid работает по двум осям сразу и нужен, когда важно совпадение колонок между строками. Практическое правило: если вы думаете «в ряд» — flex, если «таблицей» — grid.
Что делает align-content
Распределяет строки между собой, когда включён перенос и строк больше одной. При одной строке свойство не действует вообще — это регулярный источник недоумения. Не путать с align-items, который выравнивает элементы внутри своей строки.
Как задать промежутки между элементами
Свойством gap: оно не добавляет лишнего поля по краям. Отступы приходится потом убирать у крайних элементов, а gap ставит промежутки только между ними. Поддерживается во всех актуальных браузерах с 2020 года и работает и в flex, и в grid.
Спросите нейросети об инструменте
Похожие инструменты
Колонки и строки в fr, px и auto, объединение ячеек мышью и именованные области. Выдаёт готовый grid-template с областями.
ОткрытьКонвертер CSS-единицpx в rem, em, pt, проценты, vw и vh при своём базовом размере шрифта и вьюпорте; таблица типовых размеров и генератор clamp() для плавного шрифта.
ОткрытьГенератор clip-pathОбрезка блока по фигуре: многоугольник с перетаскиванием точек, круг, эллипс и рамка. Скосы, шестиугольники и звёзды из пресетов.
ОткрытьГенератор CSS-анимацииБольше двадцати эффектов появления, внимания и движения. Выдаёт и правило keyframes, и свойство animation целиком.
ОткрытьГенератор CSS filterРазмытие, яркость, контраст, насыщенность, оттенок, сепия и тень по контуру. Предпросмотр на своей картинке, файл остаётся в браузере.
ОткрытьГенератор border-radiusСкругление каждого угла отдельно, эллиптические радиусы через слэш, проценты и пиксели. Собирает самую короткую запись из возможных.
ОткрытьЕщё генераторы
Пароли и тестовые данные, CSS-градиенты, тени и скругления, clip-path и фильтры, анимации, Flexbox и Grid — в разделе 39 генераторов.