Типографика
Текст набран системным шрифтом каждой ОС в одной из заданных ролей, от Display до Caption. Выберите роль по тому, что это за текст, и размер, начертание и интерлиньяж придут вместе с ней.
<tk-text variant="title-md" as="h2">Billing</tk-text> <tk-text>Your plan renews on the first of each month.</tk-text> <tk-text variant="caption" color="secondary">Prices include tax.</tk-text>
Роли
<tk-text variant="display-sm">Display Small</tk-text> <tk-text variant="title-md">Title Medium</tk-text> <tk-text variant="heading-md">Heading Medium</tk-text> <tk-text variant="body-md">Body Medium</tk-text> <tk-text variant="label-md">Label Medium</tk-text> <tk-text variant="caption">Caption</tk-text> <tk-text variant="code-sm">Code Small</tk-text>
| Роль | Для чего | Не для чего |
|---|---|---|
| Display | единственный крупный заголовок лендинга или промо-экрана | всё внутри компонентов; длинные строки |
| Title | заголовки страниц и разделов, три уровня | промо-заголовок |
| Heading | подзаголовок внутри блока; Heading Medium — заголовок диалога, шторки и пустого состояния | заголовок страницы |
| Body | абзацы и описания; Body Small — для плотного содержимого: таблиц, меню, подсказок | заголовки |
| Label | текст контрола: кнопки, вкладки, подписи поля | абзацы; значение, которое вводят в поле, — это Body |
| Caption | время, метаданные, мелкий шрифт, вторая строка под подписью строки списка | основной текст |
| Code | код и технические значения, моноширинным шрифтом | обычный текст |
Body Medium (16/24) — текст по умолчанию. У большинства ролей есть размеры Large,
Medium и Small; у Heading и Code только Medium и Small, у Caption один размер. Все размеры,
интерлиньяжи и начертания — в
У Label и Body общие размеры
Label на ступень мельче Body: Label Large — 16px, как Body Medium. Две пары различаются только начертанием:
- 14/20: Body Small с весом 400, Label Medium с весом 500.
- 12/16: Caption с весом 400, Label Small с весом 500.
Вторая строка, которая поясняет строку над ней, — это Caption. Текст маленького контрола — Label Small.
- Label Medium — подпись контрола по умолчанию: кнопки среднего и большого размера, вкладки, подписи полей, пункты меню.
- Label Small — маленькие кнопки и кнопки-иконки.
- Label Large — текст контрола, который стоит в потоке чтения: заголовки аккордеона и раскрывающегося блока, действие в тосте.
Ссылки
У ссылки нет своей роли. tk-link
Как применить роль
Через tk-textvariant выбирает роль, as — HTML-элемент.
Уровень заголовка определяйте по структуре страницы, а роль — по тому, как он должен
выглядеть.
<tk-text variant="title-sm" as="h2">Payment method</tk-text> <tk-text variant="heading-sm" as="h3">Billing address</tk-text>
В своём CSS: роль — это не одна переменная. Соберите её из переменных шрифта из
.summary {
font-family: var(--font-family-sans);
font-size: var(--font-size-sm);
line-height: var(--line-height-body-sm);
font-weight: var(--font-weight-regular);
}Выделение
Выделяйте слово начертанием, а не размером и не новым цветом.
<tk-text>Your trial ends in <tk-text as="span" weight="semibold">3 days</tk-text>.</tk-text>
Начертаний четыре: 400 regular, 500 medium, 600 semibold и 700 bold. Заголовки — 600, подписи — 500, основной текст — 400.
Цвет текста
Роль задаёт форму текста, но не его цвет. Цвет берётся из токенов text/*; у tk-text его
задаёт color. Ссылки используют text/accent. Подробнее в разделе
<tk-text color="secondary">Last edited 5 minutes ago</tk-text> <tk-text color="error">Card declined</tk-text>
Шрифты
Thykes не загружает шрифтов. Каждая ОС показывает свой системный шрифт:
| ОС | Шрифт |
|---|---|
| macOS, iOS | SF |
| Windows | Segoe UI |
| Android | Roboto |
| Linux | Ubuntu или Cantarell |
Код набирается системным моноширинным шрифтом. Чтобы цифры в столбце стояли ровно, задайте
font-variant-numeric: tabular-nums.
Задайте базовый шрифт на своей странице. CSS токенов только объявляет переменные и не стилизует ваши элементы. Без этого правила обычные элементы и текст в слотах получат браузерный шрифт с засечками:
body {
font-family: var(--font-family-sans);
}Доступность
- Основной текст не мельче 14px (Body Small), по умолчанию 16px. 12px — только для Caption и Label Small.
- Держите строку абзаца в пределах 60–80 знаков.
- Оставляйте запас под интервалы. Вёрстка должна выдерживать интерлиньяж 1,5×, отступ между абзацами 2×, межбуквенный интервал 0,12× и межсловный 0,16× от размера шрифта. Не фиксируйте высоту, которая обрежет текст.
- Уровень заголовка выбирайте по структуре, а не по размеру: один
h1на страницу, уровни без пропусков. - Не передавайте иерархию и смысл одним цветом; используйте размер, начертание и положение.
- Обрезайте текст, только если остаток можно прочитать, например в подсказке или в подробном виде.
- Контраст задают цветовые токены: 4,5:1 для текста, 3:1 для крупного текста (24px или
18,66px жирным). Подробнее в разделе
Цвет .
Ограничения
- Размеры шрифта заданы в px. Текст растёт при масштабировании страницы, но не следует за размером шрифта по умолчанию в настройках браузера.
Можно / нельзя
| ✅ Можно | ❌ Нельзя |
|---|---|
| Выбирать роль по тому, что это за текст | Задавать размер шрифта вручную |
| Display только для главного заголовка экрана | Display внутри компонента |
| Выделять начертанием | Увеличивать размер ради одного слова |
| Основной текст от 14px | Основной текст в 12px |
| Выравнивать абзацы по началу строки | Выравнивать по ширине: появляются неровные пробелы |
| Писать с заглавной только первое слово | Набирать обычный текст капслоком |
tabular-nums для столбцов чисел |
Цифры в столбце разной ширины |
Связанные
Text : компонент, который применяет роль.Prose : отступы между абзацами авторского текста.Link иCode block .Цвет : цвета текста и контраст.Отступы : интерлиньяж и отступы стоят на одной сетке 4px.
18 ролей текста и переменные, из которых они собраны.
Роли
Каждая роль — набор переменных из таблиц ниже. Размеры и интерлиньяж в px.
| Роль | variant у tk-text |
Размер / интерлиньяж | Начертание | Шрифт |
|---|---|---|---|---|
| Display Large | display-lg |
64 / 72 | 600 | sans |
| Display Medium | display-md |
48 / 56 | 600 | sans |
| Display Small | display-sm |
40 / 48 | 600 | sans |
| Title Large | title-lg |
32 / 40 | 600 | sans |
| Title Medium | title-md |
28 / 32 | 600 | sans |
| Title Small | title-sm |
24 / 28 | 600 | sans |
| Heading Medium | heading-md |
20 / 24 | 600 | sans |
| Heading Small | heading-sm |
18 / 24 | 600 | sans |
| Body Large | body-lg |
18 / 28 | 400 | sans |
| Body Medium (по умолчанию) | body-md |
16 / 24 | 400 | sans |
| Body Small | body-sm |
14 / 20 | 400 | sans |
| Label Large | label-lg |
16 / 24 | 500 | sans |
| Label Medium | label-md |
14 / 20 | 500 | sans |
| Label Small | label-sm |
12 / 16 | 500 | sans |
| Caption | caption |
12 / 16 | 400 | sans |
| Code Medium | code-md |
16 / 24 | 400 | mono |
| Code Small | code-sm |
14 / 20 | 400 | mono |
| Link | нет | 16 / 24 | 400 | sans |
Label Small и Caption добавляют --letter-spacing-caption, остальные роли используют
--letter-spacing-normal. Link описывает ссылку в основном тексте; сам tk-link берёт
шрифт своей строки.
Размер шрифта
| Переменная | px |
|---|---|
--font-size-xs |
12 |
--font-size-sm |
14 |
--font-size-md |
16 |
--font-size-lg |
18 |
--font-size-xl |
20 |
--font-size-2xl |
24 |
--font-size-3xl |
28 |
--font-size-4xl |
32 |
--font-size-5xl |
40 |
--font-size-6xl |
48 |
--font-size-7xl |
64 |
Интерлиньяж
Два набора, оба на сетке 4px: body для текста, подписей и кода, heading для Display,
Title и Heading. Переменная называется --line-height-{set}-{size}: набор и ступень
шрифта, к которой она относится. Прочерк значит, что на этой ступени у набора
значения нет.
| Размер | --line-height-body-* |
--line-height-heading-* |
|---|---|---|
xs |
16 | — |
sm |
20 | — |
md |
24 | — |
lg |
28 | 24 |
xl |
28 | 24 |
2xl |
— | 28 |
3xl |
— | 32 |
4xl |
— | 40 |
5xl |
— | 48 |
6xl |
— | 56 |
7xl |
— | 72 |
Начертание
| Переменная | Значение | Где |
|---|---|---|
--font-weight-regular |
400 | Body, Caption, Code, Link |
--font-weight-medium |
500 | Label |
--font-weight-semibold |
600 | Display, Title, Heading |
--font-weight-bold |
700 | выделение |
Межбуквенный интервал
| Переменная | Значение | Где |
|---|---|---|
--letter-spacing-normal |
0em | все роли, кроме двух ниже |
--letter-spacing-caption |
0.01em | Caption, Label Small |
Семейство шрифта
| Переменная | Стек | Где |
|---|---|---|
--font-family-sans |
system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji" |
весь текст |
--font-family-mono |
ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Roboto Mono", "Ubuntu Mono", "Liberation Mono", monospace |
Code |