Текстовые стили

Источник: ds-docs/component-contracts/foundations/text-styles.md

Источник: 51 текстовый стиль файла Astra DS · привязки — tokens/styles.json. Значения сверены с оригиналом (eGpqY0OqVR8l8zhmlHdfb9): расхождений нет. Только факты. Находки — в конце.

Стиль — единственное, что компонент говорит о типографике. Контракт пишет text.style: Headline/H5, и больше ничего: размер, интерлиньяж и начертание живут у стиля и меняются вместе с ним. Компонент, записавший их у себя, при перенастройке стиля соврал бы. Правило записи — в формате контракта.

Цепочка

узел компонента  →  текстовый стиль  →  переменная typography  →  переменная библиотеки
  text.style          51 штука            смысловой слой           число живёт там

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

Все 276 привязок ведут в переменные: 272 в смысловой слой typography, 4 в примитивы typography-tokens. Библиотечных привязок и стилей без привязок нет. Что за этими слоями — в типографике.

Семейства

Title/*6SemiBold 60016–262 из 6
Headline/*6Medium 50014–241 из 6
Body/*6Regular 40010–203 из 6
Articles/*12SemiBold, Medium, Regular12–320 из 12
Special/*7от Regular до Bold8–322 из 7
Mask/*14от Regular до Bold10–2614 из 14

Три первых семейства — общий ряд заголовков и текста, разделённый по весу: Title тяжелее Headline, Headline тяжелее Body. Articles — отдельный ряд для статей, Special — одиночные случаи, Mask — ряд для маски суммы и каретки, где начертание задано осью компонента.

Title

Title/H1SemiBold 6002636026navigation-bar
Title/H2SemiBold 6002428024—
Title/H3SemiBold 6002226022—
Title/H4SemiBold 6002024020—
Title/H5SemiBold 600182200swapper-utility
Title/H6SemiBold 600162000—

Абзацный отступ задают только H1–H4, у H5 и H6 он paragraph-spacing-none.

Headline

Headline/H1Medium 500242800—
Headline/H2Medium 500222600—
Headline/H3Medium 500202400—
Headline/H4Medium 500182200—
Headline/H5Medium 500162000action, button, navigation-bar
Headline/H6Medium 500141800—

Body

Body/H1Regular 400202400—
Body/H2Regular 400182200—
Body/H3Regular 4001620020amount-mask, small-search-input
Body/H4Regular 400141800skeleton-text, small-search-input, swapper-utility
Body/H5Regular 400121600button, navigation-bar, select-city
Body/H6Regular 400101400—

Articles

Articles/Titile/H1SemiBold 60032360——
Articles/Titile/H2SemiBold 60026280——
Articles/Titile/H3SemiBold 60024280——
Articles/Titile/H4SemiBold 60022260——
Articles/Titile/H5SemiBold 60018220——
Articles/Titile/H6SemiBold 60014180——
Articles/Subtitle/S1Medium 50018240——
Articles/Subtitle/S2Medium 50016220——
Articles/Paragraph/P1Regular 40018250——
Articles/Paragraph/P2Regular 40016220——
Articles/Paragraph/P3Regular 40014200——
Articles/Paragraph/P4Regular 40012160——

Ни один стиль семейства не задаёт абзацный отступ, хотя семейство для статей.

Special

Special/stories-preview-headingMedium 50010120.20—
Special/small-card-numberBold 700880——
Special/numkeyMedium 50032320——
Special/tag/tag-smallRegular 40012160—tag
Special/tag/tag-regularRegular 40014180—tag
Special/section-heading/section-heading-large-titleMedium 500202400—
Special/section-heading/section-heading-large-descriptionRegular 4001620020—

Mask

Mask/Mask Bold/XXSmallMedium 50010120—caret-animate
Mask/Mask Bold/XSmallMedium 50012160—amount-mask, caret-animate
Mask/Mask Bold/SmallSemiBold 60014180—amount-mask, caret-animate
Mask/Mask Bold/MediumSemiBold 60016200—amount-mask, caret-animate
Mask/Mask Bold/LargeSemiBold 60020240—amount-mask, caret-animate
Mask/Mask Bold/XLargeSemiBold 60024280—amount-mask, caret-animate
Mask/Mask Bold/MaxBold 70026360—amount-mask, caret-animate
Mask/Mask Regular/XXSmallRegular 40010120—caret-animate
Mask/Mask Regular/XSmallRegular 40012160—amount-mask, caret-animate, tag
Mask/Mask Regular/SmallRegular 40014180—amount-mask, caret-animate
Mask/Mask Regular/MediumRegular 40016200—amount-mask, caret-animate
Mask/Mask Regular/LargeMedium 50020240—amount-mask, caret-animate
Mask/Mask Regular/XLargeMedium 50024280—amount-mask, caret-animate
Mask/Mask Regular/MaxSemiBold 60026360—amount-mask, caret-animate

Ряд построен парами «Bold — Regular» на семь размеров. Внутри пары различается только вес, размер и интерлиньяж у обеих половин одинаковы.

Чем пользуется база

Из 51 стиля контракты ссылаются на 22. Остальные 29 в описанных компонентах не встречаются: всё семейство Articles/*, половина Title/*, Headline/* и Body/*, и четыре одиночных Special/*. Это не значит, что стили лишние, — описано пока 27 компонентов.

Стиль попадает в контракт двумя способами: именем прямо на узле или через привязку, когда его выбирает ось. Второй способ — у маски суммы, каретки и ярлыка: там ось Size выбирает стиль из таблицы, а text.style: $bold ссылается на неё.

Находки

  • Articles/Titile/* — опечатка в имени группы, шесть стилей. В наследной коллекции те же стили названы правильно (articles/title/*) — значит, ошибка только в имени стиля.
  • Mask/Mask Bold/* — «Bold» на три разных веса: XXSmall и XSmall — Medium 500, Small–XLarge — SemiBold 600, Max — Bold 700. Имя обещает одно начертание, ряд даёт три.
  • Mask/Mask Regular/* с ростом размера перестаёт быть Regular: Large и XLarge — Medium 500, Max — SemiBold 600. Крупная «обычная» маска тяжелее мелкой «жирной».
  • Articles/Paragraph/P1 — единственный интерлиньяж 25 (line-height-4xls). Весь остальной ряд чётный с шагом 2; имя выбивается из схемы так же, как значение.
  • Special/section-heading/* привязаны к примитивам typography-tokens, а не к смысловому слою, как остальные 49. Четыре привязки из 276.
  • 30 стилей из 51 не задают абзацный отступ. Задают его 21, и из них 15 ставят ноль. Осмысленное значение — только у Title/H1–H4, Body/H3 и section-heading-large-description.
  • Компоненты дублируют стиль прямыми привязками. У Button это 278 надписей, у Caret Animate 56, у Skeleton Text одна: поверх стиля стоят те же переменные, и при перенастройке стиля надпись за ним не пойдёт. Записано в gaps этих контрактов.
  • Системная строка стилей не использует вовсе: часы в system-status-bar набраны шрифтом платформы (SF Pro Semibold 17, Roboto Medium 14) без стиля и без переменных. В контракте это style: none.

См. также: типографика, README.