Flexbox

↑ 1.3 CSS и SASS · ← Предыдущая · → Следующая

Желательно~3 мин чтенияУровень: junior

Зачем это на собесе

Flexbox — основной инструмент одномерной раскладки; спрашивают оси, flex: 1 и центрирование.

Объяснение

Flex-контейнер раскладывает элементы вдоль главной оси (flex-direction), поперёк — поперечная ось.

Свойство контейнераЗначение
display: flexвключить
flex-directionrow / column / *-reverse
justify-contentпо главной оси: flex-start, center, space-between, space-around, space-evenly
align-itemsпо поперечной: stretch, center, flex-start, baseline
flex-wrapnowrap / wrap
gapпромежутки
align-contentстроки при wrap
Свойство элементаЗначение
flex-growдоля свободного места
flex-shrinkкак сжимается при нехватке
flex-basisбазовый размер
flex: 11 1 0% — занять всё свободное место поровну
align-self, orderиндивидуальное выравнивание, порядок
.row { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.center { display: flex; place-content: center; min-height: 100vh; }   /* центрирование */
.sidebar { flex: 0 0 240px; }
.content { flex: 1; min-width: 0; }   /* min-width: 0 позволяет сжиматься длинному содержимому */

Нюансы и подводные камни

  • У flex-элементов min-width: auto — длинный текст/pre не сжимается: нужен min-width: 0 и overflow.
  • margin: auto внутри flex поглощает свободное место (удобно для «оттолкнуть» элемент).
  • flex-basis приоритетнее width в главной оси.
  • gap поддерживается во flex во всех современных браузерах.
  • Для двумерной раскладки используйте Grid.

Практика

  1. Сверстайте шапку: логотип слева, меню по центру, кнопки справа.
  2. Сделайте «липкий» футер с min-height и flex: 1.
  3. Воспроизведите и исправьте проблему с длинным текстом в flex-элементе.

Вопросы с ответами

Связанные темы