Menu

Размер шрифта в CSS: font-size в px, rem, em

Свойство font-size задает размер текста. Разберем, какие единицы оно принимает (px, rem, em, %, ключевые слова, vw), как изменить размер шрифта в HTML, почему rem надежный выбор по умолчанию и как размеры в em перемножаются.

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

Как задать размер шрифта в CSS

Свойство font-size задает размер текста. Задайте его любому элементу, и весь текст внутри унаследует размер, если дочерний элемент не задаст свой.

Чтобы изменить размер шрифта в HTML, все равно используется CSS. Добавьте атрибут style (<p style="font-size: 20px;">) или правило в таблицу стилей. Тегу <font size="5"> из 1990-х не место на современной странице.

Какие единицы принимает font-size

ЗначениеПримерОт чего считается
px16pxНи от чего: фиксированный размер
rem1.25remРазмер шрифта корневого элемента <html> (по умолчанию 16px)
em1.2emРазмер шрифта родителя
%120%Размер шрифта родителя, как em (120% это 1.2em)
Ключевое словоlargeГотовая шкала вокруг medium по умолчанию
Относительное ключевое словоsmaller, largerНа шаг от размера родителя
Viewport4vwШирина окна просмотра (4% от нее)
Функцияclamp(1rem, 4vw, 2rem)Плавно между минимумом и максимумом

Введите значение и посмотрите, какой размер вычислит браузер:

Попробуйте 20px, 2em, 150%, x-large, smaller и 5vw. Невалидное значение, например big, игнорируется, и текст сохраняет последний валидный размер.

rem и em: разница, которая кусается

rem всегда смотрит на корневой элемент, поэтому 1.2rem одинаков, где бы он ни стоял. em смотрит на родителя, поэтому при вложении размеры перемножаются:

Самый внутренний блок с em равен 16 × 1.2 × 1.2 × 1.2 = 27.648px. Самый внутренний блок с rem по-прежнему 19.2px. Такое перемножение полезно для компонента, части которого должны масштабироваться вместе, а во всех остальных случаях становится сюрпризом. Все единицы длины сравниваются на странице про единицы.

Ключевые слова: от xx-small до xx-large

Абсолютные ключевые слова соответствуют фиксированной шкале вокруг medium, который равен размеру пользователя по умолчанию (16px, если его не меняли):

При стандартных 16px small это 13px, large 18px, x-large 24px, а xx-large 32px. Ключевые слова годятся для быстрой работы, но дизайн-системе обычно нужна своя шкала в rem.

Адаптивный размер шрифта через clamp()

Заголовок, который должен расти вместе с экраном, но не становиться слишком маленьким или слишком большим, это один вызов clamp(): минимум, предпочтительный размер, который масштабируется, и максимум.

В превью шириной 800px 5vw равно 40px, это между 24px и 48px, поэтому побеждает оно. Адаптивная типографика подробно разобрана на странице про clamp.

Базовый размер для всей страницы

Задайте размер один раз на body (или html) и остальные размеры задавайте относительно него:

html { font-size: 100%; }  /* respects the user's setting, usually 16px */
body { font-size: 1rem; }
h1   { font-size: 2.25rem; }
small, .caption { font-size: 0.875rem; }

Избегайте трюков вроде html { font-size: 62.5%; }, если только все размеры на странице затем не заданы в rem, и никогда не задавайте фиксированный размер в px на html: он перебивает размер шрифта, выбранный читателем в браузере, а некоторые люди без этой настройки вообще не могут читать.

Замечания о доступности

  • Основной текст от 16px и больше это хороший минимум для чтения с экрана.
  • Размеры в rem и em следуют за настройкой шрифта пользователя по умолчанию. Размеры в px следуют за масштабом страницы, но не за этой настройкой.
  • На iPhone Safari увеличивает страницу при фокусе на поле ввода с размером шрифта меньше 16px. Задайте полям форм font-size: 1rem или больше, чтобы этого избежать.

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

  • Тег <font>. Он устарел. Используйте свойство font-size.
  • Вложенные размеры в em, которые неуправляемо растут или уменьшаются. Используйте rem, если перемножение вам не нужно.
  • Фиксированный размер в px на html. Он перебивает собственную настройку шрифта читателя.
  • Забыли, что у заголовков уже есть размер. <h1> по умолчанию 2em, поэтому нужен h1 { font-size: 1em; }, если хотите размер основного текста.
  • Только единицы viewport. font-size: 3vw становится нечитаемым на телефоне и огромным на широком мониторе. Оберните его в clamp().

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

Как изменить размер шрифта в CSS?

Задайте элементу свойство font-size: p { font-size: 18px; }. Оно принимает длины (px, rem, em), проценты и ключевые слова вроде large.

Как изменить размер шрифта в HTML?

Через CSS, в таблице стилей или в атрибуте style: <p style="font-size: 20px;">. Старый тег <font size="5"> в HTML5 устарел, использовать его не стоит.

Какой размер шрифта в браузерах по умолчанию?

16px для основного текста, если пользователь не изменил его в настройках браузера. Именно этому значению по умолчанию равны 1rem и ключевое слово medium.

Что использовать для размера шрифта: px, em или rem?

Для большей части текста rem: он масштабируется вместе с настройкой шрифта в браузере пользователя и не перемножается. em, когда размер должен следовать за родителем, например у иконки внутри кнопки. px не следует за размером шрифта, который читатель задал в браузере, поэтому для основного текста его лучше избегать.

Почему размер шрифта в em все время растет?

Потому что em считается от размера шрифта родителя, и у вложенных элементов значения перемножаются: 1.2em внутри 1.2em дает 1.44 от базового. Перейдите на rem, который всегда считается от корневого элемента.

Coddy programming languages illustration

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

НАЧАТЬ