oscript-ui
oscript-ui

Типографика

Шрифт кита — типографическая шкала Material Design 3: пятнадцать стилей, по три размера в пяти ролях. Стиль задаёт гарнитуру, начертание, кегль, интерлиньяж и трекинг сразу, поэтому текст на любом экране выглядит одной системой.

Шкала#

Роли шкалы — по назначению текста:

  • display — самый крупный текст: число или фраза заставки. Сам кит его не берёт.
  • headline — заголовок страницы и окна.
  • title — заголовок раздела, карточки, колонки; имя записи.
  • body — основной текст и значения.
  • label — подписи управления: кнопка, вкладка, плашка.
Съешь же ещё этих мягких булок
--type-display-large
Съешь же ещё этих мягких булок
--type-display-medium
Съешь же ещё этих мягких булок
--type-display-small
Съешь же ещё этих мягких булок
--type-headline-large
Съешь же ещё этих мягких булок
--type-headline-medium
Съешь же ещё этих мягких булок
--type-headline-small
Съешь же ещё этих мягких булок
--type-title-large
Съешь же ещё этих мягких булок
--type-title-medium
Съешь же ещё этих мягких булок
--type-title-small
Съешь же ещё этих мягких булок
--type-body-large
Съешь же ещё этих мягких булок
--type-body-medium
Съешь же ещё этих мягких булок
--type-body-small
Съешь же ещё этих мягких булок
--type-label-large
Съешь же ещё этих мягких булок
--type-label-medium
Съешь же ещё этих мягких булок
--type-label-small
Стиль Кегль / интерлиньяж Начертание Трекинг
display-large 57 / 64 400 −0,25
display-medium 45 / 52 400 0
display-small 36 / 44 400 0
headline-large 32 / 40 400 0
headline-medium 28 / 36 400 0
headline-small 24 / 32 400 0
title-large 20 / 28 400 0
title-medium 16 / 24 500 0,15
title-small 14 / 20 500 0,1
body-large 15 / 22 400 0,5
body-medium 14 / 20 400 0,25
body-small 12 / 16 400 0,4
label-large 14 / 20 500 0,1
label-medium 12 / 16 500 0,5
label-small 11 / 16 500 0,5

Значения — в пикселях, это значения спецификации M3 с двумя поправками кита на плотность: body-large — 15 / 22 вместо 16 / 24, title-large — 20 вместо 22. Рабочему экрану со списками и формами нужно больше строк, чем витрине.

Токены#

У каждого стиля пять токенов Material: --md-sys-typescale-<стиль>-font, -weight, -size, -line-height и -tracking. Шестой — сокращение кита --type-<стиль>: вся запись font одним значением, чтобы правило не собирало её из пяти переменных.

Трекинг в запись font не входит. Ставьте его рядом отдельным letter-spacing:

.report__title {
	font: var(--type-title-medium);
	letter-spacing: var(--md-sys-typescale-title-medium-tracking);
}

Гарнитуры тоже токены. --md-ref-typeface-brand — для display, headline и title-large, --md-ref-typeface-plain — для остального. Сегодня это одна гарнитура, но место для фирменной у заголовков уже есть. Код и машинные значения идут гарнитурой --md-ref-typeface-mono.

Прежние имена --font-heading, --font-body, --font-mono, --font-size-body, --font-size-small, --font-size-h1 и --font-size-h2 остались псевдонимами этих токенов.

Шрифт Roboto#

Шрифт Material — Roboto. Кит его не везёт, как не везёт и MUI. Где Roboto установлен (Android, ChromeOS) или подключён инсталляцией, страница говорит им. Остальные видят системный гротеск: system-ui, San Francisco, Segoe UI.

Чтобы все видели Roboto, подключите его в листе своей инсталляции через @font-face и положите файлы шрифта в её статику. Шкала от этого не меняется: она описана кеглями, а не гарнитурой.

ТокеныТемы.Гарнитура()src/Классы/оформление/ТокеныТемы.os

Шрифт интерфейса. Roboto — шрифт Material; кит его не везёт, как не везёт и MUI:
где он установлен (Android, ChromeOS, подключён инсталляцией), страница говорит им,
остальные получают системный гротеск той же метрики.

Возвращаемое значение:
 Строка - значение font-family.

Где какой стиль в ките#

Компоненты уже выбрали стиль по своей роли. Своему экрану берите стиль по той же логике, а не по нужному размеру.

Где Стиль
Текст страницы, значение поля body-large
h1 — заголовок страницы headline-medium
h2 — раздел, заголовок карточки, знак в шапке title-large
h3 — подраздел, имя записи в сводке title-medium
Заголовок окна headline-small
Значение плитки показателя headline-medium
Шапка таблицы, вкладка, заголовок тоста title-small
Ячейка таблицы, лид карточки, текст тоста body-medium
Пояснение и ошибка под полем body-small
Подпись кнопки, ход в шапке label-large
Малая кнопка, плашка label-medium
Счётчик на вкладке и кнопке label-small
Большая кнопка title-medium

Заголовки страницы — h1, h2 и h3 по шкале

Отчёты

Расписание

Еженедельные

Отчёт уходит в понедельник в девять утра.

HTML = Кит.Холст( Кит.Заголовок(1, "Отчёты"), Кит.Заголовок(2, "Расписание"), Кит.Заголовок(3, "Еженедельные"), Кит.Примечание("Отчёт уходит в понедельник в девять утра.")).Рендер();

Карточка — заголовок title-large, лид body-medium, текст body-large

Хранилище

Общий объём файлов проекта

Занято 12 из 100 ГБ.

HTML = Набор.Карточка().Отрисовать(Новый Структура("Заголовок, Описание, Иконка, Тело", "Хранилище", "Общий объём файлов проекта", "пакет", "<p>Занято 12 из 100 ГБ.</p>"));

Плитка — одно число стилем headline-medium

1 204документов
HTML = Набор.Плитка().Отрисовать(Новый Структура("Значение, Подпись", "1 204", "документов"));

Гайдлайны#

Доступ

Ключи

ДелайтеУровень заголовка — по структуре: подраздел мельче раздела
Код
HTML = Кит.Холст(
	Кит.Заголовок(2, "Доступ"),
	Кит.Заголовок(3, "Ключи")).Рендер();

Доступ

Ключи

Не делайтеУровень по нужному размеру: подраздел крупнее раздела
Код
HTML = Кит.Холст(
	Кит.Заголовок(3, "Доступ"),
	Кит.Заголовок(2, "Ключи")).Рендер();

Сводка за неделю

ДелайтеРазмер текста — стилем шкалы
Код
HTML = "<p style=""margin:0;font:var(--type-title-medium);"
	+ "letter-spacing:var(--md-sys-typescale-title-medium-tracking)"">Сводка за неделю</p>";

Сводка за неделю

Не делайтеРазмер и гарнитура литералом: текст выпадает из системы
Код
HTML = "<p style=""margin:0;font:bold 19px Georgia,serif"">Сводка за неделю</p>";
ДелайтеПодпись кнопки — обычным регистром, как в Material 3
Код
HTML = Набор.Кнопка().Отрисовать(Новый Структура("Подпись, Иконка", "Сохранить", "сохранить"));
Не делайтеПодпись прописными: её труднее читать, и она кричит
Код
HTML = Набор.Кнопка().Отрисовать(Новый Структура("Подпись, Иконка", "СОХРАНИТЬ", "сохранить"));

Доступность#

  • Кегли заданы в пикселях, но масштаб страницы браузера увеличивает их вместе с остальной вёрсткой.
  • Заголовки — настоящие h1–h3: по ним скринридер строит оглавление страницы. Не пропускайте уровни и не берите заголовок ради размера.
  • Основной текст — body-large, 15 пикселей. Мельче body-small (12) текст, который человек должен прочитать, не делайте.