← Назад к вопросам
Какое свойство задает одинаковые отступы между items внутри display: flex?
1.8 Middle🔥 181 комментариев
#HTML и CSS
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Свойство gap в Flexbox для отступов между элементами
Свойство gap (раньше называлось grid-gap) — это один из самых полезных способов для создания одинаковых отступов между элементами внутри flex контейнера. Это избавляет от необходимости писать отдельные margin на каждый элемент.
Базовое использование gap
/* Самый простой способ */
.container {
display: flex;
gap: 1rem;
/* Создаёт 1rem отступ между всеми элементами */
}
Это эквивалентно старому подходу через margin, но намного чище:
/* Старый способ (не рекомендуется) */
.container {
display: flex;
}
.item {
margin-right: 1rem;
}
.item:last-child {
margin-right: 0; /* Убираем последний отступ */
}
/* Новый способ (правильно) */
.container {
display: flex;
gap: 1rem; /* Вот и всё! */
}
Различные направления и двумерные отступы
/* Одинаковый отступ по всем направлениям */
.flex-row {
display: flex;
gap: 1rem;
}
/* Отступ между строками при flex-wrap */
.flex-wrap {
display: flex;
flex-wrap: wrap;
gap: 1rem;
/* 1rem между элементами горизонтально */
/* 1rem между строками вертикально */
}
/* Разные отступы: строки и столбцы */
.custom-gap {
display: flex;
flex-wrap: wrap;
row-gap: 2rem; /* Отступ между строками */
column-gap: 1rem; /* Отступ между столбцами */
}
/* Сокращенно (row-gap column-gap) */
.custom-gap-short {
display: flex;
gap: 2rem 1rem;
}
Практические примеры
Навигационное меню
.navbar {
display: flex;
align-items: center;
gap: 2rem;
padding: 1rem;
}
.nav-item {
/* Не нужен margin, gap справляется */
color: white;
cursor: pointer;
}
/* Результат: 2rem между каждым пунктом меню */
Сетка карточек с переносом
.cards-grid {
display: flex;
flex-wrap: wrap;
gap: 1.5rem; /* Отступ между карточками */
justify-content: center;
}
.card {
width: 300px;
/* Карточки равномерно распределены с отступами */
}
/* Без gap это было сложнее:
нужно было считать ширину экрана и использовать margin-right */
Кнопка с иконкой и текстом
.button {
display: flex;
align-items: center;
gap: 0.5rem; /* Небольший отступ между иконкой и текстом */
padding: 0.75rem 1rem;
border: none;
border-radius: 4px;
background-color: #007bff;
color: white;
}
/* Без gap: нужен отдельный margin на иконку */
/* С gap: всё работает автоматически */
Column направление (вертикальная раскладка)
.form {
display: flex;
flex-direction: column;
gap: 1rem;
/* Отступ между полями формы */
}
.form-group {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
label {
/* Отступ между label и input */
}
input {
padding: 0.5rem;
}
/* Результат: элементы красиво выстроены вертикально с отступами */
Адаптивные отступы (responsive gap)
.adaptive-container {
display: flex;
gap: 1rem;
flex-wrap: wrap;
}
/* На мобильных экранах меньше отступ */
@media (max-width: 640px) {
.adaptive-container {
gap: 0.5rem;
}
}
/* На планшетах нормальный отступ */
@media (min-width: 768px) {
.adaptive-container {
gap: 1rem;
}
}
/* На десктопе больше отступ */
@media (min-width: 1024px) {
.adaptive-container {
gap: 2rem;
}
}
Поддержка браузерами
/* Gap поддерживается всеми современными браузерами */
/* Chrome 84+, Firefox 63+, Safari 14.1+, Edge 84+ */
.flex-container {
display: flex;
gap: 1rem;
/* Fallback для очень старых браузеров (если нужен IE11) */
/* Используй margin-right + :not(:last-child) */
}
/* Для IE11 нужно использовать margin на элементы */
Сравнение способов создания отступов
/* СПОСОБ 1: Старый (через margin) */
.old-way .item {
margin-right: 1rem;
}
.old-way .item:last-child {
margin-right: 0;
}
/* СПОСОБ 2: Через gap (правильно) */
.new-way {
display: flex;
gap: 1rem;
}
/* СПОСОБ 3: Через margin с селектором */
.another-way .item:not(:last-child) {
margin-right: 1rem;
}
/* gap — это идеальный способ! */
Реальный пример: React компонент
interface FlexListProps {
items: string[];
gap?: string;
direction?: "row" | "column";
}
export function FlexList({
items,
gap = "1rem",
direction = "row"
}: FlexListProps) {
return (
<div
style={{
display: "flex",
flexDirection: direction,
gap: gap,
padding: "1rem"
}}
>
{items.map((item, idx) => (
<div key={idx} style={{ flex: 1 }}>
{item}
</div>
))}
</div>
);
}
/* Использование:
<FlexList items={["Item 1", "Item 2", "Item 3"]} gap="2rem" />
*/
Best Practices
- Используй gap вместо margin — это чище и понятнее
- Комбинируй row-gap и column-gap для сложных макетов
- Помни о flex-wrap — gap работает для обеих осей
- Адаптируй gap на разных экранах — мобильные могут требовать меньше отступов
- gap работает и в Grid — не только в Flexbox
Свойство gap — это стандарт для создания отступов между элементами в flex и grid контейнерах. Это делает код чище и избавляет от граничных случаев с последними элементами.