Что такое Flexbox и зачем он нужен
Flexbox — это модуль CSS, который упрощает создание гибких и адаптивных макетов. Он позволяет легко выравнивать элементы, распределять пространство и управлять порядком отображения без сложных вычислений. Раньше для таких задач использовали float и таблицы, но Flexbox делает код чище и предсказуемее.
Основа Flexbox — это контейнер и его дочерние элементы. Контейнеру задаётся display: flex, после чего все прямые потомки становятся flex-элементами. Они автоматически выстраиваются в строку или колонку, а их размеры и положение управляются через свойства Flexbox.
Свойства flex-контейнера
Контейнер управляет расположением своих элементов. Основные свойства:
- — направление оси (row, column, row-reverse, column-reverse).
- — выравнивание по главной оси (flex-start, center, space-between, space-around).
- — выравнивание по поперечной оси (stretch, center, flex-start, flex-end).
- — перенос элементов на новую строку (nowrap, wrap, wrap-reverse).
Например, чтобы центрировать элементы по вертикали и горизонтали, достаточно задать контейнеру:
.container { display: flex; justify-content: center; align-items: center;
}
Свойства flex-элементов
Отдельные элементы тоже можно гибко настраивать:
- — коэффициент растяжения элемента относительно других.
- — коэффициент сжатия при нехватке места.
- — базовый размер элемента до распределения свободного пространства.
- — индивидуальное выравнивание элемента по поперечной оси.
Часто используют сокращённое свойство flex, которое объединяет grow, shrink и basis. Например, flex: 1 0 200px означает, что элемент будет растягиваться, но не сжиматься, с базовым размером 200px.
Практические примеры
До Flexbox для создания адаптивного меню часто использовали float или inline-block. Код получался громоздким и ненадёжным. С Flexbox всё проще:
.menu { display: flex; justify-content: space-between; align-items: center;
}
.menu-item { flex: 1; text-align: center;
}
Элементы меню автоматически займут равное пространство и выровняются по центру. При изменении размера экрана они адаптивно руются.
Сравнение Flexbox и CSS Grid
| Критерий | ||
|---|---|---|
| Измерение | Одномерное (строка или колонка) | Двумерное (сетка) |
| Использование | Компоненты, выравнивание | Общие макеты страниц |
| Контроль | Управление пространством вдоль оси | Точное позиционирование в сетке |
Flexbox и Grid не конкурируют, а дополняют друг друга. Flexbox лучше для мелких компонентов вроде навигации или карточек, а Grid — для общего макета страницы.
Типичные ошибки и ограничения
Новички часто злоупотребляют Flexbox там, где хватит простых средств. Не стоит использовать Flexbox для всего подряд — иногда block или inline-block эффективнее.
Распространённые ошибки:
- Забывают задать flex-basis, из-за чего элементы ведут себя непредсказуемо.
- Используют margin: auto вместо justify-content или align-items.
- Не учитывают, что flex-shrink по умолчанию равен 1 — элементы сжимаются, если не задано иное.
Flexbox не подходит для сложных табличных данных или точного пиксельного позиционирования. Также в очень старых браузерах требуется fallback.
Чек-лист применения Flexbox
- Определите, нужно ли одномерное выравнивание.
- Задайте контейнеру display: flex.
- Настройте направление и перенос с помощью flex-direction и flex-wrap.
- Выровняйте элементы по осям через justify-content и align-items.
- При необходимости йте отдельные элементы через flex-grow, flex-shrink, align-self.
- Проверьте в разных браузерах.
Частые вопросы
Когда стоит использовать Flexbox вместо Grid?
Flexbox идеален для выравнивания элементов в одном измерении — строке или колонке. Grid лучше для сложных двумерных макетов. Часто их комбинируют.
Какие основные ошибки допускают при работе с Flexbox?
Часто забывают задать flex-basis, злоупотребляют margin: auto вместо свойств выравнивания, неправильно используют flex-grow и flex-shrink.
Поддерживается ли Flexbox во всех браузерах?
Да, все современные браузеры полностью поддерживают Flexbox. Для старых версий IE может потребоваться вендорный префикс -ms-.