Эта статья является частью нашей серии CSS AtoZ. Вы можете найти другие записи серии здесь .
Вы можете просмотреть полную транскрипцию и скринкаст для vertical-align
по vertical-align
здесь .
Добро пожаловать в нашу серию AtoZ CSS! В этой серии я буду изучать различные значения CSS (и свойства), каждое из которых начинается с другой буквы алфавита. Мы знаем, что иногда скринкастов недостаточно, поэтому в этой статье мы добавили краткие советы о том, как вертикально центрировать текст и значки.
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
.