Все способы вертикального центрирования содержимого в CSS

 Изображение функции "width =" 680 "height =" 383 "src =" http://livecodestream.dev/post/all- the-способами-вы-можете-вертикально-центрировать-контент-в-css / Feature_hu4860d361657bce6098cacdd3d64f1fd0_68037_680x0_resize_q75_box.jpg "/> </figure>
<p> Для чего-то теоретически такого простого, вертикальное центрирование элементов в CSS — не самая простая задача. Это утверждение было особенно актуально до того, как браузеры начали поддерживать современные дополнения к CSS, такие как гибкость и сетка. </p>
<p> В этом посте мы собираемся обсудить некоторые старые приемы и более современные методы, которые разработчики используют для вертикального центрирования содержимого в CSS. Поскольку не существует универсального решения этой проблемы, поскольку каждая из них имеет свои ограничения, не помешает знать каждый из этих методов, чтобы найти правильное решение в различных сценариях. </p>
<p> Приступим! </p>
<hr/>
<h2 id= Если вы знаете высоту…

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

С автозапуском

Мы можем указать равные значения для верхнего и нижнего положения элемента и установить для поля значение auto. Это автоматически центрирует элемент с соответствующими полями по оси Y. В этом примере мы установили верхнюю и нижнюю позиции на ноль. Однако мы должны специально установить высоту элемента, чтобы он не занимал всю высоту.

 .  товар  {
     позиция :  абсолютная ;
     верх :  0 ;  низ :  0 ;
     маржа :  авто ;
     высота :  50   vh ;
}
 

С отрицательными полями

В этом методе мы размещаем вершину в средней точке (на 50%) в вертикальном направлении. Затем используйте отрицательное поле, чтобы переместить верхнюю половину элемента выше средней точки.

 .  товар  {
     позиция :  абсолютная ;
     верх :  50  % ;
     слева :  10   vw ;  справа :  10   vw ;
     высота :  50   vh ;
     верхний край :  -25   vh ;  / * также учитываем размеры отступов и границ, если таковые имеются, при расчете поля * / 
}
 

Здесь мы также должны явно указать высоту элемента, чтобы получить правильное значение для margin-top. Но в большинстве случаев мы не хотим устанавливать явную высоту для элементов, учитывая, что высота должна учитывать изменения ширины, корректировки текста и т. Д. Следовательно, эти два метода в большинстве случаев не идеальны для вертикального центрирования.


Нет необходимости в росте с переводчиком

Мы можем настроить последний метод центрирования, чтобы найти решение, которое избегает проблемы с явными высотами. Здесь, после размещения верхней части элемента в центре, мы используем translateY, чтобы переместить его на 50% по оси Y.

  .item {
    позиция: абсолютная;
    верх: 50%;
    преобразовать: translateY (-50%);
}
 


Таблицы и вертикальное выравнивание

CSS поддерживает свойство vertical-align для содержимого, размещенного внутри ячеек таблицы. Мы можем воспользоваться этим и объявить элемент ячейкой таблицы (а его родительский элемент — таблицей), чтобы центрировать его содержимое. Если вы используете div, установите для его отображения значение table-cell. Или вы можете использовать фактические элементы таблицы, но это решение семантически неверно.

 .  контейнер  {
     дисплей :  таблица ;
}

.  товар  {
     отображение :  таблица   -   ячейка ;
     вертикальное выравнивание :  среднее ;
}
 

Подобно последнему методу центрирования, вам не нужно явно указывать высоту элемента при использовании таблиц. Но если вы хотите поместить внутрь ячейки нецентрированный элемент, этот метод не идеален.


Вертикальное центрирование с использованием гибкости

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

Единственным недостатком этих гибких решений является то, что они не поддерживаются более ранними версиями Internet Explorer (ниже IE9). И вы должны использовать префикс webkit, moz или ms для поддержки некоторых других старых версий браузеров.

Но даже тогда flex добавляет невероятную гибкость в управление макетами страниц и позиционированием элементов. Здесь мы рассмотрим несколько способов центрировать контент с помощью гибкости.

С гибкими контейнерами и элементами выравнивания

Мы можем указать выравнивание элементов внутри родительского гибкого блока, используя свойства align-items и justify-content. Когда мы устанавливаем align-items на center, он вертикально центрирует все элементы внутри flexbox, если flex-direction равно row (по умолчанию).

  .container {
    дисплей: гибкий;
    align-items: center;
}
 

Если вы ищете решение для вертикального центрирования отдельного элемента, вам больше подойдет следующий метод.

С гибкими элементами и самовыравниванием

Это решение дает вам свободу центрировать по вертикали только один элемент внутри гибкого бокса. Он использует свойство гибкости, align-self, для размещения элемента в центре.

 .  контейнер  {
     дисплей :  гибкий ;
}

.  центр  {
     выровнять себя :  центр ;
}
 

С гибким контейнером и автоматической маржей

Еще один способ центрировать отдельный элемент в гибком контейнере — установить для его поля значение auto. Затем браузер автоматически вычисляет соответствующие поля, чтобы центрировать его в обоих направлениях.

 .  контейнер  {
     дисплей :  гибкий ;
}

.  товар  {
     маржа :  авто ;
}
 

С призрачными элементами внутри гибкого контейнера

Использование призрачных элементов — не лучший способ центрировать контент. Но он выполняет свою работу. А взамен дает вам гибкий интервал в вертикальном направлении. Вы можете складывать несколько элементов внутри гибкого бокса и использовать призрачные элементы, чтобы подтолкнуть их к центру.

 .  контейнер  {
     дисплей :  гибкий ;
     гибкое направление :  столбец ;
}

.  контейнер  ::  до  .  контейнер  ::  после  {
     содержание :  "" ;
     гибкий :  1 ;
}
 


Вертикальное центрирование с использованием сетки CSS

Сетка — одно из самых мощных дополнений к CSS за последние годы. Поскольку это позволяет нам управлять макетом по осям x и y, вертикальное центрирование с помощью сетки CSS довольно просто. И это дает нам несколько способов решения этой задачи.

Подобно flexbox, сетка не полностью поддерживается более старыми версиями современных браузеров, включая Internet Explorer, Chrome и Firefox. В некоторых более старых версиях есть возможность включить поддержку сетки, даже если она недоступна по умолчанию.

Первые несколько способов вертикального центрирования с сеткой следуют шаблону, аналогичному тому, что мы сделали с flexbox. Давайте посмотрим на примеры того, как они работают.

С сеткой и элементами выравнивания

Мы можем вертикально центрировать все элементы внутри сетки, установив для свойства align-items значение center.

 .  контейнер  {
     дисплей :  сетка ;
     align-items :  center ;
}
 

Если вы хотите вертикально центрировать несколько элементов внутри родительского элемента, обязательно разделите сетку на столбцы, чтобы разместить их в одной строке.

С элементом сетки и самовыравниванием

Если вы хотите центрировать только один элемент внутри сетки, используйте align-self: center для стилизации этого конкретного элемента.

 .  контейнер  {
     дисплей :  сетка ;
}

.  центр  {
     выровнять себя :  центр ;
}
 

С Grid Container и Margin Auto

Подобно тому, что мы сделали с flexbox, мы можем вертикально центрировать отдельный элемент внутри сетки, установив для его поля значение auto.

 .  контейнер  {
     дисплей :  сетка ;
}

.  центр  {
     маржа :  авто ;
}
 

С призрачными элементами на сетке

Мы можем настроить трюк с призрачным элементом, который мы проделали с помощью flexbox, в сетку CSS. Для этого сначала нам нужно создать сетку из трех рядов. Затем добавляемые элементы-призраки занимают пространство первой и последней строк, чтобы переместить наш элемент в средний ряд.

 .  контейнер  {
     дисплей :  сетка ;
     сетка-шаблон-строки :  повторить  ( 3  1  fr);
}

.  контейнер  ::  до  .  контейнер  ::  после  {
     содержание :  "" ;
}
 

С точным размещением элементов

Сетка позволяет нам указать точное место, в котором должен быть размещен элемент, с помощью нескольких свойств элемента. Мы можем использовать эту функцию, чтобы разместить элемент точно в центре трехрядной сетки и облегчить себе жизнь.

 .  контейнер  {
     дисплей :  сетка ;
     сетка-шаблон-строки :  повторить  ( 3  1  fr);
}

.  товар  {
     сетка-строка :  2 ;
}
 


Подведение итогов

Сегодня мы обсуждали, как решить одну из повторяющихся головных болей в жизни веб-разработчика — вертикальное центрирование контента. Мы говорили о почти 13 различных методах решения этой задачи. Я надеюсь, что это все. Если у вас есть еще какие-то приемы и советы по вертикальному центрированию контента, не забудьте поделиться ими с нами в комментариях.

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