Tokens

Typography

Типы токенов группы Typography: составной typography и отдельные токены шрифта, размеров, интервалов и оформления текста. Что становится текстовым стилем, что переменной, как записывать значения.

typography — составной токен, который экспортируется в текстовый стиль Figma. Остальные типы группы — его части: одни становятся переменными, другие применяются к текстовым слоям напрямую.

$typeЭкспортируется какScope по умолчанию
typographyТекстовый стиль
fontFamilyПеременная StringFont family
fontWeightПеременная StringFont style, другие scopes недопустимы
fontSizeПеременная NumberFont size
lineHeightПеременная NumberLine height
letterSpacingПеременная NumberLetter spacing
paragraphSpacingПеременная NumberParagraph spacing
paragraphIndentПеременная NumberParagraph indent
textCaseВнутренний
textDecorationВнутренний
fontStyleВнутренний, временно не применяется

В окне Export to Figma текстовые стили включаются переключателем Styles → Typography, строковые переменные переключателем Variables → String, числовые переключателем Variables → Number.

Typography

Составной объект. Каждый ключ необязателен и может быть значением или ссылкой на токен своего типа. Ссылки превращаются в привязки переменных внутри текстового стиля.

КлючЗначения
fontFamilyСтрока или ссылка. Из списка семейств через запятую берётся первое
fontWeightЧисло или имя начертания, ссылка
fontStyleitalic включает курсивное начертание, normal ничего не меняет. Если вес привязан к строковой переменной с прямым начертанием, курсивное начертание пишется литералом без привязки, а отчёт называет переменную, которую нужно привязать, чтобы сохранить связь
fontSizeЧисло, строка с единицей или ссылка
lineHeightЧисло без единицы как множитель, строка с единицей или ссылка
letterSpacingЧисло, строка с единицей или ссылка
paragraphSpacing, paragraphIndentЧисло, строка с единицей или ссылка
textCasenone, uppercase, lowercase, capitalize, small-caps
textDecorationnone, underline, strikethrough
verticalTrimcap-height или none
listSpacingРасстояние между пунктами списка: число, строка с единицей или ссылка (Figma не привязывает его к переменной, ссылка подставляется значением)
textWrapStyleauto, balance, pretty
hangingPunctuation, hangingListtrue или 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 по умолчанию, а значение, записанное числом вместо ссылки, снимает ручную привязку переменной в стиле.

JSON
{
  "$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. Из списка семейств через запятую в переменную попадает первое.

JSON
{ "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"
JSON
{ "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.

JSON
{ "fontSize": { "$type": "fontSize", "body": { "$value": "16px" }, "h1": { "$value": "32px" } } }

Line Height

Переменная Number со scope Line height. Записывайте пиксели: переменная хранит число, а проценты для отдельной переменной пересчитываются через remBase.

JSON
{ "lineHeight": { "$type": "lineHeight", "tight": { "$value": "20px" }, "normal": { "$value": "24px" } } }

Letter Spacing

Переменная Number со scope Letter spacing. Для переменной записывайте пиксели.

JSON
{ "letterSpacing": { "$type": "letterSpacing", "tight": { "$value": "-0.2px" }, "wide": { "$value": "0.5px" } } }

Paragraph Spacing и Paragraph Indent

Переменные Number со scope Paragraph spacing и Paragraph indent.

JSON
{
  "paragraphSpacing": { "$type": "paragraphSpacing", "md": { "$value": "12px" } },
  "paragraphIndent": { "$type": "paragraphIndent", "md": { "$value": "8px" } }
}

Text Case

Применяется к текстовому слою напрямую. Значения: none, uppercase, lowercase, capitalize, small-caps. Если шрифт не поддерживает капитель, слой остаётся без изменения регистра.

JSON
{ "textCase": { "$type": "textCase", "upper": { "$value": "uppercase" }, "title": { "$value": "capitalize" } } }

Text Decoration

Применяется к текстовому слою напрямую. Значения: none, underline, strikethrough.

JSON
{ "textDecoration": { "$type": "textDecoration", "underline": { "$value": "underline" }, "strike": { "$value": "strikethrough" } } }

Font Style

Тип поддерживается в JSON, но в текущей версии скрыт из меню создания и не применяется к слоям. Курсив задавайте ключом fontStyle внутри typography или через начертание в fontWeight, например "600 italic".

Полный пример

JSON
{
  "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" }
    }
  }
}

Связанные страницы