← Назад к вопросам
Как разместить элементы в одну строку с одинаковым отступом между ними?
2.0 Middle🔥 132 комментариев
#JavaScript Core
Комментарии (2)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как разместить элементы в одну строку с одинаковым отступом между ними?
Решение с Flexbox (рекомендуется)
Flexbox — это идеальный выбор для распределения элементов с равными отступами:
// === HTML ===
<div className="container">
<div className="item">Item 1</div>
<div className="item">Item 2</div>
<div className="item">Item 3</div>
<div className="item">Item 4</div>
</div>
// === CSS / Tailwind ===
// Способ 1: justify-content: space-between (отступ только между элементами)
.container {
display: flex;
justify-content: space-between;
}
// Способ 2: justify-content: space-around (отступ со всех сторон, одинаковый)
.container {
display: flex;
justify-content: space-around;
}
// Способ 3: justify-content: space-evenly (равномерное распределение)
.container {
display: flex;
justify-content: space-evenly;
}
// Способ 4: gap (самый современный и чистый)
.container {
display: flex;
gap: 16px; // отступ между элементами
// Элементы НЕ прилипают к краям
}
// Способ 5: gap + flex (растягивание на всю ширину)
.container {
display: flex;
gap: 16px;
justify-content: space-between; // элементы распределяются, gap между ними
}
В Tailwind CSS
// === React компонент с Tailwind ===
export function HorizontalLayout() {
return (
// Способ 1: justify-between (элементы прижимаются к краям)
<div className="flex justify-between">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
// Способ 2: justify-around (равный отступ со всех сторон)
<div className="flex justify-around">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
// Способ 3: gap (отступ между элементами, Tailwind 3+)
<div className="flex gap-4">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
// Способ 4: gap + justify-center (центр с отступами между)
<div className="flex gap-4 justify-center">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
// Способ 5: gap + justify-between (полное растягивание)
<div className="flex gap-4 justify-between w-full">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
);
}
CSS Grid (альтернатива)
/* === Grid с равномерным распределением === */
.container {
display: grid;
grid-template-columns: repeat(4, 1fr);
/* 4 колонки, каждая занимает одинаковую ширину */
gap: 16px;
/* отступ между элементами */
}
/* === Grid с автоматическим количеством колонок === */
.container {
display: grid;
grid-auto-flow: column;
/* элементы идут горизонтально */
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
/* минимум 100px, максимум равная доля */
gap: 16px;
}
/* === Grid с одной строкой === */
.container {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 16px;
}
.item {
/* Все элементы в одну строку автоматически */
}
Сравнение методов
// ===== МЕТОДЫ И ИХ РАЗЛИЧИЯ =====
// 1. space-between: элементы у краёв, между ними равный отступ
// [Item1] [Item2] [Item3]
// 2. space-around: равный отступ со всех сторон (но внутренние отступы больше)
// [Item1] [Item2] [Item3]
// 3. space-evenly: ИДЕАЛЬНО равномерно (отступ везде одинаковый)
// [Item1] [Item2] [Item3] [Item4]
// 4. gap: простой отступ между элементами, сами элементы не растягиваются
// [Item1] <gap> [Item2] <gap> [Item3]
// === Практический пример: навигация сайта ===
export function Navigation() {
return (
<nav className="flex gap-8 px-4">
<a href="/">Home</a>
<a href="/about">About</a>
<a href="/services">Services</a>
<a href="/contact">Contact</a>
</nav>
// Результат: Home About Services Contact
// (одинаковый отступ 8px между ними)
);
}
// === Пример: кнопки в один ряд ===
export function ButtonGroup() {
return (
<div className="flex gap-3 justify-end">
<button className="bg-gray-300">Cancel</button>
<button className="bg-blue-500">Submit</button>
</div>
// Результат: [Cancel] [Submit] (справа, с отступом 3px между ними)
);
}
// === Пример: товары в магазине ===
export function ProductList() {
const products = ['Product 1', 'Product 2', 'Product 3', 'Product 4'];
return (
<div className="flex gap-4 justify-between w-full">
{products.map(product => (
<div key={product} className="flex-1">
{product}
</div>
))}
</div>
// flex-1 — каждый товар занимает одинаковую ширину
// justify-between — максимальное растягивание
// gap-4 — отступ между товарами
);
}
Продвинутые сценарии
// === Элементы разной ширины, но равный отступ между ними ===
export function ResponsiveLayout() {
return (
<div className="flex gap-4">
<div className="w-32">Sidebar</div> {/* 128px */}
<div className="flex-1">Content</div> {/* остальное место */}
<div className="w-24">Widget</div> {/* 96px */}
</div>
// Результат:
// [Sidebar]<gap>[ Content ]<gap>[Widget]
);
}
// === Элементы в центре с отступом ===
export function CenteredItems() {
return (
<div className="flex gap-6 justify-center items-center">
<img src="logo.png" alt="Logo" />
<h1>Title</h1>
<button>Action</button>
</div>
// justify-center — центр по горизонтали
// items-center — центр по вертикали
// gap-6 — отступ между элементами
);
}
// === Обёртка с переносом на новую строку ===
export function WrappingLayout() {
return (
<div className="flex flex-wrap gap-4">
{items.map(item => (
<div key={item.id} className="w-48">
{item.name}
</div>
))}
</div>
// flex-wrap — элементы переносятся на новую строку
// gap-4 — отступ между всеми элементами (в т.ч. по вертикали)
);
}
Лучшие практики
// OK: Используй gap
<div className="flex gap-4">
<button>Cancel</button>
<button>Submit</button>
</div>
// NOT OK: Старый способ с margin
<div className="flex">
<button className="mr-4">Cancel</button> {/* margin-right */}
<button>Submit</button>
</div>
// OK: gap для всех осей
<div className="flex flex-wrap gap-4">
{/* gap работает для строк И для колонок */}
</div>
// NOT OK: space-between для мало элементов
<div className="flex justify-between">
<button>One</button> {/* у левого края */}
<button>Two</button> {/* у правого края */}
</div>
// Лучше: flex gap-4 justify-center