← Все вопросы

Как центрировать элемент по вертикали и горизонтали через flexbox?

Задан 10 месяцев назад335 просмотров2 ответа
12

Хочу поставить логотип ровно в центр экрана — и по вертикали, и по горизонтали. Раньше мучился с отрицательными отступами. Говорят, через flexbox центрирование делается в три строки — как именно?

2 ответа

15
✓ Принятый ответ — помог автору

Да, flexbox — самый простой способ. Делаем родителя флекс-контейнером и центрируем по обеим осям:

.center {
  display: flex;
  justify-content: center; /* по горизонтали (главная ось) */
  align-items: center;     /* по вертикали (поперечная ось) */
  height: 100vh;           /* на всю высоту экрана */
}
<div class="center">
  <div class="box">Я в центре</div>
</div>

Ключевой момент: чтобы было видно вертикальное центрирование, у контейнера должна быть высота. Иначе он схлопнется по содержимому и центрировать по вертикали будет негде — отсюда частая жалоба «align-items не работает». 100vh — это вся высота окна браузера.

Ещё короче — через grid:

.center { display: grid; place-items: center; height: 100vh; }

place-items: center сразу центрирует и по вертикали, и по горизонтали. Оба варианта рабочие, выбирайте по вкусу.

6

Маленькое уточнение про оси. По умолчанию flex-direction: row, поэтому justify-content отвечает за горизонталь, а align-items — за вертикаль. Если поставить flex-direction: column, оси меняются местами, и тогда justify-content будет управлять вертикалью. Просто держите в голове, что эти свойства привязаны к осям, а не к сторонам экрана.

Ваш ответ

Войдите, чтобы ответить на вопрос.