Статьи

Краткий совет AtoZ CSS: вертикальное центрирование текста и значков

Эта статья является частью нашей серии CSS AtoZ. Вы можете найти другие записи серии здесь .
Вы можете просмотреть полную транскрипцию и скринкаст для vertical-align по vertical-align здесь .

Добро пожаловать в нашу серию AtoZ CSS! В этой серии я буду изучать различные значения CSS (и свойства), каждое из которых начинается с другой буквы алфавита. Мы знаем, что иногда скринкастов недостаточно, поэтому в этой статье мы добавили краткие советы о том, как вертикально центрировать текст и значки.

v2-01

V для вертикально центрирования текста и значков

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

Используйте line-height для простого вертикального центрирования

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

 .container { width: 200px; height: 200px; line-height: 200px; } 

Используйте position и transform для гибкого вертикального центрирования

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

Вместо этого мы можем комбинировать position и сдвиг в вертикальные центральные элементы переменной height . Например, для вертикального центрирования элемента на всю height области просмотра мы могли бы использовать следующий фрагмент:

 .container { position: relative; min-height: 100vh; } .vertical-center { position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); } 

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

Затем мы помещаем top left угол элемента, который должен быть центрирован по точному центру контейнера, располагая его top край на 50% от top его родителя и на 50% от left от его родителя.

Наконец, элемент смещается обратно в центр, переводя его на 50% от его height и left на 50% его width . Наш элемент теперь вертикально и горизонтально центрирован внутри контейнера. Поскольку размещение выполняется с процентными значениями, которые относятся к размеру элемента, если width или height контейнера или дочернего элемента изменится, элемент останется центрированным.

Используйте flexbox для вертикального центрирования

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

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

Для центрирования элемента с помощью flexbox мы можем использовать следующий фрагмент:

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

Этот компактный фрагмент превращает наш .container в гибкий контейнер, который автоматически превращает его дочерние элементы в гибкие элементы. Эти гибкие элементы можно затем центрировать по горизонтали с помощью justify-content и по вертикали с помощью align-items .