- Не работает vetical-align: middle
- 3 ответа 3
- Пример:
- Вот так:
- Обзор CSS-свойства vertical-align
- Чего не делает vertical-align
- Как на самом деле работает vertical-align
- Значения свойства – ключевые слова
- О значении “middle”
- Цифровые значения свойства
- 8 комментариев
- Разбираемся с CSS свойством vertical-align
- Свойство vertical-align
- Типографские единицы измерения
- Значения
- Baseline (базовая линия)
- Super
- Text-top
- Text-bottom
- Middle
- Bottom
- Расстояние
- Проценты
Не работает vetical-align: middle
Выравниваю текст относительно картинки по центру, но всё равно текст не выравнивается идеально по центру. Почему?
3 ответа 3
Все у вас верно выровненно. Проблема в другом. Шрифты создают для себя условный «контейнер» в котором происходит отрисовка букв. Добавляется пространство как сверху, так и снизу. Это нужно для всяких точек над Ё, хвостиков Й и т.д.
У текущего вашего шрифта вверху есть дополнительные несколько пикселей в сравнении с низом + одна буква заглавная, остальные строчные + в нижней части у вас underline. В итоге создается иллюзия отсутствия выравнивания, т.к. область над шрифтом получается выше.
Вот что будете если сменить шрифт на helvetica, убрать underline и сделать все буквы заглавными.
Пример:
Как видите результат гораздо лучше и ближе к «идеальному» выравниванию.
Но как быть в вашем случае если вы не хотите менять шрифт, делать буквы заглавными, убирать подчеркивание и т.д.?
Просто сделайте верхний padding на пару пикселей меньше, чем нижний. Получится иллюзия «идеального» выравнивания.
Вот так:
Не могу говорить об эффективности в плане кроссплатформенности и кроссбраузерности такого решения, т.к. выглядит оно явно костыльным. Рекомендую поработать с шрифтом до нужного вам эффекта.
Подробнее об отрисовке шрифтов, позиционировании, line-height и прочем в контексте вашего вопроса:
Источник
Обзор CSS-свойства vertical-align
Довольно часто от веб-разработчиков можно услышать возмущенный возглас: “vertical-align не работает!”. Несмотря на то, что назначение этого свойства следует из его названия, на практике, начинающие разработчики, равно как и многие ветераны CSS, часто испытывают трудности с его применением.
В сегодняшней статье, я постараюсь раскрыть все непонятные моменты этого CSS-свойства.
Чего не делает vertical-align
Наиболее распространенное заблуждение относительно свойства vertical-align состоит в том, что оно влияет на вертикальное выравнивание всех дочерних элементов контейнера, к которому применяется. Например, если мы применим к контейнеру свойство vertical-align: top, предполагается, что все содержимое контейнера будет выровнено по верхнему краю контейнера.
Это напоминает мне старые, добрые времена табличной верстки:
В этом примере табличной ячейки, свойство valign (сейчас уже запрещенное в HTML5), действительно прижмет все содержимое ячейки к верхнему краю. Возможно исходя из этого, CSS-разработчики ожидают похожего эффекта, от применения свойства vertical-align.
Но свойство vertical-align так не работает.
Как на самом деле работает vertical-align
Свойство vertical-align можно разделить на три простых правила:
- Оно применяется только к элементам со свойствами display: inline; и display: inline-block;
- Оно влияет на положение самого элемента, а не его содержимого (за исключением табличных ячеек)
- Когда оно применяется к табличной ячейке, то влияет на содержимое ячейки, а не на саму ячейку.
Другими словами, следующий код не будет иметь никакого эффекта:
Почему? Потому что
Правильное использование свойства vertical-align, поможет выровнять строчный элемент относительно других строчных элементов на странице. Насколько высоко или низко расположится элемент по вертикали, будет зависеть от размера соседних строчных элементов, или от свойства line-height, заданного для этой строки.
На картинке ниже, представлен пример того, как ведут себя строчные элементы, когда вы применяете свойство vertical-align:
Значения свойства – ключевые слова
Свойство 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-высотой”). По-хорошему, это значение следовало бы назвать “text-middle”, для правильной идентификации его механизма.
На этой демо-странице, размер текста специально увеличен, чтобы вы могли посмотреть, как именно выравниваются элементы, при значении middle. По всему выходит, что это значение, вам будет нужно гораздо реже, чем остальные.
Цифровые значения свойства
Возможно вы не знали, но vertical-align в качестве значения может принимать абсолютные и процентные значения, все приведенные ниже примеры будут правильными:
В чем разница между абсолютными значениями и ключевыми словами, можно почитать в CSS-спецификации, или (что на мой взгляд гораздо полезнее) самостоятельно попробовать различные варианты.
Перевод статьи “Understanding CSS’s vertical-align Property”, автор Louis Lazaris
8 комментариев
можно блоку задать свойство display: table-cell
тогда содержимое блока будет выравниваться по правилам vertical-align(middle, top etc)
вот пример от w3c еще от 2001 года http://www.w3.org/Style/Examples/007/center.htm
свойство display: table-cell не поддерживается IE 6 7 и 8 версиями
Спасибо большое за открытую и подробную информацию! Отличный пост!
Полезны уроки, но возник момент — ваш сайт тормозит на i3+3gbRAM ноутбуке. Скроллинг просто выводит из себя. Всё прыгает.
Спс за статьи.
Очень полезная и доступна выложенная информация. Хорошо что Великий Гугл дал мне почитать данную статью. Благодарность автору.
Спасибо большое, очень помогло
Хорошая статья, реально понятно и доступно описано. Мне понравилась и помогла. По больше бы, таких нормальных авторов.
Источник
Разбираемся с CSS свойством vertical-align
«Vertical-align не работает!», — закричит web-разработчик.
Vertical-align является одной из тех особенностей CSS, которая звучит довольно очевидно, но может вызвать проблемы у начинающих разработчиков. Я думаю, что даже многие ветераны CSS сталкиваются с проблемами с этим свойством время от времени.
В этой статья я попытаюсь рассказать все в наиболее понятной форме.
Что оно не делает?
Наиболее неправильное представление о vertical-align это то, что если оно применено к элементу, то все элементы внутри этого элемента изменят свое вертикальное положение. Пример, когда мы используем vertical-align: top на элемент, то содержимое элемента поднимется в самый верх данного элемента.
Это напоминает мне то, как мы это делали в дни, когда повсеместно использовалась табличная верстка:
В данном табличном случае свойство valign (устаревшее) поднимет все содержимое в td-элементе наверх.
Поэтому, естественно, когда CSS разработчики начинают использовать вертикальное выравнивание, они предполагают, что оно будет работать так же — что содержание элементов выстроится в соответствии со значением свойства.
Но vertical-align так не работает!
Как на самом деле работает vertical-align?
Свойство vertical-align подчиняется трем правилам:
- Применяется только к inline или inline-block элементам
- Оно влияет на выравнивание самого элемента, а не его содержимого (исключение, когда свойство применяется к ячейкам таблицы)
- Когда применяется к ячейкам таблицы, значение влияет на содержимое, а не на саму ячейку.
Почему? Потому что
С другой стороны, при правильном использовании (на inline или inline-block блок элемента), вертикальное выравнивание выровняет целевой элемент по отношению к другим элементам.
Как высоко вверх или вниз элемент будет выравнен зависит от размеров встроенных элементов на той же линии.
Немного визуализации
Вот наглядная демонстрация вместе с пояснительным текстом, чтобы помочь вам понять, что происходит, когда вы используете вертикальное выравнивание встроенных элементов:
Как видно, 3 левых элемента наседают на нашу воображаемую линию, а правый элемент со свойством vertical-align: top прижимается к верхней воображаемой линии. Воображаемая линия варьируется в зависимости от размеров элементов.
Источник
Свойство vertical-align
Это перевод статьи Ире Адеринокун «The vertical-align property».
Свойство 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 для строчных элементов выравнивает базовую линию текущего элемента по базовой линии нижнего индекса родительского элемента.
Для табличных элементов это значение приводит к такому же результату, как и baseline .
Super
Значение super для строчных элементов выравнивает базовую линию текущего элемента по базовой линии верхнего индекса родительского элемента.
Для табличных элементов это значение приводит к такому же результату, как и baseline .
Text-top
Значение text-top для строчных элементов выравнивает верхнюю границу текущего элемента по верхней линии шрифта родительского элемента.
Для табличных элементов это значение приводит к такому же результату, как и baseline .
Text-bottom
Значение text-bottom для строчных элементов выравнивает нижнюю границу текущего элемента по нижней границе шрифта родительского элемента.
Для табличных элементов это значение приводит к такому же результату, как и baseline .
Middle
Значение middle для строчных элементов выравнивает середину текущего элемента по середине родительского элемента. Середина родительского элемента подсчитывается следующим образом: берётся высота символа x, делится пополам и добавляется к базовой линии.
Для табличных элементов это значение выравнивает содержимое текущей ячейки по центру строки с учётом внутренних отступов (padding-box).
Значение top для строчных элементов выравнивает верхнюю границу текущего элемента по верхней границе всей строки, на которой находится элемент. Это значение не обязательно связано со шрифтовыми элементами в строке.
Для табличных элементов это значение выравнивает содержимое текущей ячейки по верхнему краю строки с учётом внутреннего отступа.
Bottom
Значение bottom для строчных элементов выравнивает нижнюю границу текущего элемента по нижней границе всей строки, на которой находится элемент.
Для табличных элементов это значение выравнивает содержимое текущей ячейки по нижнему краю строки с учётом внутреннего отступа.
Расстояние
Указанное значение для строчных элементов передвигает базовую линию текущего элемента на указанное расстояние относительно базовой линии родительского элемента. На примере ниже, розовый квадрат имеет следующие стили:
Для табличных элементов это значение приводит к такому же результату, как и baseline .
Проценты
Указание значения в процентах для строчных элементов передвигает базовую линию текущего элемента относительно базовой линии родительского элемента на расстояние, равное заданному проценту от высоты строки родительского элемента. На примере ниже, розовый квадрат имеет следующие стили:
Для табличных элементов это значение приводит к такому же результату, как и baseline .
Источник