edubun
Русский

Flexbox

До flexbox, чтобы выровнять блок по центру по вертикали, нужны были хитрости. С display: flex хватает двух объявлений: justify-content и align-items.

Одна строка или один столбец

Flexbox, модуль CSS Flexible Box Layout, располагает группу блоков вдоль одной линии. Задай контейнеру display: flex, и его прямые потомки, флекс-элементы, выстроятся рядом, а не друг под другом. Одного этого объявления хватит для строки меню, ряда кнопок или карточки, у которой нижняя часть должна прилипать к низу. Flexbox работает в одном измерении за раз: либо строка, либо столбец. Когда нужны строки и столбцы вместе, обычно лучше подходит grid из следующего урока.

В строке главная ось идёт слева направо (в английском), а поперечная ось сверху вниз. justify-content работает вдоль главной оси, align-items вдоль поперечной.

Две оси

Всё во flexbox описывается через две оси. Главная ось является направлением, в котором идут элементы, его задаёт flex-direction: row (по умолчанию) или column. Поперечная ось идёт под прямым углом к ней. justify-content распределяет элементы вдоль главной оси: flex-start, center, flex-end, space-between (первый и последний элементы у краёв, между ними равные промежутки) или space-around. align-items располагает их на поперечной оси: stretch (по умолчанию, все элементы высотой с самый высокий), flex-start, center или flex-end. Поэтому блок выравнивается по центру в обоих направлениях с помощью justify-content: center и align-items: center.

.bar {
  display: flex;
  justify-content: space-between;  /* logo left, menu right */
  align-items: center;             /* vertically centred */
  gap: 16px;                       /* space between items */
}
.cards { display: flex; flex-wrap: wrap; gap: 12px; }
.card  { flex: 1 1 200px; }        /* grow, shrink, start at 200px */
Панель шапки и ряд карточек, который переносится на новые строки.

Промежутки и перенос

gap добавляет пространство между элементами, не добавляя его по внешним краям: обычно нужно именно это, а с внешними отступами так сделать неудобно. По умолчанию флекс-элементы остаются на одной строке и сжимаются, чтобы поместиться, даже если их это сплющивает. flex-wrap: wrap позволяет им переходить на новую строку, когда места не хватает, так что ряд из четырёх карточек на ноутбуке может стать двумя рядами по две на планшете и одним столбцом на телефоне, без медиазапросов.

Как элементы растут и сжимаются

Сокращение flex у элемента принимает три значения. flex-grow говорит, какую долю оставшегося места элемент берёт по сравнению с соседями; flex-shrink говорит, насколько охотно он сжимается, когда места не хватает; flex-basis является его начальным размером до роста или сжатия. flex: 1 1 200px значит: начать с 200 пикселей, а затем поровну делить лишнее место с другими элементами, у которых рост тоже равен 1. flex: 1 сам по себе является сокращением для 1 1 0%, и все элементы получают одинаковую ширину. Задай одному элементу flex-grow: 2, а остальным 1, и он возьмёт вдвое больше оставшегося места, чем каждый из них.

Видимый порядок и настоящий порядок

Flexbox может менять порядок, в котором показываются элементы, с помощью flex-direction: row-reverse или свойства order, не трогая HTML. Пользуйся этим осторожно. Фокус клавиатуры и экранные дикторы по-прежнему следуют порядку в HTML, поэтому если на экране Contact стоит перед Home, а Tab сначала попадает на Home, пользователи клавиатуры запутаются. Если порядок важен для смысла, меняй его в HTML.

флекс-контейнерРодитель с display: flex
флекс-элементПрямой потомок флекс-контейнера
главная осьНаправление потока; задаётся flex-direction
justify-contentРаспределяет элементы вдоль главной оси
align-itemsРасполагает элементы на поперечной оси
gapПространство между элементами, но не у краёв
flex: 1 1 200pxрост 1, сжатие 1, основа 200px
  1. Какое объявление превращает элемент во флекс-контейнер?
    • display: flex
    • flex: 1
    • position: flex
  2. Какое свойство в строке распределяет элементы по горизонтали?
    • justify-content
    • align-items
    • flex-wrap
  3. Чем управляет justify-content при flex-direction: column?
    • Распределением по вертикали
    • Распределением по горизонтали
    • Размером шрифта
  4. Какое значение ставит первый и последний элементы у краёв с равными промежутками между ними?
    • space-between
    • space-around
    • center
  5. Какое значение align-items по умолчанию?
    • stretch
    • center
    • flex-start
  6. У четырёх элементов flex: 1 в контейнере шириной 400px без промежутков. Какова ширина каждого?
  7. Три элемента с flex-basis 0 делят 400px. У одного flex-grow 2, у остальных 1. Какова ширина большого?
  8. Что позволяет flex-wrap: wrap?
    • Элементы переходят на новую строку, когда нет места
    • Текст переносится внутри элементов
    • Элементы перекрываются
  9. Свойство order ставит Contact на экране первым, но в HTML он последний. Что всё равно доходит до него последним?
    • Фокус клавиатуры и экранные дикторы
    • Указатель мыши
    • Ничего
  10. В скольких измерениях за раз располагает элементы flexbox?
Главное
  • display: flex выстраивает прямых потомков вдоль главной оси.
  • justify-content на главной оси, align-items на поперечной, gap между элементами.
  • flex: рост сжатие основа; flex-wrap: wrap для перестраивающихся рядов; видимый порядок держи таким же, как в HTML.
Источники курса (6)
  • W3C CSS Working Group specifications: CSS Snapshot 2025, Selectors Level 4, CSS Cascading and Inheritance Level 5, CSS Color Level 4, CSS Values and Units Level 4, CSS Box Model Level 3, CSS Box Sizing Level 3, CSS Fonts Level 4, CSS Flexible Box Layout Level 1, CSS Grid Layout Level 2, Media Queries Level 4 and Level 5 (w3.org/TR/, checked 2026-10-17)
  • MDN Web Docs, Learn web development: CSS styling basics and CSS layout, and the CSS reference (developer.mozilla.org/en-US/docs/Learn_web_development/Core/Styling_basics, .../Core/CSS_layout, developer.mozilla.org/en-US/docs/Web/CSS, checked 2026-10-17)
  • W3C, CSS history and CSS1 Recommendation of 17 December 1996 (w3.org/Style/CSS20/history.html, w3.org/press-releases/1996/css1-rec, checked 2026-10-17)
  • W3C WCAG 2.2, success criteria 1.4.3 Contrast (Minimum)
  • 1.4.8 Visual Presentation, 1.4.10 Reflow, 1.4.12 Text Spacing (w3.org/TR/WCAG22/, checked 2026-10-17)
  • every code exercise checked with a Playwright probe against a reference solution.

Проверено: 2026-10-17