Как центрировать элемент по вертикали и горизонтали через flexbox?
Хочу поставить логотип ровно в центр экрана — и по вертикали, и по горизонтали. Раньше мучился с отрицательными отступами. Говорят, через flexbox центрирование делается в три строки — как именно?
2 ответа
Да, 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 сразу центрирует и по вертикали, и по горизонтали. Оба варианта рабочие, выбирайте по вкусу.
Маленькое уточнение про оси. По умолчанию flex-direction: row, поэтому justify-content отвечает за горизонталь, а align-items — за вертикаль. Если поставить flex-direction: column, оси меняются местами, и тогда justify-content будет управлять вертикалью. Просто держите в голове, что эти свойства привязаны к осям, а не к сторонам экрана.