Дизайн-токены
Что это такое
Дизайн-токен — именованное значение, общее для дизайн-инструментов и кода. Именем может быть цвет, шаг отступов, размер шрифта, радиус скругления или длительность. Вместо того чтобы писать #1F6FEB, и дизайн, и код говорят colour.action.default, а значение за именем определяется один раз.
Почему это важно
Токены позволяют системе оставаться согласованной в двух местах, которые не могут поделить один файл. Без них ребрендинг означает правку шестнадцатеричных значений в дизайн-файле и снова в таблице стилей, и за один релиз они расходятся. С ними значение меняется в одном месте, и оба следуют за ним. Токены ещё и самая маленькая полезная часть дизайн-системы — поэтому их обычно строят первыми, и они же переживают даже заброшенную библиотеку компонентов.
Ключевые идеи
Именуйте по роли, а не по значению
colour.action.default переживает ребрендинг; blue600 — нет, а colour.blue становится ложью в момент смены бренда. Называйте, для чего значение, и держите сырую шкалу отдельно под ним.
Примитив (сырое) Семантика (роль)
colour.blue.600 colour.action.default
colour.grey.100 colour.surface.raised
space.4 = 16px space.gap.control
Потребители пользуются только семантическим слоем; примитивный слой существует, чтобы семантике было на что указывать.
Два слоя, одно направление ссылки
Семантика указывает на примитивы и никогда наоборот. Тогда тема подменяет, в какие примитивы разрешается семантика, — так работают тёмная тема и вайт-лейблинг, не трогая компонент.
colour.surface.raised -> colour.grey.100 (светлая тема)
colour.surface.raised -> colour.grey.900 (тёмная тема)
Держите набор достаточно малым, чтобы запомнить
Несколько десятков токенов покрывают большинство продуктов. Набор из трёхсот превращается в выбор цвета с лишними шагами, и никто к нему не тянется.
Включайте невидимые значения
Отступы, радиус, толщину границы, тень, длительность и кривую анимации, слои z-index. Здесь расхождение труднее всего заметить и дороже всего исправить, и именно эти значения дизайнер реже всего держит согласованными вручную.
Выпускайте их как деталь реализации
Токены должны доходить до кодовой базы, а не оставаться в дизайн-инструменте. Кастомные свойства CSS — обычный путь к этому; запись о каскадных таблицах стилей описывает механизм. Однако набор токенов, который живёт только в дизайн-файле, ничего не меняет в продукте.
Практика
Напишите небольшой набор токенов
Определите примитивы для одной цветовой шкалы, четырёх шагов отступов, трёх размеров шрифта и двух радиусов, затем напишите семантический слой, который на них указывает.
Готово, когда: каждый семантический токен разрешается в примитив, и ни один компонент не называет цвет напрямую.
Оформите один экран только токенами
Переведите один экран в тёмную тему, меняя только семантический слой и не трогая ни один компонент.
Готово, когда: экран читается в новой теме, и ни один компонент не правился.
Частые ошибки
- Токены, названные по значению — имя становится неверным при первом ребрендинге; исправить: именуйте по роли и держите сырую шкалу под ней.
- Компоненты ссылаются прямо на примитивы — слой тем обходится стороной, и тёмная тема ломается; исправить: потребители используют только семантические токены.
- Сотни токенов — набор непригоден, и каждый потребитель выбирает по-своему; исправить: держите его достаточно малым, чтобы помнить.
- Пропуск отступов и анимации — невидимое расхождение продолжается; исправить: токенизируйте также отступы, радиус, длительность и слои.
- Токены, не доходящие до кода — продукт не меняется; исправить: публикуйте их как слой значений, который код действительно читает.
Что читать дальше
- Дизайн-системы (03-design-ux/32-design-systems) — прочитайте это первым; токены — слой, на котором стоит система.
- API компонента и документация (03-design-ux/32-design-systems/02-component-api-and-documentation) — компоненты потребляют токены, а не значения.
- Каскадные таблицы стилей (CSS) (02-frontend/05-css) — кастомные свойства, обычный путь токенов в браузер.
- Теория цвета (03-design-ux/29-color-theory) — выбор шкал, из которых строятся цветовые токены.