5 способов центрирования в CSS Grid: идеальное выравнивание
Для кого эта статья:
- Веб-разработчики и верстальщики
- Дизайнеры интерфейсов и UX/UI специалисты
Студенты и начинающие специалисты в веб-дизайне
Центрирование элементов — одна из тех задач, которая заставляет верстальщиков проводить часы в борьбе с CSS. А ведь идеальное выравнивание контента критически важно для создания профессиональных интерфейсов. CSS Grid революционизировал этот процесс, превратив сложный квест в элегантное решение. 🎯 Забудьте о громоздких хаках с отрицательными отступами и абсолютным позиционированием — Grid предлагает пять мощных способов центрирования, которые работают в любых сценариях и поддерживаются всеми современными браузерами.
Хотите освоить все тонкости выравнивания элементов не только в Grid, но и в других CSS-технологиях? Курс веб-дизайна от Skypro погружает в практическое освоение верстки с нуля. Вы научитесь создавать идеально сбалансированные макеты любой сложности, используя не только Grid, но и Flexbox, трансформации и даже CSS-анимации. Реальные проекты в портфолио и обратная связь от практикующих дизайнеров-разработчиков ждут вас!
Основы центрирования в CSS Grid: принципы работы
CSS Grid Layout — это двумерная система размещения элементов, которая отличается от Flexbox тем, что может одновременно управлять и строками, и колонками. Это делает Grid мощным инструментом для выравнивания контента в обоих направлениях.
Чтобы начать работать с Grid, нужно определить контейнер с помощью display: grid. После этого можно задать структуру сетки через grid-template-rows и grid-template-columns.
Основной принцип центрирования в Grid опирается на понимание двух ключевых концепций:
- Выравнивание элементов — позиционирование элементов внутри их ячеек
- Выравнивание контента — позиционирование всей сетки элементов внутри контейнера
Алексей Петров, ведущий frontend-разработчик
Помню свой первый серьезный проект с адаптивной вёрсткой для крупного банка. Макет включал сложный дашборд с десятками карточек, которые должны были быть идеально выровнены и при этом адаптироваться к разным устройствам.
Сначала я попытался решить задачу через Flexbox, но столкнулся с проблемой: при изменении размера экрана элементы "плясали", нарушая визуальную иерархию. После дня мучений я переписал вёрстку на Grid.
Буквально 15 строк кода с использованием свойств align-items и justify-items — и всё стало на свои места! Клиент был в восторге от того, как интерфейс безупречно работал на всех устройствах. С тех пор Grid стал моим основным инструментом для сложных макетов.
Давайте рассмотрим базовый пример создания Grid-сетки с центрированными элементами:
.container {
display: grid;
grid-template-columns: repeat(3, 100px);
grid-template-rows: repeat(3, 100px);
gap: 10px;
height: 400px;
}
В этом примере мы создали сетку 3x3 с ячейками размером 100x100px и отступом между ними 10px. Контейнер имеет высоту 400px, что даёт дополнительное пространство вокруг сетки — идеальная ситуация для демонстрации возможностей центрирования.
| Свойство | Направление | Применение | Поддержка браузерами |
|---|---|---|---|
| align-items | Вертикальное | Контейнер | 97.3% |
| justify-items | Горизонтальное | Контейнер | 97.3% |
| align-self | Вертикальное | Элемент | 97.3% |
| justify-self | Горизонтальное | Элемент | 97.3% |
| place-items | Оба | Контейнер | 94.8% |
Теперь, когда мы понимаем базовые принципы, давайте детально рассмотрим каждый из пяти методов центрирования в CSS Grid. 📊

Выравнивание всех элементов grid-сетки с помощью align-items
Свойство align-items отвечает за вертикальное выравнивание всех элементов внутри их ячеек. Это свойство применяется к grid-контейнеру и влияет на все дочерние элементы одновременно.
Основные значения align-items:
- start: выравнивает элементы по верхней границе ячейки
- end: выравнивает элементы по нижней границе ячейки
- center: центрирует элементы вертикально внутри ячейки
- stretch: растягивает элементы на всю высоту ячейки (значение по умолчанию)
Рассмотрим пример вертикального центрирования всех элементов в grid-сетке:
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3, 100px);
gap: 10px;
align-items: center;
}
.item {
/* Задаём высоту меньше, чем высота ячейки,
чтобы продемонстрировать эффект центрирования */
height: 50px;
background-color: #3498db;
}
В этом примере все элементы .item будут вертикально центрированы в своих ячейках, независимо от их высоты. Это особенно удобно, когда элементы имеют разные размеры, но должны быть визуально выровнены.
Важно помнить, что align-items: center работает только когда высота grid-элементов меньше высоты ячеек. Если элемент занимает всю высоту ячейки, центрирование не будет заметно.
Для достижения максимальной гибкости можно комбинировать align-items с медиа-запросами для адаптивного выравнивания:
@media (max-width: 768px) {
.container {
align-items: start; /* На мобильных устройствах выравниваем по верху */
}
}
@media (min-width: 769px) {
.container {
align-items: center; /* На десктопах центрируем */
}
}
Этот подход особенно полезен для создания адаптивных интерфейсов, где выравнивание элементов может меняться в зависимости от размера экрана устройства. 📱
Горизонтальное центрирование в Grid с justify-items и content
Если align-items отвечает за вертикальное выравнивание, то justify-items контролирует горизонтальное позиционирование элементов внутри ячеек. Оба свойства имеют схожий набор значений, но работают в перпендикулярных направлениях.
Основные значения justify-items:
- start: выравнивание по левому краю ячейки
- end: выравнивание по правому краю ячейки
- center: горизонтальное центрирование внутри ячейки
- stretch: растягивание на всю ширину ячейки (значение по умолчанию)
Пример горизонтального центрирования всех элементов:
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: 100px;
gap: 15px;
justify-items: center;
}
.item {
/* Ширина меньше, чем ширина ячейки */
width: 80px;
background-color: #2ecc71;
}
Мария Соколова, UX/UI дизайнер
Работала над редизайном личного кабинета для образовательной платформы. Одним из ключевых экранов был дашборд с достижениями, где нужно было разместить карточки с разным содержимым и разной высотой.
Первая версия верстки использовала Flexbox с множеством вложенных контейнеров. Всё выглядело нормально на десктопе, но на планшетах появились проблемы с выравниванием — некоторые карточки "выпрыгивали" из общего потока.
Переход на CSS Grid с использованием justify-items: center и align-items: start решил проблему одним махом. Меньше кода, лучше производительность, а главное — идеальное выравнивание на всех устройствах. Пользователи отметили, что интерфейс стал "дышать" и воспринимается более структурированно.
Важно отличать justify-items от justify-content. Последний управляет распределением всей сетки внутри контейнера, если контейнер шире, чем сумма всех колонок. То есть:
justify-items— выравнивает элементы внутри их ячеекjustify-content— выравнивает всю grid-сетку внутри контейнера
Пример использования justify-content для центрирования всей сетки:
.container {
display: grid;
grid-template-columns: repeat(3, 100px); /* Фиксированная ширина колонок */
grid-auto-rows: 100px;
gap: 10px;
width: 500px; /* Контейнер шире, чем сумма ширин колонок */
justify-content: center; /* Центрируем всю сетку */
}
В этом примере общая ширина сетки (3 колонки по 100px + 2 промежутка по 10px) составляет 320px, а ширина контейнера 500px. Свойство justify-content: center центрирует всю сетку, оставляя по 90px свободного пространства слева и справа.
Сравнительная таблица justify-items vs justify-content:
| Характеристика | justify-items | justify-content |
|---|---|---|
| Что выравнивает | Элементы внутри ячеек | Всю сетку внутри контейнера |
| Когда работает | Когда элемент меньше ячейки | Когда сетка меньше контейнера |
| Значение по умолчанию | stretch | start |
| Применение для адаптивности | Выравнивание элементов разного размера | Центрирование макета на широких экранах |
Комбинируя эти свойства, вы получаете полный контроль над горизонтальным выравниванием как отдельных элементов, так и всего макета. 🧩
Комбинированное центрирование через свойство place-items
Свойство place-items — это мощный шортхэнд, объединяющий align-items и justify-items в одно объявление. Оно позволяет одновременно контролировать выравнивание элементов и по горизонтали, и по вертикали.
Синтаксис place-items очень прост:
place-items: <align-items> <justify-items>;
Если указано только одно значение, оно применяется к обоим направлениям. Например:
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: 150px;
gap: 20px;
place-items: center; /* Эквивалентно align-items: center; justify-items: center; */
}
.item {
width: 80px;
height: 80px;
background-color: #9b59b6;
}
Этот код создаст сетку с элементами, которые идеально центрированы как по вертикали, так и по горизонтали внутри каждой ячейки — элементы будут располагаться точно в середине своих ячеек.
Вы также можете задавать разные значения для каждого направления:
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: 150px;
place-items: start center; /* Вертикально вверху, горизонтально по центру */
}
Преимущества использования place-items:
- Более компактный и читаемый код
- Меньше повторений в стилях
- Удобнее для создания адаптивных макетов
- Легче модифицировать оба направления одновременно
Аналогично существует place-content — шортхэнд для align-content и justify-content. С его помощью можно одновременно управлять выравниванием всей сетки внутри контейнера:
.container {
display: grid;
grid-template-columns: repeat(3, 100px);
grid-template-rows: repeat(3, 100px);
width: 500px;
height: 500px;
place-content: center; /* Центрирует всю сетку и по вертикали, и по горизонтали */
}
Этот код создаст сетку 3x3 с фиксированными размерами ячеек (100x100px), которая будет размещена в центре контейнера 500x500px. 🎯
Точное позиционирование отдельных Grid-элементов по центру
Иногда требуется центрировать только определенные элементы, сохраняя стандартное выравнивание для остальных. Для этого CSS Grid предлагает свойства align-self и justify-self, которые применяются непосредственно к элементам сетки, переопределяя значения, унаследованные от контейнера.
Основные значения для обоих свойств:
- auto: наследует значение от родительского align-items/justify-items
- start: выравнивает элемент по началу ячейки
- end: выравнивает элемент по концу ячейки
- center: центрирует элемент в ячейке
- stretch: растягивает элемент на всю ячейку
Пример выборочного центрирования элементов:
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: 100px;
gap: 15px;
/* По умолчанию все элементы растянуты */
}
.item {
background-color: #e74c3c;
}
.item-centered {
width: 80px;
height: 50px;
justify-self: center;
align-self: center;
}
В этом примере элементы с классом .item-centered будут точно центрированы внутри своих ячеек, в то время как остальные элементы будут растянуты по умолчанию.
Так же как и для контейнера, для отдельных элементов существует шортхэнд place-self, объединяющий align-self и justify-self:
.item-centered {
width: 80px;
height: 50px;
place-self: center; /* Одновременное центрирование по вертикали и горизонтали */
}
Этот подход особенно полезен для выделения важных элементов или создания асимметричных композиций, где некоторые элементы должны выделяться на фоне других. 🔍
Сравнение подходов к центрированию отдельных элементов:
- Через grid-area и margin: auto — работает для элементов, занимающих несколько ячеек
- С помощью align-self/justify-self — более гибкий подход для точечного управления
- Через place-self — самый компактный и современный способ
Пример продвинутого позиционирования с использованием grid-area:
.container {
display: grid;
grid-template-columns: repeat(4, 1fr);
grid-template-rows: repeat(4, 100px);
gap: 10px;
}
.special-item {
grid-area: 2 / 2 / 4 / 4; /* Занимает область 2x2 в центре сетки 4x4 */
width: 80%;
height: 80%;
margin: auto; /* Центрирует элемент внутри его grid-area */
background-color: #f39c12;
}
В этом примере .special-item займет центральную область сетки 4x4 и будет центрирован внутри своей области с помощью margin: auto, создавая эффект центральной фокусной точки.
CSS Grid революционизировал наш подход к выравниванию элементов на веб-страницах. Выбор между пятью представленными методами центрирования зависит от конкретной задачи и структуры вашего макета. Для общего центрирования лучше использовать place-items, в то время как для более точного контроля над отдельными элементами идеально подойдет place-self. Не бойтесь экспериментировать с комбинациями различных свойств — именно так рождаются уникальные и эффективные решения в верстке. 🚀