Как сделать текст по центру по вертикали в css
Перейти к содержимому

Как сделать текст по центру по вертикали в css

  • автор:

6 способов вертикального выравнивания с помощью CSS

Для вертикального выравнивания двух блоков будем использовать различные свойства CSS, такие как: таблицы, line-height, отрицательного margin, transform, псевдоэлемента и flexbox.

Очень часто при верстки приходится заниматься выравнивание объектов, один относительно другого. Чаще всего такая проблема присутствует для вертикального выравнивания, с горизонтальным более или менее все понятно. Есть несколько решений для выравнивания. Расмотрим пример.

Способ №1 с ипользованием line-height

div.inner

Такое решение хорошо, когда блок по ширине больше чем содержимое. Такое решение вертикального выравнивания можно использовать для меню.

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

Если у нас блок будет уже, чем содержимое, то получится следующее

Вертикальное выравнивание с помощью CSS

Чтобы исправить эту проблему, есть два решения.

Способ №2 с использование display : table

Меняем код структуры, добавляем всего один блок

текст который должен быть выравнен по вертикале

И теперь задаем display для обоих блоков. Для внешнего блока задаем display:table, для внутреннего задаем display:table-cell. Это необходимо с точки стандартов верстки. Ячейка без таблицы не может существовать

.inner < border : 1px solid red; height : 75px; width : 200px; display : table >.inner div

Используя правило vertical-align : middle, современные браузеры выравнивают текст внутри ячейки по вертикали.

Вертикальное выравнивание с помощью CSS

Это только два способа. Расcмотрим еще несколько методов выравнивания.

Способ №3 с абсолютно позиционирования и margin-top

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

.inner < position : relative; height : 200px; width : 200px; border : 1px solid red >.inner div

Поведение объясняет очень просто. Из блока, который имеет фиксированные размеры, имеет вырезается блок, у которого не известны размеры. Все браузеры автоматически высчитывают его высоту. Соответственно мы сможем абсолютно спозиционировать блок внтури внешнего блока. Этот метод кстати подходит весьма успешно для многих задач по центрированию блоков с известной высотой.

Например, для центрирования изображения с неизвестными размерами в блоке с известными размерами или, например, горизонтальное выравнивание меню сделанного на структуре UL-LI.

Способ №4 с помощью transform

Представляет собой одно из самых универсальных способов, когда не знаете размеры родительского и дочернего элемента. В этом случае вместо задания отрицательного отступа в пикселях можно воспользоваться свойством transform и сдвинуть внутренний блок в центр с помощью функции translate и значения -50% -50%.

.outer < position: relative; >.inner

Решение №5 с помощью псевдоэлемента

Удобное решение для оформления, например, фотогалерей. Когда картнки имеют разные пропорции: квадратные, портретные и альбомные размеры.

Идея решения в добавлении внутри внешнего блока строчного блока высотой в 100% и задания ему вертикального выравнивания. В этом случае высота добавленного блока будет равна высоте внешнего блока. Внутренний блок выровняется по вертикали относительно добавленного, а значит, и внешнего блока.

.inner < display : inline-block; vertical-align : middle; text-align : center; >.outer:before

Этот способ не будет работать, если у родителя имеется абсолютное позиционирование.

Способ №6 с помощью Flexbox

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

.outer < display : flex; width : 200px; height : 200px; >.inner

Flexbox актуален, но не забываем что, он поддерживается современными браузерами.

  1. https://habr.com/ru/company/netcracker/blog/277433/
  2. https://habr.com/ru/post/71236/
  3. http://blog.sribna.com/vertikalnoe-vyiravnivanie-v-css-chast-2.htm

Как выровнять текст по вертикали css

За выравнивание по вертикали отвечает CSS-свойство vertical-align . Чаще всего используются значения top, middle и bottom. Выравнивание по вертикали можно наглядно рассмотреть на примере таблицы.

Исходный HTML документ:

   class="bottom">Заголовок 1  class="up-center">Заголовок 2   >Текст 1  class="up">Текст 2   
table  /* Схлапывание границы у таблицы */ border-collapse: collapse; > th, td  /* Видимая граница ячеек */ border: 1px solid #000; /* Внутренний отступ и размер ячеек */ padding: 5px; width: 200px; height: 60px; > .up  vertical-align: top; > .up-center  vertical-align: text-top; > .bottom  vertical-align: bottom; > 

vertical-align

Результат:

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

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

Используйте свойство vertical-align

Свойство vertical-align используется для вертикального центрирования строчных элементов.

Значения для vertical-align выравнивают элемент относительно родительского элемента.

  • Значения line-relative вертикально выравнивают элемент относительно всей строки.
  • Значения для ячеек таблицы относительны к table-height-algorithm, который обычно указывает на высоту строки.

Не работает со старыми версиями IE. Решением является добавление child .

Пример

html> html> head> title>Заголовок документа title> style type="text/css"> div < display: table-cell; width: 250px; height: 200px; padding: 10px; border: 3px dashed #1c87c9; vertical-align: middle; > style> head> body> div>Вертикально выровненный текст div> body> html>

Используйте CSS Flexbox

С Flexbox можно выровнять элементы по вертикали или по горизонтали с помощью свойств align-items, align-self, и justify-content.

Читайте наше Руководство Flexbox, чтобы научиться, как создать flexible layout, оптимизированный для разных устройств.

Пример

html> html> head> title>Заголовок документа title> style> section < display: flex; width: 50%; height: 200px; margin: auto; border-radius: 10px; border: 3px dashed #1c87c9; > p < margin: auto; /* Important */ text-align: center; > style> head> body> section> p> Центрирован с помощью Flexbox. p> section> body> html>

flexbox layout flexbox layout

Используйте CSS display:table

В данном методе мы отобразим элементы как таблицы и ячейки таблиц, и контент будет центрирован с помощью свойства vertical-align .

Пример

html> html> head> title>Заголовок документа title> style> #parent < display: table; width: 100%; height: 200px; border: 3px dashed #1c87c9; text-align: center; > #child < display: table-cell; vertical-align: middle; > style> head> body> div id="parent"> div id="child">Вертикально центрирован. div> div> body> html>

Не работает со старыми версиями IE. Добавьте child .

Используйте свойство line-height

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

Пример

html> html> head> title>Заголовок документа title> style> p < height: 90px; line-height: 90px; text-align: center; border: 3px dashed #1c87c9; > style> head> body> p>Вертикально центрирован. p> body> html>

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

Пример

html> html> head> title>Заголовок документа title> style> div < display: inline-block; width: 100%; height: 200px; vertical-align: middle; line-height: 200px; text-align: center; border: 3px dashed #1c87c9; > style> head> body> div>Вертикально центрирован. div> body> html>

Задайте равные верхние и нижние отступы

В этом методе верхние и нижние отступы родительского элемента будут равными

Пример

html> html> head> title>Заголовок документа title> style> .center < padding: 10% 0; border: 3px dashed #1c87c9; > style> head> body> div class="center"> p>Вертикально центрирован. p> div> body> html>

Если нужно задать отступы, используйте %. Данный метод требует некоторые вычисления, чтобы понять, какие значения необходимо установить для top и bottom для их динамического роста. Если установить относительную высоту, вычисления не потребуются.

Задайте абсолютное позиционирование и отрицательные поля

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

  1. Задайте #parent и #child
  2. Задайте top: 50%; и left: 50%; для центрирования левого края child .
  3. Задайте child и таким образом, чтобы он перемещался вверх и налево.
  4. Установите отрицательное поле, оно уменьшает наполовину высоту и толщину.

Пример

html> html> head> title>Заголовок документа title> style> .parent < position: relative; width: 100%; height: 220px; background: #1faadb; color: #fff; > .child_1, .child_2 < position: absolute; top: 50%; left: 50%; width: 110px; height: 70px; background: #8ebf42; text-align: center; > .child_1 < margin: -35px 0 0 -55px; > style> head> body> div class="parent"> div class="child_1">Вертикально центрированный текст. div> div> br> div class="parent"> div class="child_2">Нецентрированный текст. div> div> body> html>

Если контент становится больше контейнера, он визуально исчезнет.

Задайте абсолютное позиционирование и растягивание

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

  1. Задайте parent и child
  2. Задайте child
  3. Задайте 4 margin: auto; все поля станут равными и child станет центрированным по вертикали, а также по горизонтали.

Пример

#parent < position: relative; > #child < position: absolute; top: 50%; left: 50%; width: 50%; height: 30%; margin: -15% 0 0 -25%; >

Данный метод не работает в IE7.

Задайте свойство transform

Если мы имеем position: absolute; left: 50%; top: 50%;, вычисления делаются с левого верхнего угла. Для центрированного позиционирования текста необходимо переместить текст на -50% налево и на 50% вверх с помощью transform: translate (-50%;-50%).

Пример

html> html> head> title>Заголовок документа title> style> .parent < position: relative; width: 100%; height: 220px; background: #1faadb; color: #fff; > .child_1, .child_2 < position: absolute; top: 50%; left: 50%; width: 90px; height: 90px; padding: 5px; background: #8ebf42; text-align: center; > .child_1 < transform: translate(-50%, -50%); > style> head> body> div class="parent"> div class="child_1">Вертикально центрированный текст. div> div> br> div class="parent"> div class="child_2">Нецентрированный текст. div> div> body> html>

Используйте floater div

Этот метод требует пустой div, который будет floated.

Этот метод требует пустой div.

  1. Float: floater слева или справа.
  2. Задайте Height: 50%;
  3. Пустой дочерний элемент.
  4. Очистите child , используя clear: property.

Необходимо выставить дочерний элемент на расстоянии, равной половину высоты. Для этого нужно задать отрицательные значения свойства margin-bottom: на floater

Пример

#parent < height: 200px; > #floater < float: left; width: 100%; height: 50%; margin-bottom: -50px; outline: 2px solid #1c87c9; > #child < clear: both; height:100px; outline: 2px solid #8ebf42; >

Не забудьте про пустой div и задайте высоту для дочернего элемента.

Как сделать текст по центру по вертикали в css

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

Вертикальное выравнивание по центру с помощью CSS достигается не так просто. Существует множество способов и не все работают во всех броузерах. Давайте рассмотрим 5 различных методов, а также «за» и «против» каждого из них. Пример.

1-ый способ

Этот метод предполагает, что мы устанавливаем некоторому элементу способ отображения как таблица, после этого мы можем использовать в нём свойство vertical-align (которое работает по разному в различных элементах).

#wrapper < display : table; >#cell

Плюсы

  • Контент может динамически изменять высоту (высота не определена в CSS).
  • Контент не обрезается в случае, если для него недостаточно места.

Минусы

  • Не работает в IE 7 и меньше
  • Много вложенных тэгов

2-ой метод

Этот метод использует абсолютное позиционирование div-а, которому top устанавливается в 50%, а верхний отступ (margin-top) минус половине высоты контента. Это подразумевает, что объект должен иметь фиксированную высоту, которая определена в стилях CSS.

Поскольку высота фиксированная, вы можете установить overflow:auto; для div-а содержащего контент, таким образом, в случае если контент не будет влазить, то появятся скролл-бары.

#content < position : absolute; top : 50%; height : 240px; margin-top : -120px; /* минус от половины высоты */ >

Плюсы

  • Работает во всех броузерах.
  • Нет лишней вложенности.

Минусы

  • Когда не достаточно места, контент пропадает (например, div находится внутри body, а пользователь уменьшил окна, в этом случае скролл-бары не появятся.

3-ий метод

В этом методе, мы обернём div с контентом другим div-ом. Установим ему высоту в 50% (height: 50%;), а нижний отступ половине высоты (margin-bottom:-contentheight;). Контент будет очищать float и выводиться по центру.

#floater < float : left; height : 50%; margin-bottom : -120px; >#content

Плюсы

  • Работает во всех броузерах.
  • Когда недостаточно места (например, когда уменьшено окно) контент не обрезается, появятся скроллбары.

Минусы

  • Думаю только один: что используется лишний пустой элемент.

4-ый метод.

Этот метод использует свойство position:absolute; для div-а с фиксированными размерами (шириной и высотой). Затем устанавливаем ему координаты top:0; bottom:0;, но поскольку у него фиксированная высота, то он не может растянуться и выравнивается по центру. Это очень похоже на общеизвестный метод горизонтального выравнивания по центру блочного элемента фиксированной ширины (margin: 0 auto;).

#content

Плюсы

  • Очень просто.

Минусы

  • Не работает в Internet Explorer
  • Контент будет обрезаться без скролл-баров, если не хватает места в контейнере.

5-ый метод

С помощью этого метода можно выровнять по центру одну строку текста. Просто устанавливаем высоту текста (line-height) равной высоте элемента (height). После этого строка будет выведена по центру.

#content

Плюсы

  • Работает во всех броузерах.
  • Не обрезает текст, если он не влез.

Минусы

  • Работает только с текстом (не работает с блочными элементами).
  • Если текста больше чем одна строка, то выглядит очень плохо.

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

Теперь вы знаете как добиться вертикального выравнивания по центру, давайте сделаем простой web-сайт, который, в конце-концов будет выглядеть так:

Шаг 1

Всегда хорошо начинать с семантической разметки. Наша страница будет структурирована следующим образом:

  • #floater (чтобы выровнять контент по центру)
  • #centred (центральный элемент)
    • #side
      • #logo
      • #nav (список
          )

        Напишем следующую html-разметку:

        Шаг 2

        Сейчас мы напишем простейший CSS, для размещения элементов на странице. Вы должны сохранить этот код в файле style.css. Именно на него прописана ссылка в html-файле.

        html, body < margin : 0; padding : 0; height : 100%; >body < background : url('page_bg.jpg') 50% 50% no-repeat #FC3; font-family : Georgia, Times, serifs; >#floater < position : relative; float : left; height : 50%; margin-bottom : -200px; width : 1px; >#centered < position : relative; clear : left; height : 400px; width : 80%; max-width : 800px; min-width : 400px; margin : 0 auto; background : #fff; border : 4px solid #666; >#bottom < position : absolute; bottom : 0; right : 0; >#nav < position : absolute; left : 0; top : 0; bottom : 0; right : 70%; padding : 20px; margin : 10px; >#content

        Перед тем как сделать наш контент выровненным по центру, необходимо для body и html установить высоту 100%. Так как высота считается без внутренних и внешних отступов (padding и margin), то мы устанавливаем их (отступы) в 0, чтобы не было скроллбаров.

        Нижний отступ для элемента "floater"-а равен минус половине высоты контента (400px), а именно -200px;

        Сейчас ваша страничка должна выглядеть приблизительно так:

        Ширина элемента #centered 80%. Это делает наш сайт уже на маленьких экранах и шире на больших. большинство сайтов выглядит неприлично на новых широких мониторах в верхнем левом углу. Свойства min-width и max-width также ограничивают нашу страничку, чтобы она не выглядела слишком широкой или слишком узкой. Internet Explorer не поддерживает эти свойства. Для него надо установить фиксированную ширину.

        Поскольку элементу #centered установлено position:relative, мы можем использовать абсолютное позиционирование элементов внутри него. Затем установим overflow:auto; для элемента #content, чтобы появлялись скроллбары, в случае если не будет помещаться контент.

        Шаг 3

        И последнее что мы сделаем, это добавим кое-какие стили, чтобы страничка выглядела немного привлекательнее. Давайте начнём с меню.

        #nav ul < list-style : none; padding : 0; margin : 20px 0 0 0; text-indent : 0; >#nav li < padding : 0; margin : 3px; >#nav li a < display : block; background-color : #e8e8e8; padding : 7px; margin : 0; text-decoration : none; color : #000; border-bottom : 1px solid #bbb; text-align : right; >#nav li a::after < content : '»'; color : #aaa; font-weight : bold; display : inline; float : right; margin : 0 2px 0 5px; >#nav li a:hover, #nav li a:focus < background : #f8f8f8; border-bottom-color : #777; >#nav li a:hover::after < margin : 0 0 0 7px; color : #f93; >#nav li a:active

        Первое что мы сделали, чтобы меню выглядело лучше, удалили маркеры, установив атрибут list-style:none, а также установили внутренние и внешние отступы, так как по умолчанию в разных броузерах они сильно различаются.

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

        Другая интересная вещь, которую мы использовали для меню - это псевдо-классы :before и :after. Они позволяют вам добавить что-нибудь перед и после элемента. Это хороший способ добавлять иконки или символы, такие как стрелочка в конце каждой ссылки. Такой трюк не работает в Internet Explorer 7 и ниже.

        Шаг 4

        Ну и самое последнее, мы добавим в наш дизайн кое-какие втили для ещё большей красоты.

        #centered < -webkit-border-radius : 8px; -moz-border-radius : 8px; border-radius : 8px; >h1, h2, h3, h4, h5, h6 < font-family : Helvetica, Arial, sans-serif; font-weight : normal; color : #666; >h1 < color : #f93; border-bottom : 1px solid #ddd; letter-spacing : -0.05em; font-weight : bold; margin-top : 0; padding-top : 0; >#bottom < padding : 10px; font-size : 0.7em; color : #f03; >#logo < font-size : 2em; text-align : center; color : #999; >#logo strong < font-weight : normal; >#logo span < display : block; font-size : 4em; line-height : 0.7em; color : #666; >p, h2, h3 < line-height : 1.6em; >a

        В этих стилях мы устанавливаем закруглённые углы для элемента #centered. В CSS3, за это будет отвечать свойство border-radius. Это пока что не реализовано некоторыми броузерами, разве только использовать приставки -moz и -webkit для Mozilla Firefox и Safari/Webkit.

        Совместимость

        Как вы уже наверное предположили, основной источник проблем совместимости - Internet Explorer:

        • Элементу #floater обязательно надо установить ширину
        • В IE 6 лишние отступы вокруг меню

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *