Menu

Межстрочный интервал в CSS: line-height без единиц, px, em

line-height задает высоту каждой строки текста, а значит, и расстояние между строками. Разберем, почему число без единиц лучший выбор по умолчанию, как по-разному наследуются px, em и %, и какие значения хороши для текста и заголовков.

На этой странице есть исполняемые редакторы: меняйте, запускайте и сразу видите результат.

Что делает line-height

line-height задает высоту каждой строки текста. Разница между этой высотой и высотой, которая нужна самому шрифту, делится пополам и добавляется над и под буквами, поэтому именно так управляют расстоянием между строками.

Во всех трех абзацах шрифт 16px. Строки высотой 16px, 24px и 32px.

Значения: без единиц, длина, проценты, normal

ЗначениеПримерВысота строки для текста 16pxДочерние элементы наследуют как
Число1.524pxСамо число (1.5), пересчитывается для каждого элемента
Длина24px, 1.5em, 1.5rem24pxВычисленную длину (24px)
Проценты150%24pxВычисленную длину (24px)
normalnormalИз шрифта, часто около 1.2normal

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

Почему значение без единиц лучший выбор

Межстрочный интервал 1.5em или 150% превращается в пиксели на родителе, и дочерние элементы наследуют эти пиксели. Дочерний элемент с более крупным шрифтом тогда получает строки ниже своих букв. 1.5 без единиц наследуется как само число и умножается на собственный размер шрифта каждого дочернего элемента.

Оба заголовка переносятся на две строки. Первый наследует строки по 21px для букв 32px, поэтому его строки наезжают друг на друга. Второй получает строки 32 × 1.5 = 48px. Задайте line-height один раз на body числом, и большинству страниц больше не понадобится его трогать.

Попробуйте значения сами

Попробуйте 1, 2, 30px, 200% и normal. Chrome показывает normal самим словом, а не в пикселях, потому что его размер берется из шрифта.

Хорошие значения для удобного чтения

  • Основной текст: от 1.4 до 1.6. Длинным строкам нужен больший интервал, чтобы глаз находил начало следующей строки.
  • Заголовки: от 1.1 до 1.3. Крупный текст с интервалом 1.5 выглядит как отдельные строки, а не один заголовок.
  • Кнопки и однострочные подписи: от 1 до 1.25, а высоту дает padding.

Для доступности критерий успеха WCAG 1.4.12 требует, чтобы страница продолжала работать, когда читатель задает межстрочный интервал в 1.5 размера шрифта, поэтому избегайте фиксированной высоты у текстовых блоков, которая обрежет текст.

Вертикальное центрирование одной строки текста

Когда в блоке ровно одна строка, line-height, равный высоте блока, ставит текст посередине по вертикали, потому что дополнительное пространство делится поровну сверху и снизу:

Это ломается, как только текст переносится на две строки, потому что каждая строка тогда высотой 40px. Все, что может переноситься, центрируйте через flexbox, как показано на странице выравнивание div по центру.

Сокращенное свойство font

Сокращенное свойство font задает размер и межстрочный интервал вместе через косую черту:

body {
  font: 16px/1.5 system-ui, sans-serif; /* size 16px, line-height 1.5 */
}

Сокращенная запись сбрасывает все свойства шрифта, которые в ней не упомянуты (в том числе line-height до normal, если опустить часть после черты), поэтому пишите ее до отдельных правил font-*.

Частые ошибки

  • em или % на контейнере. Дочерние элементы наследуют фиксированную длину. Используйте число без единиц.
  • Фиксированная height у текстового блока. Когда текст переносится или читатель увеличивает интервалы, он переполняется. Пусть высоту задает содержимое.
  • Слишком плотный основной текст. line-height: 1 делает абзацы трудночитаемыми. Начните с 1.5.
  • Ожидание, что line-height добавит расстояние между абзацами. Это margin у абзацев.
  • Расчет на normal. Он меняется от шрифта к шрифту, поэтому раскладка сдвигается при смене шрифта.

Часто задаваемые вопросы

Что делает line-height в CSS?

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

Нужны ли line-height единицы измерения?

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

Какой межстрочный интервал хорош для основного текста?

От 1.4 до 1.6 для абзацев и примерно от 1.1 до 1.3 для крупных заголовков. Рекомендация WCAG уровня AAA требует для абзацев не меньше 1.5.

Что такое line-height: normal?

Значение по умолчанию. Браузер берет его из метрик самого шрифта, обычно около 1.2, но у каждого шрифта свое, поэтому для разных шрифтов оно непредсказуемо.

Как изменить межстрочный интервал в HTML?

В HTML нет атрибута для межстрочного интервала. Используйте свойство CSS, например <p style="line-height: 2;"> для двойного интервала.

Coddy programming languages illustration

Учитесь программировать с Coddy

НАЧАТЬ