Разбираемся с vertical-align — Веб-стандарты
«Опять vertical-align
не работает!» — вздохнёт веб-разработчик.
CSS-свойство vertical-align
— одно из тех, которые с виду очень просты, но могут вызвать вопросы у начинающих разработчиков. Я думаю, что даже у многих ветеранов CSS когда-то были проблемы с тем, чтобы его до конца понять.
В этой статье я постараюсь в понятной форме рассказать про это свойство.
Чего оно не делаетСкопировать ссылку
Распространенное заблуждение о vertical-align
состоит в том, что применяясь к одному элементу, оно заставляет все элементы внутри него изменить свою вертикальную позицию. Например, когда элементу задан vertical-align: top
, это подразумевает, что его содержимое поднимется к его же верхней границе.
Вспоминаются времена, когда мы делали раскладки на основе таблиц:
<td valign="top">
Что-нибудь…
</td>
В данном примере с ячейкой таблицы использование свойства valign
(в настоящее время исключенного из HTML5) приведёт к тому, что элементы внутри ячейки прижмутся к её верху. И естественно, когда верстальщики начинают использовать vertical-align
, они думают, что получится то же самое, и содержимое элемента выровняется в соответствии со значением свойства.
Но vertical-align
работает не так.
Чем оно является на самом делеСкопировать ссылку
Использование свойства vertical-align
может быть разбито на три простых для понимания правила:
- Оно применяется только к строчным элементам
inline
или строчным блокамinline-block
. - Оно влияет на выравнивание самого элемента, а не его содержимого (кроме случаев, когда применяется к ячейкам таблицы).
- Когда оно применяется к ячейке таблицы, выравнивание влияет на содержимое ячейки, а не на неё саму.
Иными словами, следующий код не даст никакого эффекта:
div {
vertical-align: middle; /* эта строка бесполезна */
}
Почему? Потому что <div>
— это не строчный элемент и даже не строчный блок.
vertical-align
даст желаемый эффект.С другой стороны, при правильном применении (к строчному элементу или строчному блоку), свойство vertical-align
заставит текущий элемент выровняться относительно других строчных элементов.
Выше или ниже расположится элемент, будет зависеть от высоты строчных элементов на этой же строке или от свойства line-height
, заданного для неё.
Несколько картинокСкопировать ссылку
Вот картинка с пояснительным текстом, которая поможет вам понять, что происходит при вертикальном выравнивании строчных элементов:
А вот пример, в котором есть несколько строчных элементов, один из которых прижат к верху.
Ключевые словаСкопировать ссылку
Несколько ключевых слов, которые можно задавать в качестве значений для свойства vertical-align
:
baseline
, значение по умолчанию или «изначальное»bottom
middle
sub
super
text-bottom
text-top
top
Возможно, многие из них вы не будете использовать, но было бы неплохо знать все имеющиеся варианты. Например, на демо-странице, из-за того что значение vertical-align
для <input>
установлено как top
, он выровнен по самому высокому элементу в строке (большой картинке).
Однако если вы не хотите выравнивать элемент относительно картинок или других строчных элементов, обладающих блочными свойствами, вы можете выбрать значение text-top
или text-bottom
, тогда элементы будут выравниваться относительно текста в строке.
О ключевом слове
middle
Скопировать ссылкуК сожалению, правило vertical-align: middle
не выровняет строчный элемент по середине самого высокого элемента в строке (как вы, возможно, ожидали). Вместо этого значение middle
заставит элемент выровняться по середине высоты гипотетической строчной буквы «x» (так же называемой x-height). Потому, мне кажется, что это значение на самом деле должно называться text-middle
, чтобы стало понятно, какой будет результат.
Взгляните на пример, где я увеличил размер шрифта так, чтобы размер x-height стал гораздо больше. После этого станет понятно, что значение middle
не получится использовать очень часто.
Числовые значенияСкопировать ссылку
Возможно, вы не знали о том, что vertical-align
принимает числовые и процентные значения. Однако это так, и вот примеры их использования:
input {
vertical-align: 100px;
}
span {
vertical-align: 50%;
}
img {
vertical-align: -300px;
}
Несмотря на то, что вы можете прочитать в спецификации раздел, описывающий, какие есть ключевые слова и значения, я думаю, гораздо полезней будет самостоятельно поиграть с ними и сравнить результаты.
ЗаключениеСкопировать ссылку
Если в одной фразе подводить итог о том, как использовать это традиционно неправильно понимаемое свойство, я бы сказал:
Свойство vertical-align
работает только со строчными элементами или строчными блоками и ячейками таблицы. В случае применения не к ячейкам таблицы, оно действует на сам элемент, а не на его содержимое.
vertical-align | htmlbook.ru
Internet Explorer | Chrome | Opera | Safari | Firefox | Android | iOS | |
6.0+ | 8.0+ | 1.0+ | 3.5+ | 1.0+ | 1.0+ | 1.0+ | 1.0+ |
Краткая информация
Версии CSS
Описание
Выравнивает элемент по вертикали относительно своего родителя, окружающего текста или ячейки таблицы.
Синтаксис
vertical-align: baseline|bottom|middle|sub|super|text-bottom|text-top|top|inherit | значение | проценты
Значения
- baseline
- Выравнивает базовую линию текущего элемента по базовой линии родителя. Если родительский элемент не имеет базовой линии, то за нее принимается нижняя граница элемента.
- bottom
- Выравнивает основание текущего элемента по нижней части элемента строки, расположенного ниже всех.
- middle
- Выравнивание средней точки элемента по базовой линии родителя плюс половина высоты родительского элемента.
- sub
- Элемент изображается как подстрочный, в виде нижнего индекса. Размер шрифта при этом не меняется.
- super
- Элемент изображается как надстрочный, в виде верхнего индекса. Размер шрифта остается прежним.
- text-bottom
- Нижняя граница элемента выравнивается по самому нижнему краю текущей строки.
- text-top
- Верхняя граница элемента выравнивается по самому высокому текстовому элементу текущей строки.
- top
- Выравнивание верхнего края элемента по верху самого высокого элемента строки.
- inherit
- Наследует значение родителя.
В качестве значения также можно использовать проценты, пикселы или другие доступные единицы. Положительное число смещает элемент вверх относительно базовой линии, в то время как отрицательное число опускает его вниз. При использовании процентов, отсчет ведется от значения свойства line-height, при этом 0% аналогично значению baseline.
Для выравнивания по вертикали в ячейках таблицы применяются следующие значения.
- baseline
- Выравнивает базовую линию ячейки с базовой линией первой текстовой строки или другого вложенного элемента.
- bottom
- Выравнивает по нижнему краю ячейки.
- middle
- Выравнивает по середине ячейки.
- top
- Выравнивает содержимое ячейки по ее верхнему краю.
Пример
HTML5CSS2.1IECrOpSaFx
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>vertical-align</title> </head> <body> <div> T<span>E</span>X и L<span >A</span>T<span >E</span>X </div> </body> </html>
Результат данного примера показан на рис. 1.
Рис. 1. Применение свойства vertical-align
Объектная модель
[window.]document.getElementById(«elementID»).style.verticalAlign
Браузеры
Internet Explorer до версии 7. 0 включительно не поддерживает значение inherit.
Свойство vertical-align — Блог HTML Academy
Свойство vertical-align
управляет вертикальным выравниванием элементов внутри своих родителей. Оно применяется к строчным элементам и к ячейкам таблиц. У него десять возможных значений:
baseline
sub
super
text-top
text-bottom
middle
top
bottom
- указание расстояния
- указание процентов
Типографские единицы измерения
Разные значения свойства vertical-align
зависят от определённых типографских единиц измерения. Поэтому, чтобы понимать эти значения, для начала нужно понять эти единицы изменения. Существует семь таких единиц, на которых базируются значения свойства.
Цвет | Единица | Описание |
---|---|---|
baseline | базовая линия шрифта | |
subscript baseline | базовая линия нижнего индекса строки | |
superscript baseline | базовая линия верхнего индекса строки | |
x height | высота буквы «x» шрифта | |
line height | высота строки | |
font top | верхняя линия, верхняя граница шрифта | |
font bottom | нижняя линия, нижняя граница шрифта |
Значения
Свойство vertical-align
устанавливает вертикальное выравнивание строчным элементам или ячейкам таблицы согласно этим типографским единицам. В зависимости от того, к какому элементу они применяются (строчному или к ячейке таблицы), значения могут иметь немного разный смысл.
Baseline (базовая линия)
Значение baseline
для строчных элементов выравнивает базовую линию текущего элемента по базовой линии родительского. В примере ниже, у квадрата следующие стили:
Для табличных элементов свойство выравнивает содержимое ячейки по базовой линии всех других ячеек в этой строке, выравненных по базовой линии в одном ряду. В примере ниже у всех ячеек в подсвеченной строке установлено значение baseline
.
Sub
Значение sub
для строчных элементов выравнивает базовую линию текущего элемента по базовой линии нижнего индекса родительского элемента.
sub
для строчных элементовДля табличных элементов это значение приводит к такому же результату, как и baseline
.
Super
Значение super
для строчных элементов выравнивает базовую линию текущего элемента по базовой линии верхнего индекса родительского элемента.
super
для строчных элементовДля табличных элементов это значение приводит к такому же результату, как и baseline
.
Text-top
Значение text-top
для строчных элементов выравнивает верхнюю границу текущего элемента по верхней линии шрифта родительского элемента.
text-top
для строчных элементовДля табличных элементов это значение приводит к такому же результату, как и baseline
.
Text-bottom
Значение text-bottom
для строчных элементов выравнивает нижнюю границу текущего элемента по нижней границе шрифта родительского элемента.
text-bottom
для строчных элементовДля табличных элементов это значение приводит к такому же результату, как и baseline
.
Middle
Значение middle
для строчных элементов выравнивает середину текущего элемента по середине родительского элемента. Середина родительского элемента подсчитывается следующим образом: берётся высота символа x, делится пополам и добавляется к базовой линии.
middle
для строчных элементовДля табличных элементов это значение выравнивает содержимое текущей ячейки по центру строки с учётом внутренних отступов (padding-box).
Значениеmiddle
для ячеек таблицыTop
Значение top
для строчных элементов выравнивает верхнюю границу текущего элемента по верхней границе всей строки, на которой находится элемент. Это значение не обязательно связано со шрифтовыми элементами в строке.
top
для строчных элементовДля табличных элементов это значение выравнивает содержимое текущей ячейки по верхнему краю строки с учётом внутреннего отступа.
Значениеtop
для ячеек таблицыBottom
Значение bottom
для строчных элементов выравнивает нижнюю границу текущего элемента по нижней границе всей строки, на которой находится элемент.
bottom
для строчных элементовДля табличных элементов это значение выравнивает содержимое текущей ячейки по нижнему краю строки с учётом внутреннего отступа.
Значениеbottom
для ячеек таблицыРасстояние
Указанное значение для строчных элементов передвигает базовую линию текущего элемента на указанное расстояние относительно базовой линии родительского элемента. На примере ниже, розовый квадрат имеет следующие стили:
Для табличных элементов это значение приводит к такому же результату, как и baseline
.
Проценты
Указание значения в процентах для строчных элементов передвигает базовую линию текущего элемента относительно базовой линии родительского элемента на расстояние, равное заданному проценту от высоты строки родительского элемента. На примере ниже, розовый квадрат имеет следующие стили:
Смещение базовой линии с помощью указания процентовДля табличных элементов это значение приводит к такому же результату, как и baseline
.
align | HTML и CSS с примерами кода
Свойство vertical-align
выравнивает элемент по вертикали относительно своего родителя, окружающего текста или ячейки таблицы.
Синтаксис
/* keyword values */
vertical-align: baseline;
vertical-align: sub;
vertical-align: super;
vertical-align: text-top;
vertical-align: text-bottom;
vertical-align: middle;
vertical-align: top;
vertical-align: bottom;
/* <length> values */
vertical-align: 10em;
vertical-align: 4px;
/* <percentage> values */
vertical-align: 20%;
/* Global values */
vertical-align: inherit;
vertical-align: initial;
vertical-align: unset;
Значения
baseline
- Выравнивает базовую линию блока по базовой линии родителя. Если у блока нет базовой линии, то за неё принимается нижняя граница.
bottom
middle
- Выравнивает вертикальную среднюю точку блока по базовой линии родительского блока плюс половина высоты буквы «x».
sub
- Опускает базовую линию блока вниз для создания нижнего индекса. Не оказывает влияние на размер текста.
super
- Поднимает базовую линию блока вверх для создания верхнего индекса. Не оказывает влияние на размер текста.
text-bottom
- Нижняя граница элемента выравнивается по нижнему краю содержимого родителя.
text-top
- Верхняя граница элемента выравнивается по верхнему краю содержимого родителя.
top
- Выравнивает верх блока по верхней части строки.
В качестве значения также можно использовать проценты, пиксели или другие доступные единицы. Положительное число смещает элемент вверх относительно базовой линии, в то время как отрицательное число опускает его вниз. При использовании процентов, отсчёт ведётся от значения свойства line-height
, при этом 0% аналогично значению baseline
.
Для выравнивания по вертикали в ячейках таблицы применяются следующие значения:
baseline
- Выравнивает базовую линию ячейки с базовой линией первой текстовой строки или другого вложенного элемента.
bottom
- Выравнивает по нижнему краю ячейки.
middle
- Выравнивает по середине ячейки.
top
- Выравнивает содержимое ячейки по её верхнему краю.
Значение по-умолчанию: baseline
Применяется к строчным элементам или ячейкам таблицы
Спецификации
Описание и примеры
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>vertical-align</title> <style> .tex { font-size: 2rem; } .tex sub { vertical-align: sub; font-size: 1.8rem; } .tex sup { vertical-align: 5px; font-size: 1.6rem; } </style> </head> <body> <div> T<sub>E</sub>X и L<sup>A</sup>T<sub>E</sub>X </div> </body> </html>
vertical-align | Вертикальное выравнивание текста
vertical-align
[w3. org] работает только с элементами таблицы и inline-элементами (в т.ч. с display: inline-block;
).
vertical-align
для элементов таблицы и для display: table-cell;
vertical-align
, заданное элементам таблицы, выравнивает содержимое в ячейке по вертикали.
текст | строка1 |
<style> .demotable { background: #E7D5C0; } .demotable td { height: 150px; border: 1px dashed #E7D5C0; background: #fff5d7; vertical-align: middle; baseline; top; bottom; } </style> <table> <tr> <td><img src="http://2.bp.blogspot.com/-ucwWGxkrync/TQqQM2MIxqI/AAAAAAAABJo/241YgHBwh3Y/s72-c/Logo-Blogger.png" alt="Blogger"/> <td>текст <td><div>строка1<br>строка2</div> </table>
Строка
Базовая линия (англ. baseline, или линия шрифта) — это воображаемая линия, проходящая по нижнему краю символов без учёта свисаний, например, как у букв «ц», «д», «р», «щ».
display: table-cell;
похож на <td>
. Высота элемента с display: table-cell;
равна высоте наиболее высокого элемента с display: table-cell;
из группы. vertical-align
тут также выравнивает содержимое по вертикали, но уже по умолчанию имеет значение baseline
.
текст
строка1
строка2
<style> .demotable { background: #E7D5C0; } .demotable > div { display: table-cell; height: 150px; border: 1px dashed #E7D5C0; background: #fff5d7; vertical-align: baseline;middle;top;bottom; } </style> <div> <div><img src="http://2.bp.blogspot.com/-ucwWGxkrync/TQqQM2MIxqI/AAAAAAAABJo/241YgHBwh3Y/s72-c/Logo-Blogger.png" alt="Blogger"/></div> <div>текст</div> <div><div>строка1<br>строка2</div></div> </div>
Если элемент с display: table-cell;
нужно выровнять по высоте родителя, то родителю нужно указать display: table;
или display: inline-table;
.
текст
строка1
строка2
<style> .demotable { display: table; height: 150px; background: #E7D5C0; } .demotable > div { display: table-cell; border: 1px dashed #E7D5C0; background: #fff5d7; vertical-align: middle; } </style> <div> <div><img src="http://2.bp.blogspot.com/-ucwWGxkrync/TQqQM2MIxqI/AAAAAAAABJo/241YgHBwh3Y/s72-c/Logo-Blogger.png" alt="Blogger"/></div> <div>текст</div> <div><div>строка1<br>строка2</div></div> </div>
vertical-align
у элементов с display: inline;
, display: inline-block;
и display: inline-table;
vertical-align
у строчных тегов выравнивает по вертикали сам элемент относительно родителя, если его высота меньше высоты текущей строки родителя (свойство line-height
).
Высота элемента: px
Отступ снизу: px
<style> . sem { background: #fff5d7; line-height: 150px; font-size: 0; } .sem div { display: inline-block; font-size: medium; line-height: normal; vertical-align: baselinetoptext-topmiddlebottomtext-bottominherit ; } </style> <div><div> </div></div>
Или относительно соседних элементов, находящихся на данной строке.
▼ top text-top middle bottom text-bottom sub super inherit Элемент <sub>Текст строки x <sup>display: inline-block;<style> b { font-size: 150%; vertical-align: baseline; top; text-top; middle; bottom; text-bottom; sub; super; inherit; } span { display: inline-block; height: 5em; } </style> <b>Элемент</b> <sub><sub></sub> Текст строки x <sup><sup></sup> <span>display: inline-block;</span> <img src="http://2. bp.blogspot.com/-ucwWGxkrync/TQqQM2MIxqI/AAAAAAAABJo/241YgHBwh3Y/s72-c/Logo-Blogger.png" alt="Blogger"/>
Практическое использование: Как сделать обтекание картинки текстом.
Или vertical-align
сам увеличивает строку родителя на значение, указанное в px
или %
.
<style> b { font-size: 150%; vertical-align: baseline; } span { display: inline-block; height: 100px; } </style> <b>Элемент</b> <sub><sub></sub> Текст строки x <sup><sup></sup> <span>display: inline-block;</span> <img src="http://2.bp.blogspot.com/-ucwWGxkrync/TQqQM2MIxqI/AAAAAAAABJo/241YgHBwh3Y/s72-c/Logo-Blogger.png" alt="Blogger"/>
vertical-align
не работаетЕщё раз хочу обратить внимание на то, что для inline-элементов vertical-align: middle;
:
- выравнивает сам элемент, а не его содержимое. То есть не будут желаемого результата, если
vertical-align
присвоить родителю. - выравнивает элемент только относительно других соседних элементов, если для родителя не указана
line-height
. То есть у родителя должно быть два и более дочерних элементов.
<style> .parent { min-height: 150px; background: #E7D5C0; text-align: center; vertical-align: middle; display: inline-block; width: 100%; } .parent div { max-width: 300px; width: 100%; height: 100px; background: #fff5d7; text-align: left; display: inline-block; vertical-align: middle; vertical-align: middle; } .parent:before { content: ""; display: inline-block; min-height: inherit; height: 100%; vertical-align: middle; } </style> <div><div></div></div>Этот вариант вертикального выравнивания текста по центру блока предпочтителен, поскольку
line-height
может не поддерживаться мобильными браузерами, такими как Opera Mini [opera.com], и равнозначен с display: table-cell;
.vertical-align — CSS: каскадные таблицы стилей
Свойство CSS vertical-align
устанавливает вертикальное выравнивание встроенного блока, блока встроенного блока или ячейки таблицы.
Свойство vertical-align можно использовать в двух контекстах:
Обратите внимание, что vertical-align
применяется только к элементам inline, inline-block и table-cell: вы не можете использовать его для вертикального выравнивания элементов уровня блока.
вертикальное выравнивание: базовая линия;
вертикальное выравнивание: суб;
вертикальное выравнивание: супер;
вертикальное выравнивание: верхний текст;
вертикальное выравнивание: нижний текст;
вертикальное выравнивание: по центру;
вертикальное выравнивание: сверху;
вертикальное выравнивание: снизу;
вертикальное выравнивание: 10em;
вертикальное выравнивание: 4 пикселя;
вертикальное выравнивание: 20%;
вертикальное выравнивание: наследование;
вертикальное выравнивание: начальное;
вертикальное выравнивание: отключено;
Свойство vertical-align
указано как одно из значений, перечисленных ниже.
Значения для встроенных элементов
Родительские значения
Эти значения выравнивают элемент по вертикали относительно его родительского элемента:
-
базовый
- Выравнивает базовую линию элемента с базовой линией его родительского элемента. Базовая линия некоторых заменяемых элементов, таких как
, не указана в спецификации HTML, а это означает, что их поведение с этим ключевым словом может различаться в разных браузерах.
-
переходник
- Выравнивает базовую линию элемента с базовой линией нижнего индекса его родительского элемента.
-
супер
- Выравнивает базовую линию элемента с верхним индексом его родительского элемента.
-
текст вверху
- Выравнивает верх элемента по верхнему краю шрифта родительского элемента.
-
текст внизу
- Выравнивает нижнюю часть элемента по нижнему краю шрифта родительского элемента.
-
средний
- Выравнивает середину элемента по базовой линии плюс половину высоты родительского элемента по оси x.
-
<длина>
- Выравнивает базовую линию элемента по заданной длине над базовой линией его родительского элемента. Допускается отрицательное значение.
-
<процент>
- Выравнивает базовую линию элемента по заданному проценту над базовой линией его родительского элемента, при этом значение представляет собой процентное значение свойства
line-height
. Допускается отрицательное значение.
Значения относительно линии
Следующие значения выравнивают элемент по вертикали относительно всей линии:
-
верхняя
- Выравнивает верх элемента и его потомков с верхом всей строки.
-
нижняя
- Выравнивает нижнюю часть элемента и его потомков по нижней части всей строки.
Для элементов, не имеющих базовой линии, вместо этого используется край нижнего поля.
Значения для ячеек таблицы
-
baseline
(иsub
,super
,text-top
,text-bottom
, - Выравнивает базовую линию ячейки с базовой линией всех других ячеек в строке, которые выровнены по базовой линии.
-
верхняя
- Выравнивает верхний край заполнения ячейки по верхнему краю строки.
-
средний
- Центрирует поле заполнения ячейки в строке.
-
нижняя
- Выравнивает нижний край заполнения ячейки с нижней частью строки.
Допускаются отрицательные значения.
Базовый пример
HTML
An изображение с выравниванием по умолчанию.
Изображение с выравниванием по верхнему краю текста.
Изображение с выравниванием текста по нижнему краю.
Изображение с выравниванием по центру.
CSS
img.top {vertical-align: text-top; }
img.bottom {вертикальное выравнивание: нижний текст; }
img.middle {вертикальное выравнивание: середина; }
Результат
Вертикальное выравнивание в строчном прямоугольнике
HTML
вверху:
в центре:
внизу:
super:
sub:
верхний текст:
нижний текст:
0.2em:
-1em:
20%:
-100%:
# * {
размер коробки: рамка-рамка;
}
img {
маржа справа: 0,5em;
}
п {
высота: 3em;
заполнение: 0,5 эм;
семейство шрифтов: моноширинный;
оформление текста: подчеркивание над чертой;
маржа слева: авто;
маржа-право: авто;
ширина: 80%;
}
Результат
Выравнивание по вертикали в ячейке таблицы
HTML
<таблица>
базовый уровень
вверх
средний
снизу
Существует теория, согласно которой, если кто-нибудь когда-нибудь обнаружит,
для чего существует Вселенная и почему она здесь, она мгновенно исчезнет и
быть заменено чем-то еще более причудливым и необъяснимым.
Есть еще одна теория, согласно которой это уже произошло.
CSS
стол {
маржа слева: авто;
маржа-право: авто;
ширина: 80%;
}
table, th, td {
граница: сплошной черный 1px;
}
td {
заполнение: 0.5em;
семейство шрифтов: моноширинный;
}
Результат
таблицы BCD загружаются только в браузер
выравнивание по вертикали | CSS-уловки
Свойство vertical-align
в CSS управляет выравниванием элементов, расположенных рядом друг с другом в строке.
img {
вертикальное выравнивание: по центру;
}
Для того, чтобы это работало, элементы должны быть установлены по базовой линии. Например, inline
(например,
,
) или inline-block
(например, как установлено свойством display
).
Допустимые значения:
-
baseline
— это значение по умолчанию. -
верх
— Совместите верх элемента и его потомков с верхом всей строки. -
bottom
— Выровняйте нижнюю часть элемента и его потомков с нижней частью всей строки. -
средний
— выравнивает середину элемента по середине строчных букв в родительском элементе. -
text-top
— выравнивает верх элемента по верхнему краю шрифта родительского элемента -
text-bottom
— выравнивает нижнюю часть элемента по нижнему краю шрифта родительского элемента. -
sub
— выравнивает базовую линию элемента с нижней линией его родительского элемента.Например, где будет сидеть -
super
— выравнивает базовую линию элемента с верхним индексом его родительского элемента. Например, где будет сидеть -
длина
— выравнивает базовую линию элемента на заданной длине над базовой линией его родительского элемента. (например, px,%, em, rem и т. д.)
Вы можете увидеть примеры каждого здесь:
Оцените эту ручку!
Распространенный вариант использования — объединение аватара с именем пользователя.Чтобы выровнять их по центру линии, используйте vertical-align: middle;
. Хотя обратите внимание, что он центрирует текст в соответствии с его самым высоким восходящим и самым глубоким нижним нижним.
Каждый элемент выстраивается в соответствии с установленной вами линией, которая не меняется от элемента к элементу. Таким образом, вы можете смешивать и сопоставлять, какие элементы имеют какое значение — элементы не влияют друг на друга.
Обратите внимание, что vertical-align также полезно для элементов table-cell, выравнивает содержимое внутри них.Однако лучше всего придерживаться верхних, средних и нижних значений, поскольку другие значения дают противоречивые результаты в разных браузерах.
Дополнительная информация
- Что такое выравнивание по вертикали?
- Это свойство не позволяет вам «центрировать по вертикали» элемент внутри другого элемента. Flexbox — более подходящий инструмент. Однако есть трюк с использованием псевдо «призрачного» элемента, который может позволить этому сработать.
- MDN
Поддержка браузера
Хром | Safari | Firefox | Opera | IE | Android | iOS |
---|---|---|---|---|---|---|
Любая | любой | любой | 4+ | 4+ | любой | любой |
Обратите внимание, что некоторые элементы замены (например,
) являются встроенными, но их базовая линия не указана, поэтому поведение может отличаться от браузера к браузеру.
html — Как центрировать текст по вертикали с помощью CSS?
Другой способ (здесь еще не упомянут) — использование Flexbox.
Просто добавьте следующий код к элементу контейнера :
дисплей: гибкий;
justify-content: center; / * выравниваем по горизонтали * /
align-items: center; / * выравниваем по вертикали * /
.коробка {
высота: 150 пикселей;
ширина: 400 пикселей;
фон: # 000;
размер шрифта: 24 пикселя;
стиль шрифта: наклонный;
цвет: #FFF;
выравнивание текста: центр;
отступ: 0 20 пикселей;
маржа: 20 пикселей;
дисплей: гибкий;
justify-content: center;
/ * выравниваем по горизонтали * /
align-items: center;
/ * выравниваем по вертикали * /
}
Lorem ipsum dolor sit amet, conctetuer adipiscing elit, sed diam nonummy nibh
В качестве альтернативы, вместо выравнивания содержимого через контейнер , flexbox также может центрировать гибкий элемент с автоматическим полем , когда в гибком контейнере есть только один гибкий элемент (как пример, приведенный в вопросе выше).
Итак, чтобы центрировать гибкий элемент по горизонтали и вертикали, просто установите его с полем : auto
.box {
высота: 150 пикселей;
ширина: 400 пикселей;
фон: # 000;
размер шрифта: 24 пикселя;
стиль шрифта: наклонный;
цвет: #FFF;
выравнивание текста: центр;
отступ: 0 20 пикселей;
маржа: 20 пикселей;
дисплей: гибкий;
}
.box span {
маржа: авто;
}
margin: auto на гибком элементе центрирует его по горизонтали и вертикали
NB: Все вышесказанное относится к центрированию элементов при их размещении в горизонтальных рядах .Это также поведение по умолчанию, потому что по умолчанию значение для flex-direction
— , строка
. Если, однако, гибкие элементы необходимо разместить в вертикальных столбцах , тогда flex-direction: column
следует установить в контейнере, чтобы установить главную ось в качестве столбца и, кроме того, выравнивание justify-content
и . -items
свойства теперь работают наоборот вокруг с justify-content: center
centering vertical and align-items: center
centering horizontal)
.коробка {
высота: 150 пикселей;
ширина: 400 пикселей;
фон: # 000;
размер шрифта: 18 пикселей;
стиль шрифта: наклонный;
цвет: #FFF;
дисплей: гибкий;
flex-direction: столбец;
justify-content: center;
/ * выравнивает элементы по вертикали * /
align-items: center;
/ * выравнивает элементы по горизонтали * /
}
п {
маржа: 5 пикселей;
}
Когда flex-direction является столбцом ...
"justify-content: center" - выравнивает по вертикали.
"align-items: center" - выравнивает по горизонтали
Хорошее место для начала работы с Flexbox, чтобы увидеть некоторые его функции и получить синтаксис для максимальной поддержки браузера, — это flexyboxes
.Кроме того, поддержка браузеров в настоящее время очень хорошая: caniuse
Для кроссбраузерной совместимости для дисплея : flex
и align-items
можно использовать следующее:
дисплей: -webkit-box;
дисплей: -webkit-flex;
дисплей: -moz-box;
дисплей: -ms-flexbox;
дисплей: гибкий;
-webkit-flex-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
CSS: центрирующие элементы
CSS: центрирующие элементыСм. Также указатель всех советов.
Центрирующие предметы
Распространенной задачей CSS является центрирование текста или изображений. По факту, существует три вида центрирования:
В последних реализациях CSS вы также можете использовать функции из уровень 3, позволяющий центрировать абсолютно позиционированные элементы:
Центрирующие строки текста
Самый распространенный и (следовательно) самый простой тип центрирования — это строк текста в абзаце или заголовке. CSS имеет свойство text-align для этого:
П {выравнивание текста: центр} h3 {text-align: center}
отображает каждую строку в P или в h3 с центром между ее поля, например:
Все строки в этом абзаце по центру между полями абзаца благодаря значению ‘center’ свойства CSS ‘text-align’.
Центрирование блока или изображения
Иногда нужно центрировать не текст, а блок в целом. Или, говоря иначе: мы хотим левую и правое поле должно быть равным. Для этого нужно установить поля. на «авто». Обычно это используется с блоком фиксированной ширины, потому что если сам блок гибкий, он просто займет все доступная ширина. Вот пример:
P.blocktext { маржа слева: авто; маржа-право: авто; ширина: 8em } ...Это скорее ...
Этот довольно узкий блок текста расположен по центру. Обратите внимание, что линии внутри блока не центрированы (они с выравниванием по левому краю), в отличие от предыдущего примера.
Это также способ центрировать изображение: превратить его в блок свой собственный и примените к нему свойства поля. Например:
IMG.displayed { дисплей: блок; маржа слева: авто; margin-right: auto} ...
Следующее изображение отцентрировано:
Вертикальное центрирование
CSS level 2 не имеет свойства для центрирования вещей вертикально.Вероятно, он будет на уровне CSS 3 (см. Ниже). Но даже в CSS2 вы можете центрировать блоки по вертикали, комбинируя несколько свойств. Хитрость заключается в том, чтобы указать, что внешний блок форматироваться как ячейка таблицы, потому что содержимое таблицы ячейку можно центрировать по вертикали .
Пример ниже центрирует абзац внутри блока, имеющего определенная заданная высота. В отдельном примере показан абзац, центрированный по вертикали в браузере. окно, потому что оно находится внутри блока, который абсолютно позиционирован и высотой с окно.
DIV.container { мин-высота: 10em; дисплей: таблица-ячейка; вертикальное выравнивание: средний} ...Этот небольшой абзац ...
Этот маленький абзац расположен по центру вертикально.
Вертикальное центрирование в CSS, уровень 3
CSS level 3 предлагает другие возможности. В это время (2014 г.) хороший способ центрировать блоки по вертикали без использования абсолютного позиционирование (которое может привести к наложению текста) все еще ниже обсуждение.Но если вы знаете, что перекрывающийся текст не будет проблема в вашем документе, вы можете использовать свойство ‘transform’, чтобы центрировать абсолютно позиционированный элемент. Например:
Этот абзац расположен по центру по вертикали.
Для документа, который выглядит так:
Этот абзац…
таблица стилей выглядит так:
div.container3 { высота: 10em; позиция: относительная } / * 1 * / div.container3 p { маржа: 0; позиция: абсолютная; / * 2 * / верх: 50%; / * 3 * / преобразование: перевод (0, -50%) } / * 4 * /
Основные правила:
- Сделайте контейнер относительно позиционированным, который объявляет, что это контейнер для абсолютно позиционированных элементов.
- Сделайте сам элемент абсолютно позиционированным.
- Поместите его наполовину в емкость с надписью «верх: 50%».(Примечание что 50% ‘здесь означает 50% высоты контейнера.)
- Используйте перевод, чтобы переместить элемент вверх наполовину высота. (‘50% ‘в’ translate (0, -50%) ‘обозначает высоту сам элемент.)
Недавно (примерно с 2015 г.) стала еще одна техника. доступен в нескольких реализациях CSS. Он основан на новом Ключевое слово flex для свойства display. Это ключевое слово имеет в виду для использования в графических пользовательских интерфейсах (GUI), но вас ничто не останавливает от использования его в документе, если документ имеет правильная структура.
Этот абзац расположен по центру по вертикали.
таблица стилей выглядит так:
div.container5 { высота: 10em; дисплей: гибкий; align-items: center } div.container5 p { маржа: 0}
Центрирование по вертикали и горизонтали в CSS, уровень 3
Мы можем расширить оба метода, чтобы центрировать по горизонтали и вертикально одновременно.
Побочным эффектом абсолютного позиционирования абзаца является что тогда он будет настолько широким, насколько он должен быть (если мы не дадим ему явная ширина, конечно).В приведенном ниже примере это именно то, что мы хотим: мы центрируем абзац всего одним словом («По центру!»), Поэтому ширина абзаца должна быть точно ширина этого слова.
Желтый фон показывает, что абзац на самом деле только настолько, насколько велико его содержание. Мы предполагаем ту же наценку, что и перед:
По центру!
Таблица стилей аналогична предыдущему примеру в отношении до вертикального центрирования.Но теперь мы переместим элемент наполовину по всему контейнеру, с ‘left: 50%’, и в то же время время переместите его влево на половину его собственной ширины в ‘translate’ трансформация:
div.container4 { высота: 10em; position: relative} div.container4 p { маржа: 0; фон: желтый; позиция: абсолютная; верх: 50%; осталось: 50%; поле справа: -50%; преобразовать: перевести ( -50%, -50%)}
В следующем примере ниже объясняется, почему «margin-right: -50%» нужный.
Когда средство форматирования CSS поддерживает flex, это еще проще:
с этой таблицей стилей:
div.container6 { высота: 10em; дисплей: гибкий; align-items: center; justify-content: center } div.container6 p { маржа: 0}
, то есть единственное дополнение — это «justify-content: center». Просто как ‘align-items’ определяет вертикальное выравнивание содержимого контейнера, ‘justify-content’ определяет горизонтальный выравнивание.(На самом деле это немного сложнее, так как их имена предлагаю, но в простом случае это работает именно так.) Побочный эффект из ‘flex’ заключается в том, что дочерний элемент, P в данном случае, является автоматически делается как можно меньше.
Центрирование в области просмотра в CSS уровня 3
Контейнером по умолчанию для абсолютно позиционированных элементов является область просмотра. (В случае браузера это означает окно браузера). Так центрировать элемент в области просмотра очень просто.Вот полный пример. (В этом примере используется синтаксис HTML5.)
<стиль> тело { background: white} раздел { фон: черный; цвет белый; радиус границы: 1em; заполнение: 1em; позиция: абсолютная; верх: 50%; осталось: 50%; поле справа: -50%; преобразование: перевод (-50%, -50%) } <раздел>Красиво по центру
Этот текстовый блок центрирован по вертикали.
И по горизонтали, если окно достаточно широкое.
Вы можете увидеть результат в отдельном документ.
Поле «margin-right: -50%» необходимо для компенсации «left: 50% ». Правило «влево» уменьшает доступную ширину элемента. на 50%. Таким образом, средство визуализации попытается создать строки, которые больше не чем на половину ширины контейнера. Сказав, что право маржа элемента дальше вправо на ту же величину, максимальная длина строки снова равна ширине контейнера.
Попробуйте изменить размер окна: вы увидите, что каждое предложение состоит из одного линия, когда окно достаточно широкое. Только когда окно слишком узкий для всего предложения будет ли приговор разбит несколько строк. Когда вы удаляете ‘margin-right: -50%’ и изменяете размер снова окно, вы увидите, что предложения будут разбиты уже тогда, когда ширина окна в два раза превышает ширину текстовых строк.
(Использование ‘translate’ для центрирования в области просмотра было первым предложенный «Чарли» в ответе на переполнение стека.)
Вертикальное выравнивание / Типографика / Документы / ТАХИОНЫ
Примеры
Выравнивание стола
Вы можете использовать классы вертикального выравнивания либо на элементах td, либо на элементах с классом dtc
, которые являются прямыми
дочерние элементы элемента с классом dt
.
.v-середина
Выровняйте текст по центру.
|
|
.v-top
Выровняйте текст по верхнему краю.
|
|
.v-btm
Выровняйте текст по нижнему краю.
|
Линейно-блочное выравнивание
По верхнему краю
Содержание
Содержание
Содержание
Вы можете сказать: «Я люблю тебя» на языке Helvetica. И вы можете сказать это с помощью Helvetica Extra Light, если вы хотите выглядеть по-настоящему необычно.Или вы можете сказать это с помощью Extra Смело, если это действительно интенсивно и увлеченно, знаете ли, и это может сработать.
Вы можете сказать: «Я люблю тебя» на языке Helvetica. И вы можете сказать это с помощью Helvetica Дополнительный свет…
если ты хочешь быть по-настоящему модным. Или вы можете сказать это с помощью Extra Смелее, если это действительно интенсивно и увлеченно, знаете ли, и это может сработать.
Сочетание и комбинирование
Содержание
Содержание
Содержание
Вы можете сказать: «Я люблю тебя» на языке Helvetica.И вы можете сказать это с помощью Helvetica Extra Light, если вы хотите выглядеть по-настоящему необычно. Или вы можете сказать это с помощью Extra Смелее, если это действительно интенсивно и увлеченно, знаете ли, и это может сработать.
Вы можете сказать: «Я люблю тебя» на языке Helvetica. И вы можете сказать это с помощью Helvetica Дополнительный свет…
если ты хочешь быть по-настоящему модным. Или вы можете сказать это с помощью Extra Смелее, если это действительно интенсивно и увлеченно, знаете ли, и это может сработать.
По центру
Содержание
Содержание
Содержание
Вы можете сказать: «Я люблю тебя» на языке Helvetica.И вы можете сказать это с помощью Helvetica Extra Light, если вы хотите выглядеть по-настоящему необычно. Или вы можете сказать это с помощью Extra Смелее, если это действительно интенсивно и увлеченно, знаете ли, и это может сработать.
Вы можете сказать: «Я люблю тебя» на языке Helvetica. И вы можете сказать это с помощью Helvetica Дополнительный свет…
если ты хочешь быть по-настоящему модным.
По нижнему краю
Содержание
Содержание
Содержание
Вы можете сказать: «Я люблю тебя» на языке Helvetica.И вы можете сказать это с помощью Helvetica Extra Light, если вы хотите выглядеть по-настоящему необычно. Или вы можете сказать это с помощью Extra Смелее, если это действительно интенсивно и увлеченно, знаете ли, и это может сработать.
Вы можете сказать: «Я люблю тебя» на языке Helvetica. И вы можете сказать это с помощью Helvetica Дополнительный свет…
если ты хочешь быть по-настоящему модным.
Вертикальное выравнивание — попутный ветер CSS
Базовая линия
Используйте align-baseline
, чтобы выровнять базовую линию элемента с базовой линией его родительского элемента.
Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
...
Top
Используйте align-top
, чтобы выровнять верх элемента и его потомков с верхом всей строки.
Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
...
Middle
Используйте align-middle
, чтобы выровнять середину элемента с базовой линией плюс половину высоты x родительского элемента.
Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
...
Bottom
Используйте align-bottom
, чтобы выровнять нижнюю часть элемента и его потомков с нижней частью всей строки.
Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
...
Верх текста
Используйте align-text-top
, чтобы выровнять верх элемента по верхнему краю шрифта родительского элемента.
Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
...
Text Bottom
Используйте align-text-bottom
, чтобы выровнять нижнюю часть элемента с нижней частью шрифта родительского элемента.
Быстрая, коричневая лиса, перепрыгнула через ленивого пса.
...
Отзывчивый
Чтобы управлять вертикальным выравниванием только в определенной точке останова, добавьте префикс {screen}:
к любой существующей утилите вертикального выравнивания.Например, добавление класса md: align-top
к элементу приведет к применению утилиты align-top
при средних размерах экрана и выше.
...
Lorem ipsum dolor sit amet, conctetur adipisicing elit.
Дополнительную информацию о функциях адаптивного дизайна Tailwind можно найти в документации по адаптивному дизайну.
Настройка
Варианты
По умолчанию для утилит вертикального выравнивания генерируются только адаптивные варианты.
Вы можете контролировать, какие варианты будут созданы для утилит вертикального выравнивания, изменив свойство verticalAlign
в разделе вариантов
файла tailwind.config.js
.
Например, эта конфигурация также будет генерировать варианты наведения и фокусировки:
module.exports = {
варианты: {
продлевать: {
+ verticalAlign: ['зависать', 'фокус'],
}
}
}
Если вы не планируете использовать утилиты вертикального выравнивания в своем проекте, вы можете полностью отключить их, установив для свойства verticalAlign
значение false
в разделе corePlugins
вашего файла конфигурации:
модуль.export = {
corePlugins: {
+ verticalAlign: ложь,
}
}
с выравниванием по вертикали · Документы WebPlatform
Резюме
Свойство vertical-align управляет вертикальным выравниванием встроенных элементов или текста по сравнению с базовой линией. Если это свойство используется в ячейках таблицы, оно контролирует вертикальное выравнивание содержимого ячейки таблицы.
Обзорная таблица
- Начальное значение
-
базовый
- Относится к
- элементов встроенного уровня и «таблица-ячейка»
- Унаследовано
- Нет
- СМИ
- визуал
Расчетное значение
:
- Анимационный
- Нет
Свойство объектной модели CSS
:
- В процентах
- относится к «высоте строки» самого элемента.
Синтаксис
-
выравнивание по вертикали: <длина>
-
вертикальное выравнивание: <процент>
-
vertical-align: baseline
-
вертикальное выравнивание: снизу
-
вертикальное выравнивание: среднее
-
вертикальное выравнивание: переходник
-
вертикальное выравнивание: super
-
vertical-align: text-bottom
-
vertical-align: text-top
-
вертикальное выравнивание: сверху
Значения
- базовый
- По умолчанию.Вертикально выравнивает содержимое по базовой линии его родительского элемента.
- средний
- Вертикально выравнивает содержимое по середине его родительского элемента.
- переходник
- Вертикальное выравнивание содержимого по нижнему индексу.
- супер
- Выравнивает содержимое по верхнему индексу по вертикали.
- текст вверху
- Выравнивает содержимое по вертикали по верхнему краю родительского элемента.
- текст снизу
- Вертикально выравнивает содержимое по нижнему краю родительского элемента.
- <процент>
- Повышает или понижает содержание в процентах от высоты строки. Если установлено положительное число, содержимое увеличивается по сравнению с базовой линией его родительского элемента. Если задано отрицательное число, содержимое уменьшается по сравнению с базовой линией его родительского элемента. Если установлено значение
0
, это эквивалентнобазовому уровню
. - <длина>
- Увеличивает или уменьшает содержимое на указанную длину. Если установлено положительное число, содержимое увеличивается по сравнению с базовой линией его родительского элемента.Если задано отрицательное число, содержимое уменьшается по сравнению с базовой линией его родительского элемента. Если установлено значение
0
, это эквивалентнобазовому уровню
. - верх
- Вертикальное выравнивание содержимого и его потомков по верхнему краю текстовой строки.
- низ
- Вертикальное выравнивание содержимого и его потомков по нижней части текстовой строки.
Примеры
В этом примере используется свойство vertical-align
для выравнивания текста в ячейке таблицы.
<таблица>
С выравниванием по верхнему краю
Выровнено по центру
По нижнему краю
Посмотреть живой пример
Связанные спецификации
- CSS, уровень 2 (редакция 1)
- Рекомендация