HTML/CSS: как центрировать по вертикали

При изучении стилизации HTML-страниц и механизмов выравнивания элементов средствами CSS, начинающий разработчик, как правило, сначала знакомится со способами горизонтального выравнивания элементов. В их числе, например, text-align: center; и margin: 0 auto; . С выравниванием по вертикали возникает больше вопросов. В этой статье разберем пять способов выравнивания элементов в HTML и CSS по вертикали.
Профессия «Фронтенд-разработчик»
- Изучите востребованные JavaScript и TypeScript
- Научитесь создавать пользовательские интерфейсы сайтов и приложений
- Освойте самый популярный фреймворк JavaScript — React
- Познакомьтесь с языками веб-разработки HTML и CSS
У каждого описанного способа есть свои преимущества и недостатки, поэтому подходить к их использованию стоит критически. В определенной ситуации один способ может подходить идеально, а другой — оказаться совершенно бесполезным.
1. У правила для горизонтального выравнивания текста text-align: center; , которое уже упоминалось выше, есть собрат, который называется vertical-align . Как и text-align , vertical-align выравнивает элементы со строчным или строчно-блочным типом бокса. Отличие в том, что свойство text-align применяется к родительскому блоку, а vertical-align необходимо применять непосредственно к выравниваемому элементу.
Свойство vertical-align удобно применять, когда необходимо, например, выровнять иконку внутри строки или два рядом стоящих строчно-блочных элемента. Важно понимать, что vertical-align выравнивает элемент относительно содержащей строки, а не относительно ближайших элементов.
Кроме того, свойство vertical-align можно использовать для того, чтобы выравнивать контент в ячейке таблицы.
2. Для тех, кто не знаком с принципами работы интерлиньяжа и свойством line-height , может стать откровением, что текст располагается посередине содержащей его строки. Этим можно пользоваться при выравнивании. Предположим, что у вас есть элементарный footer, в котором нужно расположить по центру копирайт:
Copyright - ThriveTalk 2017
Допустим, что высота футера равна 80px. Для того, чтобы текст вертикально встал ровно по центру, достаточно написать в CSS следующее:
У этого способа есть недостаток. Его удобно применять, когда вы уверены, что выравниваемый элемент не будет переполняться. В противном случае при переносе строки между текстом появятся большие вертикальные отступы, что почти наверняка станет нежелаемым поведением.
3. Для предотвращения нежелаемного поведения, описанного в примере выше, можно использовать метод выравнивания: padding . Значения padding-top и padding-bottom помогут вам не только центрировать по вертикали, но и застраховаться от переполнения. Рассмотрим пример:
Предположим, вы верстаете кнопку, при нажатии на которую происходит переход на страницу заказа товара. Высота кнопки не должна превышать 50px. Из макета вы выгрузили следующие стили:
Высота контента внутри кнопки равна высоте строки и составляет 20px. Чтобы текст кнопки встал по центру, необходимо распределить по свойствам padding-top и padding-bottom оставшееся пространство следующим образом: (50px — 20px) / 2.
В результате получаем следующее:
Если текст кнопки измениться с «Заказать» на «Заказать товар онлайн» и перестанет помещаться на одной строке, кнопка сохранит нужный вид, а текст внутри неё по-прежнему будет находиться по центру.
Выравнивание при помощи padding универсально и подходит как для фразовых элементов, так и для выравнивания элементов с блочным типом бокса (но только в некоторых случаях).
4. Еще один инструмент — Flexbox. Внутри flex-контейнера любой элемент, будь то блочный, строчный или даже псевдоэлемент, становится flex-элементом, с которым можно производить любые манипуляции. В этой статье мы не будем подробно останавливаться на flex-свойств, почитать о них можно, например, тут.
У Flexbox есть ряд преимуществ перед обыкновенным выравниванием — в первую очередь это создание крупных сеточных структур и макросеток.
5. А что, если элемент абсолютно спозиционирован? Предположим, что вы сверстали модальное окно, которое нужно спозиционировать не относительно другого элемента, а относительно окна браузера. В этом случае можно использовать position: fixed; .
Стоит отметить, что все описываемые далее действия применимы и в случаях, когда нужно выполнить абсолютное позиционирование внутри другого элемента.
Положением спозиционированных элементов управляют свойства top , right , bottom , left . Попробуем следующее:
В данном случае модальное окно расположено не верно: ровно по центру находится левый верхний угол модального окна, а не его физический центр. Для того, чтобы выполнить его абсолютное позиционирование, изменим положение модального окна с помощью отрицательного margin :
У применения свойства margin в этой ситуации существует один недостаток. При изменении свойств width и/или height модального окна вам придется вручную «подкручивать» значения отрицательного margin , чтобы добиться половины размера его ширины и высоты. Этого можно избежать, используя вместо margin свойство transform . А transform: translate(X, Y) позволяет регулировать смещение элемента относительно исходного положение. Например, так:
В отличие от свойства margin , значения которого вычисляются от ширины родительского элемента, transform: translate(X, Y) берет за основу габариты самого элемента — в данном случае, модального окна. А это то, что нам и нужно. В результате, модальное окно будет всегда находиться в центре. Независимо от своих размеров.
Профессия «Фронтенд-разработчик»
- Изучите востребованные JavaScript и TypeScript
- Научитесь создавать пользовательские интерфейсы сайтов и приложений
- Освойте самый популярный фреймворк JavaScript — React
- Познакомьтесь с языками веб-разработки HTML и CSS
Выравнивание содержимого в ячейках
Содержимое ячеек можно выравнивать по горизонтали и по вертикали с помощью CSS.
За выравнивание по горизонтали отвечает CSS-свойство text-align . Чаще всего используются значения left , center и right .
За выравнивание по вертикали отвечает CSS-свойство vertical-align . Чаще всего используются значения top , middle и bottom .
На самом деле, значений у обоих свойств больше, но в случае с ячейками нас интересуют только перечисленные.
Чтобы задать выравнивание содержимого ячеек, надо в стилях указать:
< vertical-align: значение; text-align: значение; >
Эти стили повлияют на все ячейки. Чтобы задать выравнивание только в определённых ячейках, нужно назначить им классы и определить стили для классов. В этом примере для вас уже подготовлены ячейки с классами.
Перейти к заданию
- index.html Сплит-режим
- style.css Сплит-режим
Выравнивание содержимого в ячейках
Распределение браузеров
| Браузер |
Посещения |
| Количество |
В процентах |
| Mozilla Firefox |
|
| Google Chrome |
|
| Safari |
|
!DOCTYPE>
Выравнивание текста по вертикали





Выравнивание текста по вертикали при помощи CSS несколькими способами. Простые решения не всегда простой проблемы. Выровнять текст по центру по горизонтали легко — здесь работает практически во всех случаях старый добрый стиль text-align:center, который отлично работает и в табличных ячейках и в дивах:
Текст, который нужно выровнять по горизонтали
С выравниванием по вертикали немного сложнее, но есть проверенные способы. Например, vertical-align подходит для ячеек таблиц и элементов в одной строке относительно друг друга. Можно добавить к vertical-align свойство display:table-cell и попробовать решить таким образом выравнивание и для других случаев:
Текст для выравнивания по вертикали
Текст для выравнивания по вертикали 2
Текст для выравнивания по вертикали 3
Мой любимый способ выравнивания текста по вертикали в CSS — свойство line-height. Здесь важный нюанс, чтобы этот вариант сработал — значение line-height должно быть равно значению height.
Текст бла бла бла
Текст бла бла бла
Текст бла бла бла
Это самые простые и востребованные способы решения, которые легко и просто запомнить.
Горизонтальное и вертикальное выравнивание
Центрирование элементов
по горизонтали и вертикали
Выравнивание элементов по центру
Чтобы горизонтально выровнять по центру блоковый элемент (например, ), можно использовать свойство margin: auto; .
Определение ширины элемента предотвратит его вытягивание до границ контейнера.
При таких установках элемент займет заданную ширину, а оставшееся пространство будет поровну поделено между двумя отступами:
Это элемент div расположен по центру.
.center
Внимание! Выравнивание по центру не будет работать, если свойство width не установлено (или установлено в 100%).
Выравнивание текста по центру
Чтобы внутри элемента выровнять только текст, используется свойство text-align: center; .
Этот текст выровнен по центру.
.center
Выравнивание изображения по центру
Чтобы выровнять изображение по центру, нужно сделать элемент блоковым и установить левый и правый отступы в значение auto :

Выравнивание по левому/правому краю — Используем свойство position
Один из способов выровнять элемент по левому или правому краю, это использовать свойство position: absolute; :
Значимость этих проблем настолько очевидна, что укрепление и развитие внутренней структуры прекрасно подходит для реализации кластеризации усилий.
.right
Внимание! Абсолютное позиционирование элемента удаляет его из обычного потока вывода. В результате этого такой элемент может перерывать другие элементы.
Выравнивание по левому/правому краю — Используем свойство float
Другой способ выровнять элемент по левому или правому краю, это использовать свойство float :
Значимость этих проблем настолько очевидна, что укрепление и развитие внутренней структуры прекрасно подходит для реализации кластеризации усилий.
.right
Прием clearfix
Если высота плавающего элемента (с заданным свойством float ) больше, чем высота его контейнера, то он будет «переполнять» его и выходить за его пределы. Чтобы это исправить, можно воспользоваться специальным приемом clearfix.
Без clearfix

С clearfix

Мы можем добавить к элементу контейнеру специальный код, который решит эту проблему:
.clearfix::after
Центрирование по вертикали — Используем свойство padding
В CSS существует множество способов центрирования элемента по вертикали. Самое простое решение, это использовать свойства padding-top и padding-bottom :
Я центрирован по вертикали.
.center
Чтобы центрировать и по вертикали и по горизонтали, используются свойства padding и text-align: center :
Я центрирован вертикально и горизонтально.
.center
Центрирование по вертикали — Используем свойство line-height
Еще один способ центрировать элемент вертикально, это использовать свойство line-height со значением, равным значению свойства height :
Я центрирован вертикально и горизонтально.
.center < line-height: 200px; height: 200px; border: 3px solid green; text-align: center; >/* Если в тексте несколько строк, добавьте такой код: */ .center p
Центрирование по вертикали — Используем свойства position и transform
Если свойства padding и line-height использовать не хочется, то есть другое решение — использовать позиционирование и свойство transform :
Я центрирован вертикально и горизонтально.
.center < height: 200px; position: relative; border: 3px solid green; >.center p
Центрирование по вертикали — Используем Flexbox
Также, чтобы элемент разместить по центру, можно использовать flexbox. Следует только помнить, что flexbox не поддерживается в браузерах IE10 и более ранних версий: