Как стать автором
Обновить
71.06
Friflex
Мобильные приложения для миллионов пользователей🚀

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

Уровень сложностиСредний
Время на прочтение4 мин
Количество просмотров16K

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

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

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

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

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

Что такое переменные в Figma?

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

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

Преимущества переменных:

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

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

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

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

Где находятся переменные в Figma?

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

Токенизация переменных

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

Какую семантику выбрать для дизайн-токенов?

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

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

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

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

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

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

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

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

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

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

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

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

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

HSL

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

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

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

Недостатки:

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

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

LCH

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

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

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

Недостатки:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Теги:
Хабы:
Всего голосов 12: ↑12 и ↓0+15
Комментарии11

Публикации

Информация

Сайт
friflex.com
Дата регистрации
Дата основания
Численность
101–200 человек
Местоположение
Россия
Представитель
Friflex_dev