Почему стили в Figma — прошлый век

8d175815b2ba239a09d6e5859fb7bb7c.jpg

Привет, Хабр! Меня зовут Игорь Бутков, я старший дизайнер в компании Friflex. Мы занимаемся разработкой мобильных приложений и веб-сервисов.

Сегодня я расскажу, почему стили в Figma больше не подходят для современных дизайн-систем и как вместо них использовать токены. Всем, кто помнит, как я рассказывал об этом на CrossConf — привет!

Почему стили — все

В Figma стили представляют собой отдельные, не связанные между собой значения. Поэтому, если в крупной дизайн-системе нужно изменить основной цвет, придется вручную обновлять каждый стиль по отдельности.

Пример: замена цвета #2688EB на другой потребует правки во всех стилях, где он используется вручную. Эту проблему отлично решают дизайн-токены.

977b2e4ac16ca8660e6b18cd7e35f5d8.jpg

Что такое дизайн-токены?

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

97a8485bc245795987d4c7b47b5950fa.jpg

Главное отличие токенов от стилей в том, что токены можно связать друг с другом, чтобы обновлять сразу все связанные элементы.

45c3422248e529098a07b8fd4f258ed7.jpg

Преимущества токенов:

  • Гибкость — изменения в одном месте распространяются на всю систему.

  • Скорость — процесс редизайна упрощается, уменьшается количество рутинных задач.

  • Консистентность — обеспечивается единый стиль интерфейса без расхождений.

  • Экономия ресурсов — сокращается время работы дизайнеров и разработчиков, что снижает затраты компании.

Где находятся токены в Figma?

При открытии любого проекта справа отображаются его настройки — стили, эффекты, подключаемые плагины и остальное. В этой же панели сверху есть вкладка Local variables. При нажатии иконки напротив откроется окно значений, в котором мы и будем добавлять дизайн-токены и работать с ними.

3c4f6b9bcf9225d210b69a538d49088c.png

С чего начать?

На начальном этапе важно определить, какую семантику мы будем использовать при создании дизайн-токенов, чтобы придерживаться ее в дальнейшем. От того, насколько правильно мы подберем семантику, будут зависеть скорость и удобство нашей работы. Семантика зависит от задачи проекта, под который мы создаем токены, и от его дальнейшего масштабирования. 

Ниже рассмотрим типы семантических слоев.

0. Базовые значения (нулевой слой)

Содержит основные параметры:

  • HEX-коды цветов;

  • Размеры отступов и радиусов скруглений;

  • Шрифтовые параметры.

32df521b887b3c2b32dccd5bb5838a5b.jpg

1. Корневой слой

Определяет общие цветовые растяжки с учетом контраста. Например, он может включать оттенки, рассчитанные по формулам с учетом контрастности.

c45fc4cad916582622ea6dd778c93978.jpg

Задается палитра на основе выбранной цветовой модели.

5537e0b0f50851d262631d5679ddbe1e.jpg

Какую цветовую модель выбрать?

Две наиболее популярные цветовые модели:

HSL (Hue, Saturation, Lightness) — известна и поддерживается всеми браузерами и IDE. Но контрастность цветов зависит от оттенка, и цвета с одинаковой насыщенностью могут восприниматься по-разному.

LCH (Luminance, Chroma, Hue) — позволяет создавать цвета с одинаковой яркостью, которые успешно проходят тесты на контрастность. Это удобно для формирования цветовых градиентов и семантических палитр.

d5201f90fc9800a2904823fd7d9452de.jpg

HSL

Преимущества:

  • Поддерживается всеми браузерами и IDE.

  • Удобно управлять насыщенностью и яркостью.

Недостатки:

  • Контрастность цветов зависит от оттенка.

  • Не всегда подходит для цветовых градиентов.

LCH

Преимущества:

  • Обеспечивает равномерную контрастность.

  • Отлично подходит для генерации цветовых палитр.

Недостатки:

  • Ограниченная поддержка браузерами.

  • Требует конвертации для использования в CSS.

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

Семантический слой — абстрактные названия не самого цвета, а его роли (например, background.primary).

362c2b8d397d4248051f20d5750ea9fe.jpg

Токены получают смысловые названия, связанные с их функцией: text.primary, background.error, border.focus.

dc0cb237bca1627b4e558afed06c2b57.jpg

Плюс: компактный и понятный набор токенов.

Минус: нельзя адресно поменять цвет конкретной кнопки.

3. Компонентный слой

Компонентный слой — токены задают значения для конкретных элементов.

a261ef613ba59a52987993b5e8ebeb73.jpg

Например, button.primary.default — цвет основной кнопки, на которую навели мышь. Он берет значение из корневого слоя или из семантического слоя.

#7E5CFF > purple-500 > background.primary > button.primary.default

231c9841f753f446ee9ec7213fea0bc6.jpg

Чтобы покрыть все компоненты, таких токенов должно быть очень много. В отличие от кода, компонентный слой не так часто используется в Figma.

Плюс: точечный контроль над компонентами.

Минус: слишком много токенов в системе, можно запутаться.

Как называть дизайн-токены?

Токены и компоненты можно назвать предельно конкретно. Например, сиреневую акцентную кнопку можно назвать button.purple, текстовый стиль с шрифтом Lobster 12 кегля — text.lobster.12, а токен отступа в 8 px — spacer.8. Это удобно в моменте.

Но что, если завтра бренд решит изменить цвет кнопки на розовый? Розовая акцентная кнопка с именем button.purple будет нарушать логику — в этом проблема явного нейминга. Чтобы ее избежать, можно использовать систему абстрактного нейминга, где название токена содержит не цвет, а его роль.

4f07986ec6442dcb778ae16a8d8409d8.jpg

Явный нейминг

Плюс: все понятно без пояснений.

Минус: сложно что-то менять.

Абстрактный нейминг

Плюс: легко менять стили без переименования токенов.

Минус: значения не считываются сходу, нужно объяснить команде, чтобы всем был понятен принцип.

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

Как обозначить числовой шаг?

Есть два подхода:

Маечный (S, M, L) — привычно, но сложно добавлять промежуточные размеры (что между M и L?).

Числовой с большим шагом (100, 200, 300) — удобно для системы, где много размеров (не нужно выдумывать 2XL, 5M, как в маечной системе). Легко добавить промежуточный размер — например, 250 или 225. Но если в команду приходит новый сотрудник, важно ему объяснить, чему соответствует 100 и другие размеры. С маечной системой такой проблемы нет — эта размерная сетка знакома и в обычной жизни.

39f96025e022c5daabaad9d7e69928c4.jpg

Как выбрать семантику?

Все зависит от проекта:

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

  • Если продукт развивается и может меняться — лучше абстрактный нейминг и числовая система. Это сложнее, но дает гибкость. 

Расскажите в комментариях — вы за токены или по-прежнему используете стили?

© Habrahabr.ru