W3docs

Свойство CSS vertical-align

Используйте свойство CSS vertical-align для вертикального выравнивания строчных элементов. Значения свойства и примеры.

Свойство vertical-align задаёт вертикальное выравнивание строчного, строчно-блочного или ячейки таблицы блока. К строчным элементам относятся изображения, текст, кнопки и любой элемент с display: inline или display: inline-block.

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

Где работает vertical-align

Свойство действует только в двух ситуациях:

  • Внутри строкового блока — для выравнивания строчного или строчно-блочного элемента относительно строки текста, на которой он находится. Например, выравнивание иконки <img> с окружающим текстом.
  • Внутри ячеек таблицы — для выравнивания содержимого <td>, <th> или любого элемента с display: table-cell.

В остальных контекстах свойство молча игнорируется.

Что оно НЕ делает

Это главный источник путаницы: vertical-align не центрирует блочные элементы. Установка vertical-align: middle для <div> ничего не даст. Для центрирования обычного блока используйте Flexbox (align-items: center), Grid или margin: 0 auto (только горизонтально). Ключевое слово middle, несмотря на своё название, центрирует строчный блок только относительно окружающего текста, но не блок внутри родителя.

Начальное значениеbaseline
Применяется кСтрочным элементам и ячейкам таблицы, а также к ::first-letter и ::first-line.
НаследуетсяНет.
АнимируетсяНет.
ВерсияCSS1
DOM Syntaxobject.style.verticalAlign = "middle";

Как работает vertical-align

Чтобы эффективно использовать свойство, нужно понимать базовую модель.

Каждая строка текста располагается внутри невидимого строкового блока (line box). Внутри этого блока есть две опорные линии:

  • Базовая линия (baseline) — линия, на которой стоят нижние части большинства букв (буквы «g» и «y» опускаются ниже неё).
  • Область контента (content area) — полный em-блок шрифта, приблизительно от верхушки самого высокого глифа до нижней части самого низкого выносного элемента.

Большинство значений vertical-align смещают блок относительно одной из этих линий (baseline, text-top, text-bottom, middle), тогда как top и bottom выравнивают по краям всего строкового блока.

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

Синтаксис

Синтаксис свойства CSS vertical-align

vertical-align: baseline | length | sub | super | top | text-top | middle | bottom | text-bottom | initial | inherit;

Пример свойства vertical-align со значением "sub":

Пример свойства CSS vertical-align со значением sub

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      span {
        vertical-align: sub;
      }
    </style>
  </head>
  <body>
    <h2>Vertical-align property example</h2>
    <p>This is some paragraph with
      <span>vertical-align</span> property.
    </p>
  </body>
</html>

Результат

Свойство CSS vertical-align

Пример свойства vertical-align со значением "middle":

Пример свойства CSS vertical-align со значением middle

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      span {
        vertical-align: middle;
      }
    </style>
  </head>
  <body>
    <h2>Vertical-align property example</h2>
    <p>This is some paragraph with
      <span>vertical-align</span> property.
    </p>
  </body>
</html>

Пример свойства vertical-align со значением "super":

Пример свойства CSS vertical-align со значением super

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      span {
        vertical-align: super;
      }
    </style>
  </head>
  <body>
    <h2>Vertical-align property example</h2>
    <p>This is some paragraph with
      <span>vertical-align</span> property.
    </p>
  </body>
</html>

Пример свойства vertical-align со значениями "top" и "bottom":

Пример свойства CSS vertical-align со значениями top и bottom

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      table {
        width: 100%;
        border-collapse: collapse;
      }
      table,
      th,
      td {
        border: 1px solid #cccccc;
      }
      td {
        height: 100px;
      }
      .top {
        vertical-align: top;
      }
      .bottom {
        vertical-align: bottom;
      }
    </style>
  </head>
  <body>
    <h2>Vertical-align property example</h2>
    <table>
      <tr>
        <th>Bottom</th>
        <th>Middle</th>
        <th>Top</th>
      </tr>
      <tr>
        <td class="bottom">Some text</td>
        <td>Some text</td>
        <td class="top">Some text</td>
      </tr>
    </table>
  </body>
</html>

Пример с числовым значением (выравнивание иконки по тексту)

Числовое значение сдвигает блок вверх (положительное) или вниз (отрицательное) относительно базовой линии. Это самый удобный способ выровнять строчное изображение или иконку с рядом стоящим текстом:

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .label {
        font-size: 20px;
      }
      .icon {
        width: 18px;
        height: 18px;
        vertical-align: -3px; /* drop it 3px to sit on the text */
      }
    </style>
  </head>
  <body>
    <p class="label">
      <img class="icon" src="https://api.w3docs.com/uploads/media/default/0001/03/4624f58ca574eae0a734eb0d43fd87bc2326a306.png" alt="icon">
      Aligned with the text baseline
    </p>
  </body>
</html>

Типичные ошибки

  • «Загадочный зазор» под изображением. Отдельный тег <img> внутри блока часто имеет несколько пикселей пространства снизу. Это происходит потому, что как строчный элемент изображение стоит на базовой линии текста, оставляя место для выносных элементов. Исправьте это с помощью vertical-align: bottom (или middle/top), либо сделайте изображение display: block.
  • middle — не истинное центрирование. vertical-align: middle выравнивает блок по базовой линии плюс половину x-height родителя — визуально близко к центру для небольших иконок, но не точно, и не работает для блочных элементов.
  • Свойство не наследуется. Каждый блок должен объявлять собственное значение vertical-align; установка его у родителя не влияет на дочерние элементы.
  • top/bottom зависят от самого высокого элемента. Они выравниваются по строковому блоку, поэтому один высокий элемент в строке может изменить позицию всего остального.
  • Отрицательные числовые значения разрешены и зачастую более предсказуемы, чем ключевые слова, для точного попиксельного выравнивания иконок.

Значения

ЗначениеОписаниеПопробуйте
baselineВыравнивает базовую линию элемента по базовой линии родителя. Значение по умолчанию.Попробуйте »
lengthСмещает базовую линию блока вверх (положительное значение) или вниз (отрицательное значение) относительно базовой линии родителя.Попробуйте »
subОпускает базовую линию блока до положения, подходящего для подстрочных символов родительского блока.Попробуйте »
superПоднимает базовую линию блока до положения, подходящего для надстрочных символов родительского блока.Попробуйте »
topВыравнивает верхний край выровненного поддерева по верхнему краю строкового блока.Попробуйте »
text-topВыравнивает верхний край блока по верхнему краю области контента родителя.Попробуйте »
middleВыравнивает вертикальную середину блока по базовой линии родительского блока плюс половина x-height родителя.Попробуйте »
bottomВыравнивает нижний край выровненного поддерева по нижнему краю строкового блока.Попробуйте »
text-bottomВыравнивает нижний край блока по нижнему краю области контента родителя.Попробуйте »
initialУстанавливает свойству значение по умолчанию.Попробуйте »
inheritНаследует значение свойства от родительского элемента.

Практика

Практика
Что делает свойство CSS 'vertical-align'?
Что делает свойство CSS 'vertical-align'?

Связанные свойства

  • text-align — горизонтальное выравнивание строчного содержимого.
  • line-height — задаёт высоту строкового блока, по которой выравниваются top/bottom.
  • display — переключение между inline, inline-block, block и table-cell.
Was this page helpful?