Flexbox (гибкая блочная модель) – это модуль CSS, который позволяет легко управлять размещением и выравниванием элементов внутри контейнера. Он предоставляет мощные инструменты для создания гибких макетов, которые адаптируются под разные размеры экранов.
Основные понятия Flexbox
- Контейнер Flexbox: Это элемент, к которому применяется свойство
display: flex. Внутри этого элемента находятся дочерние элементы, называемые флекс-элементами..container { display: flex; } - Флекс-элемент: Любой дочерний элемент контейнера Flexbox становится флекс-элементом и может быть позиционирован с помощью свойств Flexbox.
<div class="container"> <div class="item">Элемент 1</div> <div class="item">Элемент 2</div> <div class="item">Элемент 3</div> </div> - Основная ось (main axis): Направление, вдоль которого располагаются флекс-элементы. По умолчанию основная ось идет слева направо.
/* Основная ось по умолчанию */ .container { display: flex; } - Перекрестная ось (cross axis): Ось, перпендикулярная основной оси. Обычно она направлена сверху вниз.
/* Перекрестная ось по умолчанию */ .container { display: flex; } - Гибкость (flexibility): Способность флекс-элементов изменять свои размеры, чтобы заполнить доступное пространство или наоборот сжиматься при необходимости.
.item { flex: 1; /* Элемент занимает всё доступное пространство */ }
Свойства Flex-контейнера
1. display
display: flex;: Устанавливает контейнер как флекс-контейнер..container { display: flex; }display: inline-flex;: То же самое, что иflex, но делает контейнер строчным элементом..inline-container { display: inline-flex; }
2. flex-direction
Определяет направление основной оси:
row: Элементы располагаются горизонтально слева направо (по умолчанию)..container { flex-direction: row; }row-reverse: Элементы располагаются справа налево..container { flex-direction: row-reverse; }column: Элементы располагаются вертикально сверху вниз..container { flex-direction: column; }column-reverse: Элементы располагаются снизу вверх..container { flex-direction: column-reverse; }
3. justify-content
Выравнивание элементов по главной оси:
flex-start: Выровнять элементы по началу основной оси (слева/верху)..container { justify-content: flex-start; }flex-end: Выровнять элементы по концу основной оси (справа/внизу)..container { justify-content: flex-end; }center: Центрировать элементы по основной оси..container { justify-content: center; }space-between: Равномерно распределить элементы, оставляя промежутки только между ними..container { justify-content: space-between; }space-around: Распределять элементы равномерно, включая равные промежутки до начала и конца строки..container { justify-content: space-around; }space-evenly: Делит свободное пространство поровну между всеми элементами, включая начало и конец строки..container { justify-content: space-evenly; }
4. align-items
Выравнивание элементов по перекрестной оси:
stretch: Растягивает элементы, заполняя всю высоту родительского контейнера (значение по умолчанию)..container { align-items: stretch; }flex-start: Выровнять элементы по верхнему краю контейнера..container { align-items: flex-start; }flex-end: Выровнять элементы по нижнему краю контейнера..container { align-items: flex-end; }center: Центрировать элементы по вертикали..container { align-items: center; }baseline: Выровнять элементы по базовой линии текста..container { align-items: baseline; }
5. align-content
Управление расположением строк в многострочном флексе:
stretch: Строки растягиваются, занимая все доступное пространство..container { align-content: stretch; }flex-start: Все строки смещаются к началу контейнера..container { align-content: flex-start; }flex-end: Все строки смещаются к концу контейнера..container { align-content: flex-end; }center: Центрирует строки относительно контейнера..container { align-content: center; }space-between: Промежутки распределяются так, чтобы первая строка была у верхнего края, последняя — у нижнего, а остальные равномерно располагались между ними..container { align-content: space-between; }space-around: Промежутки распределяются вокруг каждой строки, делая их одинаковыми..container { align-content: space-around; }
6. flex-wrap
Определение поведения флекс-элементов при переполнении контейнера:
nowrap: Не переносить элементы на новую строку (значение по умолчанию)..container { flex-wrap: nowrap; }wrap: Переносить элементы на новые строки, если они не помещаются в одну линию..container { flex-wrap: wrap; }wrap-reverse: То же, что иwrap, но строки идут в обратном порядке..container { flex-wrap: wrap-reverse; }
7. gap
Добавляет пробелы между флекс-элементами:
gap: 10px;: Добавляет промежуток в 10 пикселей между элементами..container { gap: 10px; }row-gap: 20px; column-gap: 30px;: Можно отдельно задать промежутки по строкам и столбцам..container { row-gap: 20px; column-gap: 30px; }
Свойства флекс-элемента
1. order
Позволяет изменить порядок отображения элемента среди других флекс-элементов:
order: 1;: Перемещает элемент ближе к концу..item { order: 1; }order: -1;: Перемещает элемент ближе к началу..item { order: -1; }
2. flex-grow
Определяет способность элемента увеличиваться, чтобы занять оставшееся место:
flex-grow: 1;: Элемент будет расти пропорционально другим элементам с таким же значением..item { flex-grow: 1; }flex-grow: 0;: Элемент не будет увеличивать свой размер..item { flex-grow: 0; }
3. flex-shrink
Определяет способность элемента уменьшаться, когда места недостаточно:
flex-shrink: 1;: Элемент будет пропорционально уменьшаться вместе с другими элементами..item { flex-shrink: 1; }flex-shrink: 0;: Элемент не будет уменьшать свой размер..item { flex
4. flex-basis
Задает начальный размер элемента перед тем, как он начнет изменяться согласно свойствам flex-grow и flex-shrink:
flex-basis: auto;: Использует ширину/высоту элемента по умолчанию..item { flex-basis: auto; }flex-basis: 200px;: Начальная ширина элемента равна 200 пикселям..item { flex-basis: 200px; }
5. align-self
Позволяет переопределить выравнивание отдельного элемента по перекрестной оси:
auto: Наследуется от родителя (align-items)..item { align-self: auto; }flex-start,flex-end,center,stretch,baseline: Те же значения, что и у свойстваalign-items..item { align-self: flex-start; }
6. flex
Сокращенная запись для всех трех свойств: flex-grow, flex-shrink, flex-basis:
flex: 1 1 auto;: Эквивалентноflex-grow: 1; flex-shrink: 1; flex-basis: auto;..item { flex: 1 1 auto; }flex: none;: Убирает возможность изменения размера элемента..item { flex: none; }
Пример
Вот полный пример HTML-документа с использованием Flexbox:
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<title>Пример Flexbox</title>
<style> body { margin: 0; font-family: Arial, sans-serif; } .container { display: flex; justify-content: space-between; align-items: center; height: 100vh; background-color: #f9f9f9; gap: 20px; } .item { padding: 20px; background-color: #eaeaea; border-radius: 5px; text-align: center; flex: 1; } </style>
</head>
<body>
<div class="container">
<div class="item">Элемент 1</div>
<div class="item">Элемент 2</div>
<div class="item">Элемент 3</div>
</div>
</body>
</html>
Этот пример демонстрирует использование Flexbox для создания простого адаптивного макета с тремя элементами, которые автоматически занимают доступное пространство и центрируются по высоте экрана.

