← Назад к вопросам
Какое свойство позволяет flex переносить элементы внутри контейнера вниз?
1.7 Middle🔥 161 комментариев
#HTML и CSS
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Свойство flex-wrap для переноса элементов
Ответ: flex-wrap
Свойство flex-wrap контролирует, как flex элементы размещаются внутри контейнера. По умолчанию все элементы пытаются уместиться в одну строку.
Основные значения flex-wrap
.flex-container {
display: flex;
flex-wrap: nowrap; /* По умолчанию - БЕЗ переноса */
}
1. flex-wrap: nowrap (по умолчанию)
.container {
display: flex;
flex-wrap: nowrap; /* Все элементы в одну строку */
width: 300px;
}
.item {
width: 100px;
min-width: 100px; /* Не сжимается */
}
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
</div>
Результат: элементы будут сжаты, чтобы все поместились в одну строку (if min-width не установлена)
|1|2|3|4| (все в одну строку, может быть сжато)
2. flex-wrap: wrap (переносит вниз)
.container {
display: flex;
flex-wrap: wrap; /* Переносит элементы на новую строку */
width: 300px;
gap: 10px;
}
.item {
width: 100px;
min-width: 100px;
}
Результат: элементы переносятся вниз на новую строку
|1|2|3|
|4|
3. flex-wrap: wrap-reverse (переносит вверх)
.container {
display: flex;
flex-wrap: wrap-reverse; /* Переносит в обратном направлении */
}
Результат:
|4|
|1|2|3|
Практический пример: адаптивный grid
<div class="card-container">
<div class="card">Card 1</div>
<div class="card">Card 2</div>
<div class="card">Card 3</div>
<div class="card">Card 4</div>
</div>
.card-container {
display: flex;
flex-wrap: wrap; /* Переносит вниз */
gap: 16px;
width: 100%;
}
.card {
flex: 1 1 calc(33.333% - 16px); /* Минимум 3 в ряд */
min-width: 250px; /* Не сжимается меньше 250px */
background: white;
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
/* На мобильных - один в ряд */
@media (max-width: 768px) {
.card {
flex: 1 1 100%; /* Один элемент в ряд */
}
}
Полный пример с flexbox flow
/* flex-direction + flex-wrap = flex-flow */
.container {
display: flex;
/* Способ 1: раздельно */
flex-direction: row; /* Направление: левой -> направо */
flex-wrap: wrap; /* Перенос: вниз на новую строку */
/* ИЛИ сокращение */
flex-flow: row wrap; /* Direction + wrap */
}
Выравнивание элементов при переносе
Когда включен flex-wrap, можно использовать align-content для выравнивания рядов:
.container {
display: flex;
flex-wrap: wrap;
height: 400px; /* Высота контейнера */
gap: 10px;
/* Выравнивание РЯДОВ (не элементов) */
align-content: flex-start; /* К верхней части */
align-content: center; /* По центру */
align-content: flex-end; /* К нижней части */
align-content: space-between; /* Равномерное распределение */
align-content: space-around; /* С промежутками */
align-content: stretch; /* Растянуть на всю высоту */
}
.item {
width: 100px;
height: 100px;
}
Визуально с align-content: space-between и 2 строками:
|1|2|3|
|4|5|6|
Частая ошибка: забывают flex-wrap
/* НЕПРАВИЛЬНО - элементы будут сжаты */
.container {
display: flex; /* flex-wrap: nowrap по умолчанию */
width: 300px;
}
.item {
width: 100px;
/* Каждый элемент станет ~75px вместо 100px */
}
/* ПРАВИЛЬНО */
.container {
display: flex;
flex-wrap: wrap; /* Включить перенос */
width: 300px;
}
.item {
width: 100px;
/* Останется 100px, 4-й элемент перенесется вниз */
}
Реальный пример: меню с переносом
<nav class="navbar">
<a href="#">Home</a>
<a href="#">About</a>
<a href="#">Services</a>
<a href="#">Contact</a>
</nav>
.navbar {
display: flex;
flex-wrap: wrap; /* На мобильных элементы переносятся */
gap: 10px;
padding: 10px;
background: #333;
}
.navbar a {
color: white;
padding: 10px 20px;
text-decoration: none;
white-space: nowrap; /* Не переносить текст */
}
@media (max-width: 600px) {
/* На мобильных каждая ссылка в новой строке */
.navbar a {
flex: 1 1 100%;
}
}
Взаимодействие с flex-grow и flex-shrink
.container {
display: flex;
flex-wrap: wrap;
gap: 10px;
width: 500px;
}
.item {
width: 100px;
/* Взаимодействие с wrap */
flex-grow: 1; /* Растягивается в оставшемся пространстве */
flex-shrink: 0; /* НЕ сжимается, вместо этого переносится */
}
Сравнение Flexbox vs CSS Grid для переноса
/* Flexbox с wrap - для одномерного потока */
.flex-container {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
/* CSS Grid - для двумерного макета */
.grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 10px;
}
Оба достигают похожего результата, но:
- Flexbox - для одномерных макетов (строки или колонки)
- Grid - для двумерных сложных макетов
Итоги
- flex-wrap: wrap позволяет элементам переноситься вниз на новую строку
- flex-wrap: nowrap (по умолчанию) сжимает элементы в одну строку
- flex-wrap: wrap-reverse переносит в обратном направлении
- flex-flow - сокращение для flex-direction + flex-wrap
- align-content выравнивает рядов при переносе
- flex-wrap критично для адаптивных макетов на мобильных
- Для сложных макетов рассмотри CSS Grid вместо Flexbox