UI токены дизайн системы: принципы, паттерны и чек-листы

UI-токены — это атомарные переменные интерфейса (цвет, размер, интерлиньяж, радиус, тень, скорость анимации и т. п.), которые служат единственным источником правды для дизайна и кода. Токены позволяют централизованно управлять темой и брендом, держать доступность в допуске, ускорять разработку и сокращать расхождения между макетами и продуктом. Правильно построенные токены помогают масштабировать продукт, не превращая его в «лоскутное одеяло». Ниже — рабочая методика, как спроектировать токены, провести темизацию, зафиксировать доступность форм/таблиц и обложить всё перфоманс-аудитом. Сроки/стоимость разработки уточняйте по контактам на сайте.

1) Зачем нужны токены: эффекты для бизнеса и команды

  • Скорость изменений. Обновление бренда или сезонной темы делается через пару переменных, а не массовый поиск/замену по проекту.
  • Консистентность. H1, CTA, инпуты и таблицы используют одну шкалу размеров/цветов и ведут себя одинаково в любом продукте.
  • Доступность по умолчанию. Контрасты, размеры кликабельных зон, фокус-стили — задаются на уровне токенов и не «ломаются» локальными правками.
  • Перфоманс. CSS-переменные позволяют переключать темы без пересборки; уменьшение кастомных правил снижает вес стилей и риски CLS/INP.

2) Таксономия: от core до семантических токенов

В основе — core-токены (raw-значения) и семантические токены (значения «с смыслом»). Такой слой позволяет не привязываться к конкретному цвету/размеру, а работать через назначение (primary, success, error, subtle и т. п.). Сверху — alias-токены для компонентов (например, button.primary.bg).

Core-слой (примеры)

  • color.base.gray.50…900 — нейтральная палитра;
  • color.base.blue/green/red — акцентные семена;
  • font.family.sans/mono — семейства;
  • font.size.12…60, line.16…70 — шкалы типографики;
  • space.4/8/12/16/24/32 — шкала отступов;
  • radius.0/4/8/12, shadow.100/200;
  • motion.fast/normal/slow — длительности анимаций.

Семантический слой

  • color.text.primary/secondary/muted/inverse
  • color.bg.canvas/surface/subtle/elevated
  • color.border.default/focus/error/warn
  • color.intent.success/warning/danger/info
  • typography.h1/h2/h3/body/small — связка {font-size, line-height, weight}
  • focus.ring.width/color/offset, hitarea.min

3) Типографика: из токенов — в предсказуемые заголовки

Токены типографики избавляют от «магических» значений в макетах и коде. Мы фиксируем шкалу для заголовков и текста, сразу привязывая межстрочное. Для H1 на материалке — 60/70, для H2 — 28/34, для основного текста — 18/28–30. Все размеры лежат в токенах, а класс компонента лишь «ссылается» на них. Так проще держать консистентность на десятках страниц и в разных продуктах.

  • typography.h1 = {size: 60, line: 70, weight: 600}
  • typography.h2 = {size: 28, line: 34, weight: 600}
  • typography.body = {size: 18, line: 28, weight: 400}
  • typography.small = {size: 14, line: 20, weight: 400}

4) Цвет и контраст: доступность по умолчанию

Палитра проектируется от контрастных пар «текст ↔ фон» и состояний элементов (hover/active/disabled/focus). Контрастные комбинации фиксируются в семантических токенах — и переиспользуются в компонентах. Изменение оттенка в теме не ломает доступность, потому что парные значения пересчитываются вместе.

Паттерны для форм и таблиц (доступность)

  • Инпуты. Размер кликабельной области ≥ 44×44, контраст текста и плейсхолдера ≥ AA, focus-ring видим у клавиатуры и мыши.
  • Ошибки. Цвет ошибки + иконка + текст, статус в aria-live.
  • Таблицы. Чёткий порядок фокуса, гибкая высота строки, токен row.zebra для чередования фона, повышенный контраст у активных ячеек/сортировки.
  • Ховер ≠ единственный сигнал. То, что видно на ховере, должно иметь альтернативу (иконка, подпись, явная кнопка).

5) Пространство, радиусы, тени: материальность интерфейса

Отступы и сетка — это ритм. Мы задаём единую шкалу space, применяем её для вертикальных ритмов карточек, секций и форм. Радиусы и тени формируют «ощущение» продукта: миксовать разные радиусы в одном сценарии нельзя — пользователь читается по контуру компонента.

  • space: 4/8/12/16/24/32/40/60 — «живёт» в токенах и утилитах Tailwind.
  • radius: 8 как базовый, 12 — для крупных карточек/модалок.
  • shadow: 100/200 — мягкие, без «жирных» размытий, чтобы не снижать контраст.

6) Состояния и фокус: предсказуемость действий

Для каждого интерактива фиксируем набор: default, hover, active, focus-visible, disabled, loading. Фокус-кольцо — не «убирается», а приводится к бренду через токены focus.ring.color /focus.ring.width. Это и доступность, и предсказуемость.

  • Фокус видим на клавиатуре и мыши (не скрываем outline для мыши).
  • Disabled-состояния не используют только прозрачность — нужен явный цвет и курсор.
  • Loading имеет собственные токены (размер спиннера, цвет, отступы).

7) Темы, режимы, брэнд-оверлеи

Токены живут в CSS-переменных. Тема (light/dark/high-contrast) — это набор переопределений семантических токенов. Брэнд-оверлей (white-label) — слой переопределений поверх темы: логотип, акцент, иллюстрации, но без изменения размеров и ритмов. Переключение происходит на уровне класса или data-атрибута — без пересборки фронта.

8) Пайплайн «Figma → код»

Источник правды — репозиторий токенов. Figma «подписывается» на них через плагины/импорт, а не наоборот. Сборка генерирует CSS vars/TS-константы, публикует пакет, обновляет документацию и playground с примерами.

Шаги

  1. Определяем таксономию токенов, заводим репозиторий (JSON/TS).
  2. Генератор собирает CSS-переменные и экспорты для компонентов.
  3. Компоненты используют только семантические токены (не core напрямую).
  4. CI публикует пакет и прогоняет визуальные/axe-тесты.

9) Перфоманс-аудит интерфейсов: где «течёт» скорость

Токены — инструмент перфоманса: единые размеры/типографика уменьшают число кастомных правил, ускоряют отрисовку и снижают риск CLS. В аудите мы проверяем LCP/CLS/INP на шаблонах и связываем их с токенами: заголовочный шрифт предзагружается, изображения имеют резерв, интерактивы не вешают «тяжёлых» обработчиков.

  • LCP: критичный текст рендерится сразу; hero-изображение оптимизировано.
  • CLS: все медиа с фиксированными размерами/резервами; шрифты с fallback.
  • INP: debounce на вводе, мелкие обработчики, никаких блокирующих тасков.
  • CSS budget: компоненты тянут только свои стили; нет «всё-в-одном» файла.

10) Доступность форм и таблиц: чек-листы

Формы

  • Лейбл связан с полем; плейсхолдер не заменяет лейбл.
  • Хинты и ошибки рядом с полем; статус объявляется в aria-live.
  • Кнопки формы имеют понятные подписи (не «ОК», а «Отправить заявку»).
  • Hit-area ≥ 44 px; фокус-кольцо контрастное и непрерывное.

Таблицы

  • <th scope="col/row">, заголовки описательные, сортировка с aria-sort.
  • Зебра-фон и hover — семантические токены, читаемые в обеих темах.
  • Состояния «нет данных», «ошибка загрузки», «пустой фильтр» — с инструкциями.
  • Массовые действия — видимая панель с подтверждениями опасных операций.

11) Миграция на токены: план на 4–8 недель

  1. Недели 1–2: инвентаризация стилей, карта цветов/размеров, цели по перфомансу/доступности.
  2. Неделя 3: сборка core/semantic-слоёв, подключение в Figma и код.
  3. Неделя 4: миграция типографики, сетки, радиусов, фокусов.
  4. Недели 5–6: формы/таблицы на семантических токенах, axe-сканы и визуальные регрессии.
  5. Недели 7–8: темы (dark/high-contrast), документация, гайд по вкладкам/ролям.

12) Управление и версия: чтобы система жила

  • semver и миграционные гайды для изменений токенов.
  • Changelog с ссылками на PR/issue и пометками breaking.
  • Contribution-модель: кто вносит, кто ревьюит, как тестируются изменения.
  • Playground/Storybook с примерами для каждой темы и состояния.

13) Анти-паттерны токенов

  • Привязка компонентов к «сырым» цветам вместо семантики.
  • Локальные переменные внутри компонента, не согласованные с системой.
  • «Выключенный» фокус ради эстетики — убивает доступность.
  • Единый «толстый» CSS без tree-shaking и модульности.
  • Токены только в Figma, но не в коде — рассинхрон через неделю.

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

let's discuss your project

Your company is ready for big changes and we will help with that

Or write to us on
01
02
03
04
Image or document up to 15 MB
05
06