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".
{ "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. Форма создания показывает кривую в интерактивном превью.
{ "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.
{
"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 со списком пресетов и превью пружины.
{
"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.
Полный пример
{
"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 |