Menu

Жирный шрифт в CSS: font-weight от 100 до 900

Свойство font-weight делает текст жирным, тонким или чем-то между. Разберем числовую шкалу от 100 до 900, normal и bold, относительные bolder и lighter и почему иногда насыщенность шрифта ничего не меняет.

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

Как сделать текст жирным в CSS

font-weight задает толщину букв. bold (то же, что 700) делает текст жирным, а normal (то же, что 400) обычным.

Заголовки, <th>, <b> и <strong> жирные по умолчанию из-за встроенной таблицы стилей браузера, поэтому жирность убирают через font-weight: normal. Когда использовать <b> или <strong> в самом HTML, рассказано на странице жирный текст в HTML.

Числовая шкала: от 100 до 900

У чисел есть стандартные названия, которым следуют семейства шрифтов:

ЗначениеОбщепринятое название
100Thin (тонкий)
200Extra Light
300Light (светлый)
400Normal (Regular, обычный)
500Medium (средний)
600Semi Bold (полужирный)
700Bold (жирный)
800Extra Bold
900Black (Heavy)

Допустимо любое число от 1 до 1000, поэтому 450 и 650 тоже разрешены. Увидите ли вы разницу, зависит от шрифта: браузер может нарисовать только те начертания, которые в шрифте есть.

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

Почему насыщенность ничего не меняет

Шрифт это набор файлов, часто по одному на начертание. Когда точной насыщенности нет, браузер берет ближайшую из имеющихся:

  • Для 500 он пробует 500, затем более светлые, затем более жирные.
  • Для 600 и выше он сначала пробует более жирные, затем более светлые.
  • Если жирного файла нет вовсе, большинство браузеров подделывают его, утолщая обычные буквы (синтетический жирный).

Сравните шрифт с множеством начертаний и serif, у которого в большинстве систем есть только обычное и жирное:

В столбце serif 300 и 500 обычно откатываются к обычному начертанию, а 600 к жирному. Это ответ на большинство вопросов «font-weight не работает»: CSS в порядке, в шрифте нет нужного начертания. Вариативный шрифт (один файл с осью насыщенности) плавно рисует любое значение в своем диапазоне.

bolder и lighter

bolder и lighter считаются относительно насыщенности, которую элемент наследует. Они переходят к следующей группе насыщенности, а не прибавляют фиксированную величину:

Насыщенность родителяbolder даетlighter дает
от 100 до 349400100
от 350 до 549700100
от 550 до 749900400
от 750 до 900900700

Прием из практики: шкала насыщенности в переменных

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

:root {
  --weight-regular: 400;
  --weight-medium: 500;
  --weight-bold: 700;
}
body   { font-weight: var(--weight-regular); }
button { font-weight: var(--weight-medium); }
h1, h2 { font-weight: var(--weight-bold); }

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

  • Ожидание, что каждое число будет выглядеть по-разному. Различаются только начертания, которые есть в шрифте.
  • <b> для подписи кнопки. Оформляйте кнопку через font-weight; <b> и <strong> оставьте для текста.
  • Число в кавычках. font-weight: "700" невалидно и игнорируется. Пишите font-weight: 700.
  • Жирный для выделения везде. Когда жирное все, ничего не выделяется. Оставьте основной текст в 400.
  • Тонкие начертания для мелкого текста. От 100 до 300 в мелком размере трудно читать, особенно на фоне с низкой контрастностью.

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

Как сделать текст жирным в CSS?

Задайте элементу font-weight: bold; или равнозначное число font-weight: 700;. Чтобы убрать жирность у заголовка или <strong>, задайте font-weight: normal; (400).

Какие значения у font-weight?

Числа от 1 до 1000, обычно записываемые сотнями: 100 thin, 200 extra light, 300 light, 400 normal, 500 medium, 600 semibold, 700 bold, 800 extra bold, 900 black. Ключевые слова normal и bold равны 400 и 700, а bolder и lighter считаются относительно родителя.

font-weight bold и 700 это одно и то же?

Да. bold вычисляется в 700, а normal в 400, поэтому обе формы выглядят одинаково.

Почему font-weight 500 или 600 выглядит как normal или bold?

У шрифта нет такой насыщенности. Если шрифт поставляется только в 400 и 700, браузер берет ближайший доступный файл, поэтому 500 выглядит как 400, а 600 как 700. Подключите шрифт с большим числом начертаний или вариативный шрифт.

Что использовать: CSS font-weight или тег <b>?

<strong>, когда слова важны, <b> для текста, который просто оформлен иначе, и font-weight для визуального дизайна: кнопок, подписей и заголовков. Теги несут смысл, а свойство отвечает только за внешний вид.

Coddy programming languages illustration

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

НАЧАТЬ