Typography
Типы токенов группы Typography: составной typography и отдельные токены шрифта, размеров, интервалов и оформления текста. Что становится текстовым стилем, что переменной, как записывать значения.
typography — составной токен, который экспортируется в текстовый стиль Figma. Остальные типы группы — его части: одни становятся переменными, другие применяются к текстовым слоям напрямую.
$type | Экспортируется как | Scope по умолчанию |
|---|---|---|
typography | Текстовый стиль | — |
fontFamily | Переменная String | Font family |
fontWeight | Переменная String | Font style, другие scopes недопустимы |
fontSize | Переменная Number | Font size |
lineHeight | Переменная Number | Line height |
letterSpacing | Переменная Number | Letter spacing |
paragraphSpacing | Переменная Number | Paragraph spacing |
paragraphIndent | Переменная Number | Paragraph indent |
textCase | Внутренний | — |
textDecoration | Внутренний | — |
fontStyle | Внутренний, временно не применяется | — |
В окне Export to Figma текстовые стили включаются переключателем Styles → Typography, строковые переменные переключателем Variables → String, числовые переключателем Variables → Number.
Typography
Составной объект. Каждый ключ необязателен и может быть значением или ссылкой на токен своего типа. Ссылки превращаются в привязки переменных внутри текстового стиля.
| Ключ | Значения |
|---|---|
fontFamily | Строка или ссылка. Из списка семейств через запятую берётся первое |
fontWeight | Число или имя начертания, ссылка |
fontStyle | italic включает курсивное начертание, normal ничего не меняет. Если вес привязан к строковой переменной с прямым начертанием, курсивное начертание пишется литералом без привязки, а отчёт называет переменную, которую нужно привязать, чтобы сохранить связь |
fontSize | Число, строка с единицей или ссылка |
lineHeight | Число без единицы как множитель, строка с единицей или ссылка |
letterSpacing | Число, строка с единицей или ссылка |
paragraphSpacing, paragraphIndent | Число, строка с единицей или ссылка |
textCase | none, uppercase, lowercase, capitalize, small-caps |
textDecoration | none, underline, strikethrough |
verticalTrim | cap-height или none |
listSpacing | Расстояние между пунктами списка: число, строка с единицей или ссылка (Figma не привязывает его к переменной, ссылка подставляется значением) |
textWrapStyle | auto, balance, pretty |
hangingPunctuation, hangingList | true или false |
fontVariationSettings | Оси переменного шрифта: объект { "wght": 550, "slnt": -10 } или строка "wght" 550, "slnt" -10 (Figma Plugin API 1.138); для статического шрифта пропускается с предупреждением |
Обратите внимание на высоту строки: число без единицы, например 1.5, становится процентом в Figma, а строка с px пиксельным значением. Запись "150%" пересчитывается в пиксели через базовый размер remBase, поэтому для процентной высоты строки пишите множитель 1.5. Значения auto и normal дают автоматическую высоту.
Ключи, которых нет в объекте, при экспорте сбрасываются к значениям Figma по умолчанию, а значение, записанное числом вместо ссылки, снимает ручную привязку переменной в стиле.
{
"$type": "typography",
"$value": {
"fontFamily": "{fontFamily.sans}",
"fontWeight": "{fontWeight.medium}",
"fontSize": "{fontSize.body}",
"lineHeight": 1.5,
"letterSpacing": "0px"
}
}
Форма Create Typography показывает четыре основных поля: Font Family, Font Weight, Font Size и Line Height. Остальные добавляются кнопкой Add optional: Letter Spacing, Text Case, Text Decoration, Paragraph Spacing, Paragraph Indent и флажок Vertical Trim.
При Apply Tokens к текстовому слою плагин сначала ищет экспортированный текстовый стиль с таким именем и применяет его; если стиля нет, выставляет шрифт, размер и остальные свойства напрямую.
Font Family
Переменная String. Из списка семейств через запятую в переменную попадает первое.
{ "fontFamily": { "$type": "fontFamily", "sans": { "$value": "Inter" }, "mono": { "$value": "JetBrains Mono" } } }
Font Weight
Переменная String со scope Font style, потому что Figma хранит начертание строкой, например «Semi Bold». Значение можно записать числом, именем начертания или числом с курсивом.
| Принимается | Пример |
|---|---|
| Число | 400, 600 |
| Имя начертания | "Semi Bold", "Bold Italic" |
| Число с курсивом | "600 italic" |
| Ссылка, в том числе с курсивом | "{fontWeight.regular}", "{fontWeight.regular} italic" |
{ "fontWeight": { "$type": "fontWeight", "regular": { "$value": 400 }, "medium": { "$value": 500 }, "bold": { "$value": 700 } } }
Если у группы fontWeight в figma.scopes указано что-то кроме Font style, файл покажет ошибку валидации: исправьте scope в форме токена или в JSON.
Font Size
Переменная Number со scope Font size.
{ "fontSize": { "$type": "fontSize", "body": { "$value": "16px" }, "h1": { "$value": "32px" } } }
Line Height
Переменная Number со scope Line height. Записывайте пиксели: переменная хранит число, а проценты для отдельной переменной пересчитываются через remBase.
{ "lineHeight": { "$type": "lineHeight", "tight": { "$value": "20px" }, "normal": { "$value": "24px" } } }
Letter Spacing
Переменная Number со scope Letter spacing. Для переменной записывайте пиксели.
{ "letterSpacing": { "$type": "letterSpacing", "tight": { "$value": "-0.2px" }, "wide": { "$value": "0.5px" } } }
Paragraph Spacing и Paragraph Indent
Переменные Number со scope Paragraph spacing и Paragraph indent.
{
"paragraphSpacing": { "$type": "paragraphSpacing", "md": { "$value": "12px" } },
"paragraphIndent": { "$type": "paragraphIndent", "md": { "$value": "8px" } }
}
Text Case
Применяется к текстовому слою напрямую. Значения: none, uppercase, lowercase, capitalize, small-caps. Если шрифт не поддерживает капитель, слой остаётся без изменения регистра.
{ "textCase": { "$type": "textCase", "upper": { "$value": "uppercase" }, "title": { "$value": "capitalize" } } }
Text Decoration
Применяется к текстовому слою напрямую. Значения: none, underline, strikethrough.
{ "textDecoration": { "$type": "textDecoration", "underline": { "$value": "underline" }, "strike": { "$value": "strikethrough" } } }
Font Style
Тип поддерживается в JSON, но в текущей версии скрыт из меню создания и не применяется к слоям. Курсив задавайте ключом fontStyle внутри typography или через начертание в fontWeight, например "600 italic".
Полный пример
{
"fontFamily": { "$type": "fontFamily", "sans": { "$value": "Inter" } },
"fontWeight": { "$type": "fontWeight", "regular": { "$value": 400 }, "medium": { "$value": 500 } },
"fontSize": { "$type": "fontSize", "body": { "$value": "16px" }, "h1": { "$value": "32px" } },
"typography": {
"$type": "typography",
"body": {
"$value": { "fontFamily": "{fontFamily.sans}", "fontWeight": "{fontWeight.regular}", "fontSize": "{fontSize.body}", "lineHeight": 1.5 }
},
"h1": {
"$value": { "fontFamily": "{fontFamily.sans}", "fontWeight": "{fontWeight.medium}", "fontSize": "{fontSize.h1}", "lineHeight": "40px", "letterSpacing": "-0.5px" }
}
}
}