Tokens

Animation

Типы токенов группы Animation: Duration, Cubic Bezier, Easing и Transition. Какие значения принимаются, во что они превращаются в Figma и как их создать в редакторе.

Motion-токены описывают длительность и кривые анимации. duration, cubicBezier и easing экспортируются в переменные Figma типов Timing и Easing, которые Figma использует в прототипах и анимациях. transition остаётся внутренним: это составное описание перехода для генерации кода.

$typeЗначениеFigma
durationВремя: "200ms", "0.2s", числоПеременная Timing
cubicBezier[x1, y1, x2, y2] или cubic-bezier(...)Переменная Easing с своей кривой
easingПресет, cubic-bezier(...), spring(...)Переменная Easing
transitionОбъект duration, delay, easingВнутренний, в Figma не экспортируется

У переменных Timing и Easing нет scopes, поэтому в форме токена секции Scopes нет. Ссылки допустимы только внутри своего типа: Timing на Timing, Easing на Easing, при этом cubicBezier и easing взаимозаменяемы.

В окне Export to Figma за эти типы отвечают переключатели Variables → Timing и Easing, включённые по умолчанию. Apply к слоям для motion-токенов не применяется: их место в переменных Figma и в коде.

Duration

Длительность перехода или анимации.

Форма Create duration: имя, значение с подсказкой формата, описание и Code Syntax.

ПринимаетсяПример
Миллисекунды"200ms"
Секунды"0.2s"
Число, читается как миллисекунды200
Ссылка на другой duration"{duration.base}"
Формула со ссылками, в миллисекундах"{duration.base} * 2", "({duration.fast} + 50ms) * 2"
Объект DTCG{ "value": 250, "unit": "ms" }

В редакторе число без единицы дополняется ms автоматически. Отрицательные значения не принимаются. Формула считается в миллисекундах: ссылки на duration и числа читаются как ms, литералы 0.5s переводятся в миллисекунды; результат не может быть отрицательным.

Figma хранит Timing в секундах: "200ms" при экспорте становится 0.2, при импорте из Figma возвращается как "200ms".

JSON
{ "duration": { "$type": "duration", "fast": { "$value": "120ms" }, "base": { "$value": "200ms" }, "slow": { "$value": "320ms" } } }

Cubic Bezier

Кривая ускорения в виде четырёх чисел.

ПринимаетсяПример
Массив из четырёх чисел[0.4, 0, 0.2, 1]
Та же запись строкой"[0.4, 0, 0.2, 1]"
CSS-функция"cubic-bezier(0.2, 0, 0, 1)"
Ссылка"{cubicBezier.standard}"

Первое и третье числа, x1 и x2, должны быть в диапазоне от 0 до 1, как и в CSS. Форма создания показывает кривую в интерактивном превью.

JSON
{ "cubicBezier": { "$type": "cubicBezier", "standard": { "$value": [0.4, 0, 0.2, 1] }, "emphasized": { "$value": [0.2, 0, 0, 1] } } }

Easing

Переменная Figma Easing в любой из трёх форм: пресет, своя кривая или пружина.

ПринимаетсяПример
Пресет"linear", "ease-in", "ease-out", "ease-in-out", "ease-in-back", "ease-out-back", "ease-in-out-back", "gentle", "quick", "bouncy", "slow", "hold"
Своя кривая"cubic-bezier(0.4, 0, 0.2, 1)" или [0.4, 0, 0.2, 1]
Пружина Figma"spring(0.3)": один параметр bounce от 0 до 1
Физическая пружина"spring(1, 170, 26, 0)": масса, жёсткость, затухание, начальная скорость. При экспорте пересчитывается в bounce Figma; начальная скорость в Figma не передаётся
Ссылка"{easing.standard}"

Написание ease-in-and-out тоже принимается. Пресеты соответствуют встроенным кривым Figma и в CSS превращаются в эквивалентные cubic-bezier.

JSON
{
  "easing": {
    "$type": "easing",
    "standard": { "$value": "cubic-bezier(0.4, 0, 0.2, 1)" },
    "enter": { "$value": "ease-out" },
    "playful": { "$value": "spring(0.4)" }
  }
}

При импорте из Figma своя кривая возвращается токеном cubicBezier, а пресеты и пружины токеном easing.

Transition

Составное описание перехода для кода: длительность, задержка и кривая. Пишите объект или ссылку на другой transition.

КлючЗначение
durationЧисло, строка со временем или ссылка на duration
delayТо же для задержки
easingПресет, cubic-bezier(...), spring(...) или ссылка на easing

Форма создания содержит поля Delay, Duration и Curve со списком пресетов и превью пружины.

JSON
{
  "transition": {
    "$type": "transition",
    "default": { "$value": { "duration": "200ms", "delay": "0ms", "easing": "ease-in-out" } },
    "emphasized": { "$value": { "duration": "{duration.slow}", "delay": "0ms", "easing": "cubic-bezier(0.2, 0, 0, 1)" } },
    "spring": { "$value": { "duration": "260ms", "delay": "0ms", "easing": "spring(1, 170, 26, 0)" } }
  }
}

Transition-токен описывает переиспользуемый переход для кода. Взаимодействия прототипа внутри компонента, например on-hover и smart-animate, задаются в файле композиции: см. Composition.

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

JSON
{
  "duration": { "$type": "duration", "base": { "$value": "200ms" }, "slow": { "$value": "320ms" } },
  "cubicBezier": { "$type": "cubicBezier", "standard": { "$value": [0.4, 0, 0.2, 1] } },
  "easing": { "$type": "easing", "enter": { "$value": "ease-out" } },
  "transition": {
    "$type": "transition",
    "default": { "$value": { "duration": "{duration.base}", "easing": "{easing.enter}" } }
  }
}

Если что-то не работает

Что видитеПричина
Cannot parse duration при экспортеВ значении есть математика или неизвестная единица. Допустимы ms, s и число
Кривая не принимаетсяx1 или x2 вне диапазона 0..1
Пружина не принимаетсяBounce в spring(bounce) должен быть от 0 до 1
Переменные Timing и Easing не появились в FigmaПроверьте переключатели Timing и Easing в окне Export to Figma

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