В каких единицах измеряется размер шрифта в CSS?

В этой статье мы поговорим о том в каких единицах измеряется размер шрифта в CSS

Обзор единиц измерения

Единицы измерения можно разделить на две категории: абсолютные и относительные.

Абсолютные единицы являются фиксированными и относятся к каким-либо физическим единицам измерения. После того, как они были заданы, размер не меняется.

Относительные единицы не имеют фактического значения. Их размер определяется относительно родительского элемента. Это означает, что размер шрифта можно изменить в HTML путем изменения размеров связанного элемента.

Вот краткий обзор некоторых единиц измерения:

Обзор единиц измерения

Я подробнее рассмотрю те единицы измерения, которые являются наиболее значимыми - px, pt, %, em, rem и vw.

Какая между ними разница?

Разницу между этими единицами измерения трудно понять теоретически, так что лучше продемонстрировать ее на конкретных примерах увеличения размера шрифта HTML.

Пример 1 - Настройки по умолчанию

В HTML-документе, где вы еще не устанавливали никаких размеров шрифтов, существуют настройки по умолчанию. В большинстве браузеров размер шрифта по умолчанию для разделов html и body - 100%. Что соответствует следующему:

100% = 1em = 1rem = 16px = 12pt

Это означает, что, если вы установите размер шрифта для одного блока <р> в 100%, а для другого - 16px, на экране они будут выводиться с одним и тем же размером шрифта:

Пример 1 - Настройки по умолчанию

Пример 2 - Абсолютные и относительные единицы измерения

Разницу между абсолютными и относительными единицами измерения проще понять на примере, когда мы хотим размер шрифта в HTML задать для конкретного элемента. Если мы зададим html { font-size: 200% }, это повлияет только на блоки <р> с размером шрифта, заданным в относительных единицах:

Пример 2 - Абсолютные и относительные единицы измерения

В этом заключается преимущество использования относительных единиц измерения. Таким способом можно создавать адаптивный сайт, просто с помощью изменения размера шрифта элемента html:

Пример 3 - rem и em (и %)

Единицы измерения em (и %) работают путем вычисления текущего размера шрифта в зависимости от размера шрифта родительского элемента.

Например:

html {  
  font-size: 100% /* =16px */
}
body {  
  font-size: 2em; /* =32px */
}
p {  
  font-size: 1em; /* =32px */
  /* font-size: 0.5em; =16px */
}

Поскольку р является дочерним элементом body, который в свою очередь является дочерним html - параграфы, font-size которых задан с помощью em и процентов, будут иметь два разных размера шрифта HTML:

Пример 3 - rem и em (и %)

При использовании Em вы должны принимать во внимание размер шрифта всех родительских элементов. В противном случае это может привести к полной неразберихе.

Решением данной проблемы является rem. Он рассчитывается только на основе размера шрифта элемента html, а не родительского элемента.

Например:

html {  
  font-size: 100% /* =16px */
}
body {  
  font-size: 2rem; /* =32px */
}
p {  
  font-size: 1rem; /* =16px */
}

Использование rem позволяет сохранить масштабируемость em без влияния иерархии элементов.

Пример 4 - Размеры шрифта на основе ширины окна просмотра

vw - это новая единица измерения CSS3, которая использует для изменения размера шрифта в HTML ширину окна просмотра. Это позволяет задавать размеры шрифтов в плавающих адаптивных макетах.

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

Мой метод

До этого исследования я использовала для установки размеров шрифта пиксели. Потому что в настоящее время большинство браузеров позволяют пользователю увеличить масштаб, если текст кажется ему слишком маленьким.

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

Поэтому мое решение заключается в использовании в html коде размера шрифта rem (и пикселей в качестве запасного варианта):

html {  
  font-size: 62.5%; /* для простоты вычислений в качестве базового размера шрифта задается 10 пикселей */
}
body {  
  font-size: 16px;
  font-size: 1.6rem;  
  /* устанавливаем размеры шрифтов по умолчанию, чтобы быть уверенными, что размера в 10 пикселей у нас нигде не будет */
}
h1 {  
  font-size: 32px;
  font-size: 3.2rem;
}

Это позволяет мне изменять размеры шрифтов с помощью следующего кода:

@media screen and (min-width: 1280px) {
  html {
    font-size: 100%;
  }
}

Этот метод использует пиксели в качестве запасного варианта, поскольку rem не поддерживается в IE8 и ниже. Из-за этого, когда я изменяю размер шрифта HTML для обеспечения масштабируемости, это не затрагивает резервный вариант. Но это не проблема, потому что возможность масштабирования для сверх больших экранов, является необязательной.