Как центрировать элементы CSS с помощью Flexbox

Как известно, раньше в CSS центрирование элементов на странице, – а особенно центрирование по вертикали, – было сложной задачей, требующей применения разных хаков и уловок. К счастью, Flexbox все упростил, и теперь разработчики могут сосредоточить свою энергию на проблемах более высокого уровня.

Это очень простое руководство расскажет вам, как центрировать элементы с помощью Flexbox.

Горизонтальное центрирование

Давайте начнем с элемента div, который содержит два абзаца. Допустим, их нужно центрировать по горизонтали на одной оси. Для этого достаточно использовать свойство justify-content со значением center:

<div class="box flex">
  <p>
    <img src="/images/pirate.svg" width="75">
    arrr!
  </p>
  <p>
    <img src="/images/cowboy.svg" width="75">
    yeehaw!
  </p>
</div>

Разметка выглядит так:

.box.flex {
  display: flex;
  justify-content: center;
}

.box {
  padding: .5rem;
  height: 300px;
  box-shadow: 2px 2px 5px rgba(0,0,0,0.03);
  border-radius: 4px;

  color: #84613D;
  font-family: "Lucida Console", Monaco, monospace;
  background: #FDF9EA;
  border-bottom: 1px solid #F9F2D6;
  border-right: 1px solid #F9F2D6;
}

.box p {
  max-width: 125px;
  text-align: center;
  background: rgba(255,255,255,0.5);
  margin: .25rem;
  padding: .25rem;
}

Вертикальное центрирование

Преимущества Flexbox особенно заметны тогда, когда вам необходимо центрировать элементы по вертикали. Взглянем на тот же пример, но в этот раз элементы будут отцентрованы по вертикали:

.box.flex {
  display: flex;
  justify-content: center;
  align-items: center;
}

Если вы просто хотите, чтобы по вертикали были центрированы определенные flex элементы, вы можете установить свойство align-self:

.flex p:last-child {
  align-self: center;
}

Вертикальное центрирование относительно всей страницы

Поместить элемент четко по центру страницы немного сложнее, потому что flex-элементы будут центрироваться только по вертикали в соответствии с высотой их контейнера. Следовательно, сам контейнер должен быть той же высоты, что и вся страница, чтобы это работало. Это достаточно легко сделать, используя единицы измерения области просмотра, где 100vh — это 100% высоты области.

Давайте посмотрим на простой пример:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Dead center!</title>
    <style>
      body {
        margin: 0;
      }

      .center-me {
        display: flex;
        justify-content: center;
        align-items: center;

        height: 100vh;
      }
    </style>
  </head>
  <body>

    <div class="center-me">
      <p> Bonjour center!</p>
    </div>

  </body>
</html>

Примечание: Обратите также внимание, что поле страницы нужно обязательно сбрасывать до 0, иначе на странице получится небольшая прокрутка.

Читайте также: Единицы измерения CSS: rem vs em

Tags: ,

Добавить комментарий