← Назад к вопросам
Как разместишь элементы равномерно по экрану?
2.2 Middle🔥 171 комментариев
#JavaScript Core
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Задача
Нужно разместить элементы так, чтобы они занимали равное пространство и были равномерно распределены по экрану.
Решение 1: Flexbox с justify-content
// HTML
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
</div>
// CSS
.container {
display: flex;
justify-content: space-between;
gap: 20px;
padding: 20px;
width: 100%;
}
.item {
flex: 1;
height: 100px;
background: blue;
display: flex;
align-items: center;
justify-content: center;
}
// Альтернативы justify-content:
// space-around - пространство вокруг элементов
// space-evenly - одинаковое пространство везде
// center - по центру
Решение 2: CSS Grid с equal columns
// HTML
<div class="grid-container">
<div class="grid-item">1</div>
<div class="grid-item">2</div>
<div class="grid-item">3</div>
<div class="grid-item">4</div>
</div>
// CSS
.grid-container {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 20px;
padding: 20px;
width: 100%;
}
.grid-item {
background: green;
min-height: 100px;
display: flex;
align-items: center;
justify-content: center;
}
// Альтернативы:
// repeat(auto-fit, minmax(200px, 1fr)) - адаптивное
// repeat(auto-fill, minmax(200px, 1fr)) - заполняет пространство
Решение 3: Tailwind CSS (современный подход)
export function EvenSpacedItems() {
const items = [1, 2, 3, 4];
return (
// Вариант 1: flex с space-between
<div className="flex justify-between gap-4 w-full">
{items.map(item => (
<div key={item} className="flex-1 bg-blue-500 h-24 flex items-center justify-center">
{item}
</div>
))}
</div>
// Вариант 2: grid с equal columns
<div className="grid grid-cols-4 gap-4 w-full">
{items.map(item => (
<div key={item} className="bg-green-500 h-24 flex items-center justify-center">
{item}
</div>
))}
</div>
// Вариант 3: space-around
<div className="flex justify-around gap-4 w-full">
{items.map(item => (
<div key={item} className="flex-1 bg-purple-500 h-24 flex items-center justify-center">
{item}
</div>
))}
</div>
);
}
Решение 4: Адаптивная сетка (responsive)
// CSS
.responsive-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 20px;
width: 100%;
padding: 20px;
}
.grid-item {
background: lightblue;
min-height: 150px;
padding: 20px;
display: flex;
align-items: center;
justify-content: center;
}
// На узких экранах: 1 колонка
// На средних: 2-3 колонки
// На широких: 4+ колонки
Решение 5: Для компонентов с динамичным количеством
import React from 'react';
export function DynamicGrid({ items }) {
const itemCount = items.length;
const getColumnCount = (count) => {
if (count <= 2) return count;
if (count <= 4) return Math.ceil(count / 2) === 2 ? 2 : count;
return 4;
};
const columns = getColumnCount(itemCount);
return (
<div
className="w-full gap-4 p-4"
style={{
display: 'grid',
gridTemplateColumns: `repeat(${columns}, 1fr)`
}}
>
{items.map((item, index) => (
<div
key={index}
className="bg-gradient-to-r from-blue-400 to-blue-600 h-24 rounded-lg flex items-center justify-center text-white font-bold"
>
{item}
</div>
))}
</div>
);
}
Сравнение методов
- Flexbox: для одномерных макетов (одна строка)
- Grid: для двумерных макетов (матрица)
- Tailwind: быстрое прототипирование
- auto-fit/auto-fill: автоматическая адаптация
Лучшие практики
- Используй flexbox для одномерных макетов
- Используй grid для двумерных макетов
- gap вместо margin для расстояний
- Избегай абсолютного позиционирования
- Проверь адаптивность на разных размерах