vertical-align

Раз­би­ра­ем­ся с vertical-align

«Опять vertical-align не работает!» — вздохнёт веб-разработчик.

CSS-свойство vertical-align — одно из тех, которые с виду очень просты, но могут вызвать вопросы у начинающих разработчиков. Я думаю, что даже у многих ветеранов CSS когда-то были проблемы с тем, чтобы его до конца понять.

В этой статье я постараюсь в понятной форме рассказать про это свойство.

Чего оно не делает Скопировать ссылку

Распространенное заблуждение о vertical-align состоит в том, что применяясь к одному элементу, оно заставляет все элементы внутри него изменить свою вертикальную позицию. Например, когда элементу задан vertical-align: top , это подразумевает, что его содержимое поднимется к его же верхней границе.

Вспоминаются времена, когда мы делали раскладки на основе таблиц:

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

Но vertical-align работает не так.

Чем оно является на самом деле Скопировать ссылку

Использование свойства vertical-align может быть разбито на три простых для понимания правила:

  1. Оно применяется только к строчным элементам inline или строчным блокам inline-block .
  2. Оно влияет на выравнивание самого элемента, а не его содержимого (кроме случаев, когда применяется к ячейкам таблицы).
  3. Когда оно применяется к ячейке таблицы, выравнивание влияет на содержимое ячейки, а не на неё саму.
Читайте также:  Kotlin mutablelist to immutable

Иными словами, следующий код не даст никакого эффекта:

Почему? Потому что — это не строчный элемент и даже не строчный блок. Конечно, если вы сделаете его строчным или строчным блоком, то применение vertical-align даст желаемый эффект.

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

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

Несколько картинок Скопировать ссылку

Вот картинка с пояснительным текстом, которая поможет вам понять, что происходит при вертикальном выравнивании строчных элементов:

А вот пример, в котором есть несколько строчных элементов, один из которых прижат к верху.

Ключевые слова Скопировать ссылку

Несколько ключевых слов, которые можно задавать в качестве значений для свойства vertical-align :

  • baseline , значение по умолчанию или «изначальное»
  • bottom
  • middle
  • sub
  • super
  • text-bottom
  • text-top
  • top

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

Однако если вы не хотите выравнивать элемент относительно картинок или других строчных элементов, обладающих блочными свойствами, вы можете выбрать значение text-top или text-bottom , тогда элементы будут выравниваться относительно текста в строке.

О ключевом слове middle Скопировать ссылку

К сожалению, правило vertical-align: middle не выровняет строчный элемент по середине самого высокого элемента в строке (как вы, возможно, ожидали). Вместо этого значение middle заставит элемент выровняться по середине высоты гипотетической строчной буквы «x» (так же называемой x-height). Потому, мне кажется, что это значение на самом деле должно называться text-middle , чтобы стало понятно, какой будет результат.

Взгляните на пример, где я увеличил размер шрифта так, чтобы размер x-height стал гораздо больше. После этого станет понятно, что значение middle не получится использовать очень часто.

Числовые значения Скопировать ссылку

Возможно, вы не знали о том, что vertical-align принимает числовые и процентные значения. Однако это так, и вот примеры их использования:

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

Заключение Скопировать ссылку

Если в одной фразе подводить итог о том, как использовать это традиционно неправильно понимаемое свойство, я бы сказал:

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

Источник

Отменить свойство vertical-align

Есть ли способ отменить или преодолеть свойство vertical-align?

У меня есть веб-сайт с таблицей стилей, содержащей следующий CSS:

html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video

Я вставил таблицу на страницу, содержимое которой отображается странным образом из-за этого свойства стиля (это означает, что если я сниму флажок «vertical-align: baseline» в инструменте разработчика Chrome, он будет отображаться именно так, как я хочу).

Как я могу воспроизвести это на моей странице?

5 ответов

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

Если вы посмотрите на таблицу стилей по умолчанию, указанную в спецификации (http: //www.w3. org / TR / CSS21 / sample.html), вы увидите следующее:

thead, tbody, tfoot < vertical-align: middle >td, th, tr

В результате по умолчанию содержимое ячейки таблицы центрируется по вертикали в ячейке таблицы.

В вашей таблице стилей вы устанавливаете свойство vertical-align на baseline для tbody , tfoot , thead , tr , th и элементы td , которые влияют на макет вашей таблицы.

Вам нужно либо настроить правило CSS, которое сбрасывает свойство vertical-align, либо при необходимости добавить дополнительные правила для стиля таблицы.

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

Либо оставьте свойство vertical-align из исходного набора правил.

Чтобы быть более конкретным, измените свою таблицу стилей CSS следующим образом:

html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video < margin: 0; padding: 0; border: 0; vertical-align: baseline; background: transparent; >thead, tbody, tfoot < vertical-align: middle >/* add this rule*/ td, th, tr < vertical-align: inherit >/* add this rule */ 

Добавив два дополнительных правила.

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

html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary, time, mark, audio, video  

Поскольку свойство vertical-align нельзя отменить, будет ли ваш веб-сайт правильно отображаться без него? Например, изменив поля, отступы и границы? маржа: 1px 1px 1px 1px; (или что-то подобное) .

Очень описательный сайт для информации о тех: http://www.w3.org/TR/CSS21/box.html

И этот сайт для информации о базовой линии и вертикальном выравнивании: http://dev.w3.org/csswg/css-text-3/

Вы не можете отменить собственность. Согласно принципам CSS, каждый элемент имеет все свойства, определенные в CSS (хотя не все свойства влияют на отображение элемента).

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

Невозможно узнать, какие настройки CSS могут присутствовать в таблицах стилей по умолчанию браузера, таблицах стилей пользователя и других таблицах стилей страниц. Единственный способ убедиться, что все работает так, как если бы правила CSS не было, - это фактически удалить правило. Это одна из причин, почему наборы правил «сброса CSS» настолько рискованны.

Если вы были вынуждены работать в среде, где присутствует некоторый «сброс CSS», который нельзя удалить или изменить, вам может потребоваться подробно изучить, какие настройки по умолчанию они могут переопределить. Нет никакой гарантии, что это будет успешным, поскольку браузеры могут иметь все, что им нравится, в таблицах стилей по умолчанию. Но настройки, которые вероятно имеют значение, это те, которые описаны и более или менее рекомендуются в HTML5, раздел рендеринг. Он описывает следующее:

sub < vertical-align: sub; >sup < vertical-align: super; >thead, tbody, tfoot, table > tr < vertical-align: middle; >tr, td, th

. и некоторые настройки, которые определяют атрибут valign в терминах CSS, а также некоторые специальные правила для новых элементов meter и progress .

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

Я также использую шаблон wordpress с тем же «сбросом» в таблице стилей. Я не хотел просто сбрасывать сброс в моей дочерней таблице стилей - неисчислимое количество ошибок, которые могли вызвать, на основе запутанного CSS. вместо этого в моей «дочерней» таблице стилей я добавил класс и определил, что любой элемент таблицы в элементе, имеющем этот класс, будет вертикально выровнен по центру:

.masthead-table table, caption, tbody, tfoot, thead, tr, th, td

Затем на странице, где он действительно появляется, я дал элементу div, содержащему таблицу, соответствующий класс:

 
voila, my middle-v-aligned content

Источник

vertical-align

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

Синтаксис

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 Выравнивает содержимое ячейки по ее верхнему краю.

HTML5 CSS2.1 IE Cr Op Sa Fx

       
TEX и LATEX

Результат данного примера показан на рис. 1.

Применение свойства vertical-align

Рис. 1. Применение свойства vertical-align

Объектная модель

[window.]document.getElementById(" elementID ").style.verticalAlign

Браузеры

Internet Explorer до версии 7.0 включительно не поддерживает значение inherit .

Источник

Оцените статью