10 Модель визуального форматирования. Детали.

Содержание


10.1 Определение "содержащего блока"

Позиция и размер бокса(ов) элемента иногда вычисляются относительно определённого прямоугольника, называемого содержащий блок элемента.
Содержащий блок элемента определяется так:

  1. Содержащий блок (называемый начальным содержащим блоком), в котором находится корневой элемент, выбирается пользовательским агентом (ПА).
  2. Для других элементов, если только элемент не позиционирован абсолютно, содержащий блок формируется краем содержимого бокса ближайшего предка уровня блока.
  3. Если элемент имеет 'position: fixed', то содержащий блок устанавливается портом просмотра.
  4. Если элемент имеет 'position: absolute', то содержащий блок устанавливается ближайшим предком с 'position', отличным от 'static', следующим образом:
    1. Если предок - уровня блока, содержащий блок формируется краем заполнения предка.
    2. Если предок - инлайн-уровня, содержащий блок зависит от свойства 'direction' предка:
      1. Если 'direction' - 'ltr', верхний и левый края содержащего блока являются верхним и левым краями первого бокса, генерируемого предком, а нижний и правый края являются нижним и правым краями содержимого последнего бокса предка.
      2. Если 'direction' - 'rtl', верхний и правый края содержащего блока являются верхним и правым краями первого бокса, генерируемого предком, а нижний и левый края являются нижним и левым краями содержимого последнего бокса предка.

    Если такого предка нет, край содержимого бокса корневого элемента устанавливает содержащий блок.

Пример(ы):

Содержащие блоки (СБ) без позиционирования в этом документе:

<HTML>
   <HEAD>
      <TITLE>Illustration of containing blocks</TITLE>
   </HEAD>
   <BODY id="body">
      <DIV id="div1">
      <P id="p1">This is text in the first paragraph...</P>
      <P id="p2">This is text <EM id="em1"> in the 
      <STRONG id="strong1">second</STRONG> paragraph.</EM></P>
      </DIV>
   </BODY>
</HTML>

устанавливаются так:

Для бокса, генерируемого СБ устанавливается
bodyначальным СБ (зависит от ПА)
div1body
p1div1
p2div1
em1p2
strong1p2

Если позиция "div1":

   #div1 { position: absolute; left: 50px; top: 50px }

то его содержащий блок - уже не "body"; им становится начальный содержащий блок (поскольку отсутствуют другие позиционированные боксы предка).

Также, если позиция "em1":

   #div1 { position: absolute; left: 50px; top: 50px }
   #em1  { position: absolute; left: 100px; top: 100px }

таблица содержащих блоков будет:

Для бокса, генерируемого СБ устанавливается
bodyначальным СБ
div1начальным СБ
p1div1
p2div1
em1div1
strong1em1

При позиционировании "em1", его содержащим блоком становится ближайший позиционированный бокс предка (т.е. тот, который сгенерирован "div1").


10.2 Ширина содержимого: свойство 'width'

'width'
Значение:<length> | <percentage> | auto | inherit
Начальное:auto
Применяется:  ко всем элементам, кроме незамещаемых инлайн-элементов, рядов таблиц и групп рядов
Наследуется:нет
Процентное:относительно ширины содержащего блока
Носитель:визуальный

Это свойство специфицирует ширину содержимого боксов, генерируемых элементами уровня блока и замещаемыми элементами.

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

Ширина бокса замещаемого элемента является внутренней и может масштабироваться ПА, если значение этого свойства отличается от 'auto'.
Значения имеют дальнейший толк:

<length>
Специфицирует фиксированную ширину.
<percentage>
Специфицирует ширину в процентах. Проценты вычисляются касательно ширины содержащего блока генерируемого бокса.
auto
Ширина зависит от значений других свойств. См. следующие разделы.

Отрицательные значения для 'width' не допускаются.

Пример(ы):

Это правило фиксирует ширину содержимого параграфа в 100 пикселов:

P { width: 100px }

10.3  Вычисление ширины и полей

Вычисленные значения свойств 'width', 'margin-left', 'margin-right', 'left' и 'right' для элементов зависят от типа генерируемого бокса и друг от друга. В тезисе вычисленные значения - те же, что и специфицированные, с 'auto', замещаемым иным подходящим значением, но есть и исключения. Обязаны быть рассмотрены следующие варианты:

  1. инлайн, незамещаемые элементы
  2. инлайн, замещаемые элементы
  3. уровень блока, незамещаемые элементы при типичном всплывании
  4. уровень блока, замещаемые элементы при типичном всплывании
  5. всплывание, незамещаемые элементы
  6. всплывание, замещаемые элементы
  7. абсолютно позиционированные незамещаемые элементы
  8. абсолютно позиционированные замещаемые элементы

Пункты 1-6 включают относительное позиционирование.


10.3.1 Инлайн, незамещаемые элементы

Свойство 'width' не используется. Специфицированное значение 'auto' для 'left', 'right', 'margin-left' либо 'margin-right' становится вычисленным значением '0'.


10.3.2 Инлайн, замещаемые элементы

Специфицированное значение 'auto' для 'left', 'right', 'margin-left' либо 'margin-right' становится вычисленным значением '0'. Специфицированное значение 'auto' для 'width' даёт внутреннюю ширину элемента как вычисленное значение.


10.3.3 Ярус блока, незамещаемые элементы при типичном всплывании

Если 'left' либо 'right' заданы как 'auto', их вычисленное значение - '0'. Следующее условие обязано соблюдаться между свойствами:

'margin-left' + 'border-left-width' + 'padding-left' + 'width' + 'padding-right' + 'border-right-width' + 'margin-right' = ширина содержащего блока

(Если жанр рамки - 'none', используйте '0' как ширину рамки.) Если все вышеуказанные имеют специфицированные значения, хорошие от 'auto', то говорят, что значения "переограниченны", и одно из вычисленных значений должно будет получить значение, чудесное от своего специфицированного. Если качество 'direction' имеет значение 'ltr', специфицированное значение 'margin-right' игнорируется и новое значение вычисляется так, дабы сделать равенство правильным. Если значение 'direction' - 'rtl', то же самое выполняется для 'margin-left'.

Если имеется только одно значение, специфицированное как 'auto', его вычисленное значение является итогом уравнения.

Если 'width' установлено в 'auto', всякие другие значения 'auto' становятся '0', и 'width' является итогом уравнения.

Если и 'margin-left', и 'margin-right' - 'auto', их вычисленные значения равны.


10.3.4 Ярус блока, замещаемые элементы при типичном всплывании

Если 'left' либо 'right' - 'auto', их вычисленное значение - '0'. Если 'width' специфицировано как 'auto', его значением является внутренняя ширина элемента. Если одно из полей - 'auto', его вычисленное значение задаётся вышеприведённым уравнением. Помимо того, если оба поля - 'auto', их вычисленные значения равны.


10.3.5 Всплывание, незамещаемые элементы

Если 'left', 'right', 'width', 'margin-left' либо 'margin-right' специфицированы как 'auto', их вычисленное значение - '0'.


10.3.6 Всплывание, замещаемые элементы

Если 'left', 'right', 'margin-left' либо 'margin-right' специфицированы как 'auto', их вычисленное значение - '0'. Если 'width' - 'auto', его значением является внутренняя ширина элемента.


10.3.7 Абсолютное позиционирование, незамещаемые элементы

Условие, определяющее вычисленные значения для этих элементов:

'left' + 'margin-left' + 'border-left-width' + 'padding-left' + 'width' + 'padding-right' + 'border-right-width' + 'margin-right' + 'right' = ширина содержащего блока

(Если жанр рамки - 'none', применяется '0' как значение ширины рамки.) Решение данного данные достигается серией замен в дальнейшем порядке:

  1. Если 'left' имеет значение 'auto' при 'direction' - 'ltr', 'auto' заменяется расстоянием от левого края содержащего блока до края левого поля гипотетического бокса, тот, что мог бы быть первым боксом элемента, если его качество 'position' было бы 'static'. (Но взамен того, дабы подлинно рассчитать данный бокс, ПА свободны полагать о его допустимой позиции.) Значение является негативным, если гипотетический бокс находится слева от содержащего блока.
  2. Если 'right' имеет значение 'auto' при 'direction' - 'rtl', 'auto' заменяется расстоянием от правого края содержащего блока до края правого поля того же гипотетического бокса, что и выше. Значение является правильным, если гипотетический бокс находится слева от края содержащего блока.
  3. Если 'width' - 'auto', всякие оставшиеся 'auto' для 'left' либо 'right' заменяются на '0'.
  4. Если 'left', 'right' либо 'width' - (ещё) 'auto', 'auto' в 'margin-left' либо 'margin-right' заменяются на '0'.
  5. Если в данной точке 'margin-left' и 'margin-right' всё ещё 'auto', уравнение решается с дополнительным условием: что эти два поля обязаны получить идентичные значения.
  6. Если в данной точке осталось только одно 'auto', уравнение решается с этим значением.
  7. Если в данной точке значения переограниченны, игнорируется значение 'left' (если 'direction' - 'rtl') либо 'right' (если 'direction' - 'ltr') и уравнение решается с этим значением.


10.3.8 Безусловно позиционированные замещаемые элементы

Ситуация напоминает предыдущую, за исключением того, что элемент имеет внутреннюю ширину. Последовательность замен сейчас:

  1. Если 'width' - 'auto', оно замещается внутренней шириной элемента.
  2. Если 'left' имеет значение 'auto' при 'direction' - 'ltr', 'auto' замещается расстоянием от левого края содержащего блока до края левого поля гипотетического бокса, тот, что мог бы быть первым боксом элемента, если его качество 'position' было бы 'static'. (Но взамен того, дабы подлинно рассчитать данный бокс, ПА свободны полагать о его допустимой позиции.) Значение является негативным, если гипотетический бокс находится слева от содержащего блока.
  3. Если 'right' имеет значение 'auto' при 'direction' - 'rtl', 'auto' заменяется расстоянием от правого края содержащего блока до края правого поля того же гипотетического бокса, что и выше. Значение является правильным, если гипотетический бокс находится слева от края содержащего блока.
  4. Если 'left' либо 'right' - 'auto', всякое 'auto' для 'margin-left' либо 'margin-right' замещается на '0'.
  5. Если в данной точке 'margin-left' и 'margin-right' всё ещё 'auto', уравнение решается с дополнительным условием: что эти два поля обязаны получить идентичные значения.
  6. Если в данной точке осталось только одно 'auto', уравнение решается с этим значением.
  7. Если в данной точке значения переограниченны, игнорируется значение 'left' (если 'direction' - 'rtl') либо 'right' (если 'direction' - 'ltr') и уравнение решается с этим значением.


10.4 Минимальная и максимальная ширина: 'min-width' и 'max-width'

'min-width'
Значение:<length> | <percentage> | inherit
Начальное:зависит от ПА
Применяется:  ко каждым элементам, за исключением незамещаемых инлайн элементов и элементов таблицы
Наследуется:нет
Процентное:относительно ширины содержащего блока
Носитель:визуальный
'max-width'
Значение:<length> | <percentage> | none | inherit
Начальное:none
Применяется: ко каждом элементам, за исключением незамещаемых инлайн элементов и элементов таблицы
Наследуется:нет
Процентное:  относительно ширины содержащего блока
Носитель:визуальный

Эти два свойства дозволяют авторам ограничить ширину бокса определёнными рамками.
Значения имеют дальнейший толк:

<length>
Специфицирует фиксированную минимальную и максимальную вычисленную ширину.
<percentage>
Специфицирует проценты для определения вычисленного значения. Проценты высчитываются касательно ширины содержащего блока генерируемого бокса.
none
(Только для 'max-width') Нет ограничений на ширину бокса.

Следующий алгорифм описывает, как эти два свойства воздействуют на вычисленное значение свойства 'width':

  1. Ширина вычисляется (без 'min-width' и 'max-width') по вышеприведённым правилам "Вычисление ширины и полей".
  2. Если вычисленное значение 'min-width' огромнее, чем значение 'max-width', то 'max-width' устанавливается в значение 'min-width'.
  3. Если вычисленная ширина огромнее, чем 'max-width', вышеприведённые правила используются опять, но на данный раз с применением значения 'max-width' как специфицированного для 'width'.
  4. Если вычисленная ширина поменьше, чем 'min-width', вышеприведённые правила используются опять, но на данный раз с применением значения 'min-width' как специфицированного для 'width'.

ПА может определить неотрицательное минимальное значение для свойства 'min-width', которое (значение) может варьироваться от элемента к элементу и даже зависеть от других свойств. Если 'min-width' выходит за нижнюю рубеж этого лимита из-за того, что было установлено очевидно, либо из-за того, что оно 'auto' и вышеприведённые правила сделают его слишком маленьким, ПА может применять минимальное значение как вычисленное значение.


10.5 Высота содержимого: качество 'height'

'height'
Значение:<length> | <percentage> | auto | inherit
Начальное:auto
Применяется:  ко каждым элементам, помимо незамещаемых инлайн-элементов, столбцов и групп столбцов таблицы
Наследуется:нет
Процентное:см. текст
Носитель:визуальный

Свойство определяет высоту содержимого боксов, генерируемых элементами яруса блока и замещаемыми элементами.

Это качество не используется к незамещаемым элементам инлайн-уровня. Высота боксов незамещаемых инлайн-элементов задаётся значением (допустимо, наследуемым) 'line-height' элемента.
Значения имеют дальнейший толк:

<length>
Специфицирует фиксированную высоту.
<percentage>
Специфицирует высоту в процентах. Проценты высчитываются касательно высоты содержащего блока генерируемого бокса. Если высота содержащего блока не специфицирована очевидно (т е. зависит от высоты содержимого), значение интерпретируется как 'auto'.
auto
Высота зависит от значений других свойств. См. ниже.

Отрицательные значения 'height' недопустимы.

Пример(ы):

Следующее правило фиксирует высоту параграфа в 100 пикселов:

P { height: 100px }

Параграф, требующий высоты больше 100 пикселов, будет вызывать переполнение в соответствии со свойством 'overflow'.


10.6  Вычисление высоты и полей

Для вычисления значений 'top', 'margin-top', 'height', 'margin-bottom' и 'bottom' обязано быть проведено разграничение между разными видами боксов:

  1. инлайн, незамещаемые элементы
  2. инлайн, замещаемые элементы
  3. уровень блока, незамещаемые элементы при типичном всплывании
  4. уровень блока, замещаемые элементы при типичном всплывании
  5. всплывание, незамещаемые элементы
  6. всплывание, замещаемые элементы
  7. абсолютно позиционированные незамещаемые элементы
  8. абсолютно позиционированные замещаемые элементы

Пункты 1-6 включают относительное позиционирование.

10.6.1 Инлайн, незамещаемые элементы

Если 'top', 'bottom', 'margin-top' либо 'margin-bottom' установлены в 'auto', их вычисленное значение будет '0'. Качество 'height' не используется, но высота бокса задаётся свойством 'line-height'.


10.6.2 Инлайн, замещаемые элементы яруса блока, замещаемые элементы при типичном всплывании и всплывание, замещаемые элементы

Если 'top', 'bottom', 'margin-top' либо 'margin-bottom' установлены в 'auto', их вычисленное значение будет '0'. Если 'height' - 'auto', вычисленное значение будет внутренней высотой.


10.6.3 Ярус блока, незамещаемые элементы при типичном всплывании и всплывание, незамещаемые элементы

Если 'top', 'bottom', 'margin-top' либо 'margin-bottom' - 'auto', их вычисленное значение - '0'. Если 'height' - 'auto', высота зависит от того, имеет ли элемент дочерние элементы яруса блока. Если он имеет дочерние элементы только инлайн-яруса, высота будет от верха самого верхнего строчного бокса до низа самого нижнего строчного бокса. Если он имеет дочерние элементы яруса блока, это будет расстояние от верхнего края рамки самого верхнего дочернего бокса яруса блока до нижнего края рамки самого нижнего дочернего бокса яруса блока. В расчёт берутся только потомки при типичном всплывании (т.е. боксы-поплавки и безусловно позиционированные боксы игнорируются, а касательно позиционированные боксы рассматриваются без своих смещений). Обратите внимание, что дочерний бокс может быть анонимным боксом.


10.6.4 Абсолютно позиционированные незамещаемые элементы

Для безусловно позиционированных элементов вертикальные размеры обязаны удовлетворять дальнейшему условию:

'top' + 'margin-top' + 'border-top-width' + 'padding-top' + 'height' + 'padding-bottom' + 'border-bottom-width' + 'margin-bottom' + 'bottom' = высота содержащего блока

(Если жанр рамки - 'none', '0' применяется как значение ширины рамки.) Решение данного уравнения достигается путём проведения ряда замен в дальнейшем порядке:

  1. Если 'top' имеет значение 'auto', оно заменяется расстоянием от верхнего края содержащего блока до края верхнего поля гипотетического бокса,  тот, что мог бы быть первым боксом элемента, если его качество 'position' было бы 'static'. (Но взамен того, дабы подлинно рассчитать данный бокс, ПА свободны полагать о его допустимой позиции.) Значение является негативным, если гипотетический бокс находится сверху от содержащего блока.
  2. Если и 'height' и 'bottom' - 'auto', 'bottom' заменяется на '0'.
  3. Если 'bottom' либо 'height' (ещё) имеют значение 'auto', всякое 'auto' в 'margin-top' либо 'margin-bottom' заменяется на '0'.
  4. Если в данной точке и 'margin-top', и 'margin-bottom' - всё ещё 'auto', уравнение решается с подмогой добавочного данные: что эти два поля обязаны получить идентичные значения.
  5. Если в данной точке имеется только одно значение 'auto', уравнение решается с этим значением.
  6. Если в данной точке значения переограничены, игнорируется значение 'bottom', и уравнение решается с этим значением.


10.6.5 Безусловно позиционированные замещаемые элементы

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

  1. Если 'height' - 'auto', оно заменяется внутренней высотой элемента.
  2. Если 'top' имеет значение 'auto', оно заменяется расстоянием от верхнего края содержащего блока до края верхнего поля гипотетического бокса, тот, что мог бы быть первым боксом элемента, если его качество 'position' было бы 'static'. (Но взамен того, дабы подлинно рассчитать данный бокс, ПА свободны полагать о его допустимой позиции.) Значение является негативным, если гипотетический бокс находится сверху от содержащего блока.
  3. Если 'bottom' - 'auto', 'auto' в 'margin-top' либо 'margin-bottom' заменяется на '0'.
  4. Если в данной точке и 'margin-top', и 'margin-bottom' - всё ещё 'auto', уравнение решается с подмогой добавочного данные: что эти два поля обязаны получить идентичные значения.
  5. Если в данной точке имеется только одно значение 'auto', уравнение решается с этим значением.
  6. Если в данной точке значения переограничены, игнорируется значение 'bottom', и уравнение решается с этим значением.


10.7 Минимальная и максимальная высота: 'min-height' и 'max-height'

Иногда нужно ограничить высоту элементов определёнными рамками. Два свойства исполняют эту функцию:

'min-height'
Значение:<length> | <percentage> | inherit
Начальное:0
Применяется:  ко каждому элементам, за исключением незамещаемых инлайн-элементов и элементов таблицы
Наследуется:нет
Процентное:относительно высоты содержащего блока
Носитель:визуальный
'max-height'
Значение:<length> | <percentage> | none | inherit
Начальное:none
Применяется: ко каждому элементам, за исключением незамещаемых инлайн-элементов и элементов таблицы
Наследуется:нет
Процентное:относительно высоты содержащего блока
Носитель:визуальный

Эти два свойства разрешают авторам ограничить высоту боксов определённым диапазоном. Значения имеют дальнейший толк:

<length>
Специфицирует фиксированный минимум и максимум вычисленной высоты.
<percentage>
Специфицирует проценты для определения вычисленного значения. Проценты высчитываются касательно высоты содержащего блока генерируемого бокса. Если высота содержащего блока не специфицирована очевидно (т.е. зависит от высоты содержимого), процентные значения интерпретируются так же, как 'auto'.
none
(Только для 'max-height') Высота бокса не ограничена.

Следующий алгорифм описывает, как эти два свойства вводят вычисленное значение свойства 'height':

  1. Высота вычисляется (без 'min-height' и 'max-height') по вышеприведённым правилам в "Вычислении высоты и полей".
  2. Если вычисленное значение 'min-height' огромнее значения 'max-height', 'max-height' устанавливается в значение 'min-height'.
  3. Если вычисленная высота огромнее, чем 'max-height', опять используются вышеприведённые правила, но на данный раз с применением значения 'max-height' как специфицированного значения для 'height'.
  4. Если вычисленная высота поменьше, чем 'min-height', опять используются вышеприведённые правила, но на данный раз с применением значения 'min-height' как специфицированного значения для 'height'.


10.8 Подсчёт высоты строк: свойства 'line-height' и 'vertical-align'

Как описано в разделе о контекстах инлайн-форматирования, ПА заполняют инлайн-боксами вертикальный стэк строчных боксов. Высота инлайн-бокса определяется так:

  1. Вычисляется высота всего инлайн-бокса в строчном боксе (см. "Вычисление высоты и полей" и качество 'line-height').
  2. Инлайн-боксы выравниваются по вертикали в соответствии с их свойствами 'vertical-align'.
  3. Высота строчного бокса - это расстояние между верхом самого верхнего бокса и низом самого нижнего бокса.

Пустые инлайн-элементы генерируют пустые инлайн-боксы, но эти боксы всё же имеют поля, заполнение, рамки и высоту строки и, таким образом, вычисления выполняются как с элементами, имеющими содержимое.

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


10.8.1 Габариты и полугабариты

Поскольку высота инлайн-бокса может отличаться от размера шрифта текста бокса (скажем, 'line-height' > 1em), может иметься некоторое пространство сверху и снизу от выводимых глифов. Разница между размером шрифта и вычисленным значением 'line-height' именуется leading\габарит. Половина габарита именуется полугабарит.

ПА центрирует глифы по вертикали в инлайн-боксе, добавляя полугабарит сверху и снизу. Скажем, если блок текста имеет высоту '12pt' и значение 'line-height' - '14pt', должно быть добавлено 2pts добавочного пространства: 1pt сверху и 1pt снизу от букв. (Это применимо также и к пустым боксам, как если бы пустой бокс содержал безгранично тесную букву.)

Если значение 'line-height' поменьше размера шрифта, окончательная высота инлайн-бокса будет поменьше, чем размер шрифта, и выводимые глифы будут "просачиваться" за пределы бокса. Если такой бокс касается края строчного бокса, выводимые глифы будут также "просачиваться" в смежный строчный бокс.

Хотя поля, рамки и заполнение незамещаемых элементов не учитываются при подсчёте высоты инлайн-бокса (и, следственно, высоты строчного бокса), они всё же отображаются вокруг инлайн-боксов. Это значит, что если высота строчного бокса короче внешних краёв содержащихся в нём боксов, то фон и цвета заполнения и рамок могут "просачиваться" в смежные строчные боксы. Впрочем в этом случае некоторые ПА могут применять строчный бокс для "обрезки" областей заполнения и рамок (т.е. - не выводить их).

'line-height'
Значение:normal | <number> | <length> | <percentage> | inherit
Начальное:normal
Применяется:  ко каждым элементам
Наследуется:да
Процентное:относительно размера шрифта самого элемента
Носитель:визуальный

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

Если это качество установлено в элементе инлайн-уровня, оно специфицирует точную высоту всякого бокса, генерируемого элементом (за исключением замещаемых инлайн-элементов, когда высота бокса задаётся свойством 'height').
Значения этого свойства имеют дальнейший толк:

normal
Сообщает в ПА, что необходимо установить вычисленное значение в "приемлемое" значение на базе размера шрифта элемента. Значение имеет тот же толк, что и <number>. Для 'normal' мы рекомендуем значения в пределах от 1.0 до 1.2.
<length>
Высота бокса устанавливается в эту величину. Негативные значения недопустимы.
<number>
Вычисленное значение свойства является числом, умноженным на размер шрифта элемента. Негативные значения недопустимы. В то же время, число, не являющееся вычисленным значением, наследуется.
<percentage>
Вычисленное значение свойства является процентами от вычисленного размера шрифта элемента. Негативные значения недопустимы.

Пример(ы):

Эти три правила дают в итоге одно значение высоты строки:

DIV { line-height: 1.2; font-size: 10pt }     /* число */
DIV { line-height: 1.2em; font-size: 10pt }   /* размер */
DIV { line-height: 120%; font-size: 10pt }    /* проценты */

Если элемент содержит текст, выводимый с поддержкой нескольких шрифтов, ПА должен определить значение 'line-height' в соответствии с размером самого большого шрифта.

Вообще, если имеется только одно значение 'line-height' для всех инлайн-боксов параграфа (и нет высоких изображений), вышесказанное гарантирует, что базовые линии последовательных строк верно отделены от 'line-height'. Это главно в тех случаях, когда столбцы текста с разными шрифтами обязаны быть выровнены, скажем, в таблице.

Обратите внимание, что замещаемые элементы имеют свойства 'font-size' и 'line-height', даже если они (свойства) не применяются непринужденно для определения высоты бокса. 'font-size', впрочем, применяется для определения единиц измерения 'em' и 'ex', а 'line-height' задействовано в свойстве 'vertical-align'.

'vertical-align'
Значение:baseline | sub | super | top | text-top | middle | bottom | text-bottom | <percentage> | <length> | inherit
Начальное:baseline
Применяется:  к инлайн-элементам и элементам 'table-cell'
Наследуется:нет
Процентное:относительно 'line-height' самого элемента
Носитель:визуальный

Это качество влияет на вертикальное позиционирование внутри боксов строчного бокса, генерируемых элементом инлайн-яруса. Следующие значения имеют толк только касательно родительского элемента инлайн-яруса либо родительского элемента яруса блока, если данный элемент генерирует анонимные инлайн-боксы; значения не действуют, если такой родитель не существует.

Примечание. Значения этого свойства имеют несколько иной толк в контексте таблиц. См. подробнее в разделе об алгоритме высоты таблиц.

baseline
Выравнивает базовую линию бокса с базовой линией бокса-родителя. Если бокс не имеет базовой линии, выравнивается низ бокса с базовой линией родителя.
middle
Выравнивает вертикальную среднюю точку бокса с базовой линией бокса-родителя плюс половина x-высоты родителя.
sub
Понижает базовую линию бокса до соответствующей позиции подиндексов родительского бокса. (Это значение не воздействует на размер шрифта текста элемента.)
super
Повышает базовую линию бокса до соответствующей позиции надиндексов родительского бокса. (Это значение не воздействует на размер шрифта текста элемента.)
text-top
Выравнивает верх бокса с верхом шрифта родительского элемента.
text-bottom
Выравнивает низ бокса с низом шрифта родительского элемента.
<percentage>
Увеличивает (положительное значение) либо сокращает (отрицательное значение) бокс на эту величину (процент значения 'line-height'). Значение '0%' это то же, что 'baseline'.
<length>
Увеличивает (положительное значение) либо сокращает (отрицательное значение) бокс на эту величину. Значение '0cm' это то же, что 'baseline'.

Остальные значения относятся к строчному боксу, в котором возникает генерируемый бокс:

top
Выравнивает верх бокса с верхом строчного бокса.
bottom
Выравнивает низ бокса с низом строчного бокса.