Вебсправочник
Практика вёрстки

Как центрировать блок без фиксированных смещений

Размещаем содержимое по центру контейнера с помощью Grid и сохраняем возможность роста.

Задача и ограничения

Нужно поставить короткое сообщение по центру области, но не знать заранее его высоту. Ручные top, left и отрицательные отступы зависят от размеров текста. После перевода, увеличения шрифта или переноса строк такая конструкция часто смещается.

Пошаговое решение

Сделайте родителя grid-контейнером и задайте place-items: center. Это совместная настройка выравнивания по двум осям. Сам контейнер должен иметь свободное место: без высоты или min-height вертикальное центрирование может быть незаметным.

Для текстового сообщения ограничьте ширину, добавьте внутренние отступы и разрешите рост. Вместо жёсткого height выберите min-height, если содержимое может стать длиннее. Не применяйте absolute только ради центровки: он убирает элемент из обычного потока.

Код компонента

<style>
.stage { display: grid; place-items: center; min-height: 220px; padding: 20px; background: #edf3ef; }
.message { max-width: 30rem; padding: 24px; background: white; border-radius: 10px; text-align: center; }
</style>
<div class="stage"><div class="message"><h2>Всё готово</h2><p>Можно переходить к следующему уроку.</p></div></div>

Что может пойти не так

Центрирование не должно прятать начало длинного содержимого за пределами маленького контейнера. Если сообщение может быть большим, дайте области расти или продумайте прокрутку.

Как проверить результат

  1. Увеличьте сообщение до трёх абзацев.
  2. Проверьте ширину около 360px.
  3. Увеличьте масштаб текста и убедитесь, что начало и конец доступны.

Разберите также: CSS Grid, минимальная высота.

Попробуйте сами

HTML + CSS песочница
РЕЗУЛЬТАТ · ИЗОЛИРОВАННЫЙ ПРЕДПРОСМОТР
Измените код и нажмите «Запустить». JavaScript и внешние запросы отключены.
Самостоятельный учебный материал. Техническая документация: первоисточник по теме ↗. Если результат отличается, проверьте код и версию браузера.