VIDEMIND
UI/UX Дизайн-системыГид

Токены: как назвать цвета, отступы и размеры

Именование определяет живучесть системы. Разбираем схемы наименования, уровни абстракции и типичные ошибки, из-за которых токены становятся бесполезными.

Абстрактная графика VIDEMIND: плавные волнистые линии
VIDEMIND
Содержание · 9
  1. Имя должно пережить значение
  2. Три уровня
  3. Шкала отступов
  4. Цвет и темы
  5. Синхронизация с кодом
  6. Версии и что делать с изменением
  7. Чего токенами описывать не стоит
  8. Правила именования на практике
  9. Что в итоге

Именование определяет живучесть системы. Разбираем схемы наименования, уровни абстракции и типичные ошибки, из-за которых токены становятся бесполезными.

Имя должно пережить значение

Главное правило именования: токен называется по роли, а не по внешнему виду. «color-blue» перестанет быть верным, как только акцент станет зелёным; «color-accent» переживёт любой ребрендинг.

То же с размерами: «space-16» лучше, чем «space-medium», потому что «средний» — понятие относительное, а 16 — точное.

Три уровня

Практика сошлась на трёхуровневой схеме. Каждый следующий уровень ссылается на предыдущий, а не задаёт значение напрямую.

Цепочка токенов от базового значения к компоненту
Цепочка токенов от базового значения к компонентуVIDEMIND
УровеньПримерКто использует
Базовый (primitive)blue-600 = #1B37E0Только система
Семантическийcolor-accent = blue-600Дизайнеры, разработчики
Компонентныйbutton-bg = color-accentКомпоненты

Шкала отступов

Отступы должны браться из ограниченного набора, иначе в макетах появятся значения 13, 17 и 23 пикселя. Базовая единица 4 или 8 пикселей, шкала строится умножением.

Практичный набор: 4, 8, 12, 16, 24, 32, 48, 64, 96, 128. Десяти значений хватает почти на любой интерфейс.

  • Одна базовая единица на всю систему.
  • Не больше 10–12 значений в шкале.
  • Именование по числу, а не по «small/medium/large».
  • Отдельная шкала для внутренних отступов компонентов.
Абстрактная графика VIDEMIND: сетка клеток: часть залита цветом, в некоторых круг или диагональ
VIDEMIND

Цвет и темы

Поддержка тёмной темы решается на семантическом уровне: базовая палитра остаётся общей, а семантические токены получают разные значения в разных темах.

Именно поэтому важно не использовать базовые токены напрямую в компонентах: иначе тема не переключится.

Синхронизация с кодом

Токены имеют смысл только тогда, когда одинаково называются в макетах и в коде. Расхождение в именах убивает систему быстрее всего: дизайнер говорит «акцент», разработчик ищет «primary».

Решается общим источником: файл токенов, из которого генерируются и переменные для кода, и библиотека для редактора макетов.

Абстрактная графика VIDEMIND: схематичный макет экрана: тёмная шапка, строки-плашки и боковая колонка
VIDEMIND
Имя токена переживёт значение. «Цвет-опасности» живёт годами, «красный-500» умирает при первой смене палитры.

Версии и что делать с изменением

Токен живёт дольше макета, и рано или поздно его значение придётся менять. Разница между аккуратной системой и болезненной в том, что первая умеет объявлять изменение заранее. Работает это по правилам семантического версионирования: смена значения без смены имени — младшая версия, добавление токена — тоже, а переименование или удаление — старшая, потому что ломает то, что уже собрано.

Удалять токен сразу нельзя. Принятая практика — объявить его устаревшим: он продолжает работать, но помечен в описании и в редакторе, а рядом указан преемник. Срок жизни устаревшего токена задают явно — обычно один-два выпуска, — и до его конца проверяют, кто ещё им пользуется. Система, которая удаляет молча, приучает команды не обновляться, и через год половина продуктов сидит на старой версии.

  • Изменение значения без переименования — самый дешёвый вид правки: обновляется всё сразу.
  • Переименование обязательно сопровождается псевдонимом на переходный период.
  • У каждого устаревшего токена есть преемник и дата, после которой он исчезнет.
  • Список изменений ведётся человеческим языком: «фон карточки стал на тон светлее», а не «--c-12 → #F1F0EC».
  • Массовое переименование делается один раз и скриптом, а не по мере встречи.
Абстрактная графика VIDEMIND: плавные волнистые линии — к разделу «Версии и что делать с изменением»
VIDEMIND

Чего токенами описывать не стоит

Соблазн описать токеном всё заканчивается системой, в которой полторы тысячи имён и никто не знает, какое взять. Токен оправдан там, где значение повторяется и может измениться централизованно: цвет, отступ, радиус, тень, шрифтовая пара, длительность анимации. Всё, что встречается один раз и никогда не переиспользуется, токеном быть не должно — это просто значение в компоненте.

Второй частый перебор — токенизация композиции. Ширина конкретного блока, положение конкретной иллюстрации, отступ, подобранный на глаз ради одного экрана, в систему не входят. Признак, по которому это видно: у токена не получается имя, объясняющее смысл, — приходится называть его по месту («--hero-left-gap»), и это честный сигнал остановиться.

Правила именования на практике

Общий принцип: имя описывает назначение, а значение остаётся сменным. Если при смене темы или палитры приходится переименовывать токены, система названа неверно.

  • Плохо: «синий-600» — при смене фирменного цвета имя станет ложью.
  • Хорошо: «поверхность-акцент» — описывает роль, а не цвет.
  • Плохо: «отступ-16» — при смене шкалы придётся переименовывать всё.
  • Хорошо: «отступ-м» — ступень шкалы, а не абсолютная величина.
  • Плохо: «текст-серый» — не переживёт тёмную тему.
  • Хорошо: «текст-второстепенный» — в тёмной теме меняется значение, не имя.
Абстрактная графика VIDEMIND: условный план: помещения прямоугольниками, одно выделено цветом
VIDEMIND

Что в итоге

Токены живут долго, если названы по роли, организованы в три уровня и одинаково называются в макетах и коде.

Ограничьте шкалу отступов десятью значениями и никогда не используйте базовые токены напрямую в компонентах.

Коротко

Зачем нужны токены, если есть переменные?
Токен — это переменная с назначением, а не со значением: не «серый 700», а «цвет второстепенного текста». Благодаря этому тему можно сменить целиком, не переписывая макеты и код.
Сколько уровней токенов достаточно?
Двух: базовый набор значений и смысловой слой поверх него. Третий уровень для отдельных компонентов заводят только тогда, когда без него действительно не обойтись, — иначе система становится непроходимой.
Продолжить тему · Дизайн-системы

Состояния компонентов

Загрузка, ошибка, пустота, отключено, фокус с клавиатуры. Разбираем полный набор состояний и то, почему интерфейс разваливается именно на них.Дальше

Нашли ошибку или неточность в атрибуции? Напишите нам

Обсуждение

Загружаем…

Только имя и мысль. Ссылки, разметку, код и номера телефонов журнал не публикует — учётных записей на сайте нет, и оставлять здесь ссылку бессмысленно.

0 / 1500