{"id":14285,"url":"\/distributions\/14285\/click?bit=1&hash=346f3dd5dee2d88930b559bfe049bf63f032c3f6597a81b363a99361cc92d37d","title":"\u0421\u0442\u0438\u043f\u0435\u043d\u0434\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u043f\u0443\u0442\u0435\u0448\u0435\u0441\u0442\u0432\u0438\u044f","buttonText":"","imageUuid":""}

Дизайн токены: как они могут помочь вам сэкономить время и деньги

Дизайн токены в 2023 году

В последние годы сфера дизайна начала очень активно развиваться. Еще только несколько лет назад все делали простые интерфейсы в Фотошопе, а теперь все говорят про прототипы, автолейауты, компоненты, UI киты и так далее. После конференции config 2023 посвященный обновлению фигмы наш словарь пополнился еще парочкой новый слов как переменные и все больше дизайнеров начали говорить о токенах. В этой статье мы обсудим что такое токенизация в дизайне, зачем он нужен, как и когда его применять и причем тут figma и программисты

Для кого статья

Для дизайнеров: которые хотят понять что такое токены и зачем переменные в дизайне

Для разработчиков интерфейса: которые хотят ускорить процесс верстки проекта

*Но если вы веб дизайнер который работает с простыми сайтами и лендингами дизайн токены вам вряд ли нужны*

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

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

Миссия дизайн токенов — сократить время на разработку и помочь держать несколько приложений в едином виде, оптимизируя стоимость и время на правки. А ещё они помогают дизайнеру и разработчику общаться на одном языке. После создание дизайн токенов, разработчик может без труда экспортировать всю библиотеку стилей и сразу внедрить в проект.

*Если вы знакомы с концепцией атомарного дизайна, можно сказать что токены это составляющее атомов, то есть протоны, нейтроны и электроны*

Примеры дизайн токенов

Предыстория: концепция дизайн токенов существует уже давно, впервые идею дизайн токенов представили еще 2016 году ребята из Salesforce: Джина Болтон и Джон Левин на примере своего дизайн системы Lightning Design System. Только после конференции config 2023 она получила свое развитие и сейчас повсеместно приминается в дизайн системах как Fluent 2 от Microsoft, Atlassian Design от Atlassian и во многих других. Почему же так случилось? Дело в том что до появлении переменных в фигме создание и работа с дизайн токенами было возможно только через сторонние плагины. Дальше на конкретном примере разберем почему это так.

Как работать с токенами?

С чего начать? С начало необходима провести организацию проекта в Figma. Вспоминаем принципы атомарного дизайна и все советы по новедению порядка в файле дизайна от крутых дизайнеров.

Теперь при создании дизайн языка проекта мы вместо локальных стилей для цветов должны создать переменные с цветами (здесь говориться о переменных в фигме, уточнение чтобы не перепутать с переменными в коде). Если вы пробовали работать с локальными стилями и переменными вам может показаться что они имеют одинаковый функционал (оба работают как глобальные стили, при изменении которых меняются и все соответствующие цвета в дизайне)

Почему переменные а не локальные стили?

  • Переменные могут ссылаться на другие переменные. А это в свою очередь одна из главных вещей для создание токенов. Программисты должны знать в этом толк)))
  • С помощью переменных можно делать режимы. Как пример режимы разных языков или светлый и темный режим с помощью одних и тех же токенов цвета
  • Переменные приминаются в продвинутых прототипах
  • Скоро будет доступно функция перевода переменных в код прямо из Figma в разделе Dev Mode без сторонних плагинов. А пока что могу посоветовать плагин Variable Convertor

Конструкция токенов

Для названии токенов мы можем использовать конструкцию — [Category]-[Type]-[Item]-[SubItem]-[State] которая легко ложится на переменные в Фигме.

  • Category – категория токена (color, font) ;
  • Type – тип токена (text, background, border) ;
  • Item – элемент (button, table, input) ; SubItem – тип элемента (primary, secondary) ;
  • State – состояние элемента (default, hover, active) .

Но такая конструкция не обязательная, иногда она может быть короче, а иногда чуть по другому (обычно в документации каждой дизайн системе прописано как правильно называть токены)

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

Конструкция токенов и взаимодействие с ними

Еще можно делать токены для разных режимов интерфейса из одних и тех же глобальных переменных

На примере показан: 1) как токен ссылается на переменную в коллекции global; 2) токены для разных режимов из одних и тех же глобальных переменных

Семантическое название токенов

Токены это не только про правильное взаимодействие с дизайном, токены это еще и про ускорении цикла разработки. Семантическое название это еще один важный этап при создании правильных токенов. Семантика в названии предполагает что у каждого название токена есть смысл и указатель где должен этот токен применяться (как пример конструкция которую мы обсуждали ранее).

Например я из своего опыта знаю что многие дизайнеры называют цвета просто как red-2, light-red, primary или просто text color. В этом случае разработчик каждый раз должен лезть в дизайн чтобы понять где какай стиль использовать.

На видео пример пример правильного название: разработчику не нужно вспоминать, какая тень при наведении на карточку. Ему просто нужно ввести первые строчки переменной и выбрать переменную в состоянии *-hover.

Почему важна семантика в названии

В дальнейшем, при использовании семантического описания переменной, разработчику проще оперировать ими при назначении свойств элементам. К тому же, разработчик всегда может напрямую назвать дизайнеру название токена, что позволит сторонам лучше понимать друг друга.

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

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

Дизайн токены = Переменные в коде

Как токены превращаются в код? Беря за основу опыт в frontend — дизайн-токен и есть переменная в коде.

*Если правильно соблюсти все вышеперечисленное, разработчик будет наслаждаться процессом верстки 😂*

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

Скриншот с официального сайта Figma

Перевод дизайн токенов в код с помощью плагинов: на данный момент в разделе Dev Mode есть масса плагинов которые имеют данный функционал. Сегодня в качестве примера мы будем рассматривать плагин Variables Converter

Плагин в разделе Dev Mode

Наглядный пример, переводим токены в код:

Для примера работы с токенами я создал простенки дизайн формы регистрации, который в дальнейшем будем верстать:

Кликните здесь, чтобы перейти в Figma проект *Не лишним будет заглянуть в проект и посмотреть как там все устроено*

Дизайн формы регистрации в фигме

Дизайн токены проекта:

Для начала создаем базовый HTML файл с полями для ввода и кнопкой и подключаем к нему файл 'style.css':
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Пример для статьи</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="container"> <h1>Форма регистрации</h1> <form action="/action_page.php" method="post"> <label for="email">Email</label> <input type="email" name="email" id="email" placeholder="Адрес электронной почты"> <label for="password">Пароль</label> <input type="password" name="password" id="password" placeholder="Введите пароль"> <label for="confirm_password">Подтвердите пароль</label> <input type="password" name="confirm_password" id="confirm_password" placeholder="Повторите пароль"> <button type="submit">Зарегистрироваться</button> </form> </div> </body> </html>

Далее с помощью плагина Variable Converter мгновенно переводим все токены в код и получаем следующий код, который сохраняем например как 'library. css':

:root { --colors-neutral-neural-100: #121314FF; --colors-neutral-neutral-0: #FFFFFFFF; --colors-neutral-neutral-10: #FAFAFAFF; --colors-neutral-neutral-40: #91969AFF; --colors-brand-electric-blue: #1C84F1FF; --integers-font-size-16: 16px; --integers-font-size-24: 24px; --integers-radius-radius-10: 10px; --integers-radius-radius-20: 20px; --integers-sizes-size-100: 100px; --integers-sizes-size-40: 40px; --integers-sizes-size-400: 400px; --integers-spacing-space-10: 10px; --integers-spacing-space-20: 20px; --integers-spacing-space-30: 30px; --integers-spacing-space-40: 40px; --colors-background: var(--colors-neutral-neutral-10); --colors-button-background: var(--colors-brand-electric-blue); --colors-button-text: var(--colors-neutral-neutral-0); --colors-container-background: var(--colors-neutral-neutral-0); --colors-input-border: var(--colors-neutral-neutral-40); --colors-input-text: var(--colors-neutral-neutral-40); --colors-text-fill: var(--colors-neutral-neural-100); --values-font-size-button: var(--integers-font-size-16); --values-font-size-h1: var(--integers-font-size-24); --values-font-size-label: var(--integers-font-size-16); --values-radius-button-corner: var(--integers-radius-radius-20); --values-radius-input-corner: var(--integers-radius-radius-10); --values-sizes-height-button: var(--integers-sizes-size-40); --values-sizes-height-input: var(--integers-sizes-size-40); --values-sizes-width-button: var(--integers-sizes-size-400); --values-sizes-width-input: var(--integers-sizes-size-400); --values-sizes-width-input-380: 380px; --values-spacing-container-space: var(--integers-spacing-space-20); --values-spacing-input-left-padding: var(--integers-spacing-space-10); --values-spacing-input-space: var(--integers-spacing-space-30); --values-spacing-label-space: var(--integers-spacing-space-10); }

В файле 'style. css« мы сначала должны подключить библиотеку с помощью строки »@import «library. css»;" после этого мы можем использовать все токены в виде переменных:

@import 'library.css'; body { font-family: sans-serif; background-color: var(--colors-background); } .container { align-items: center; width: var(--values-sizes-width-input); margin: 0 auto; padding: var(--values-spacing-container-space); background-color: var(--colors-container-background); box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } h1 { font-size: var(--values-font-size-h1); margin: 0 0 var(--values-spacing-container-space) 0; } label { font-size: var(--values-font-size-label); margin-bottom: var(--values-spacing-label-space); } input { width: 380px; height: var(--values-sizes-height-input); border: 1px solid var(--colors-input-border); padding-left: var(--values-spacing-label-space); margin-bottom: var(--values-spacing-input-space); margin-top: var(--values-spacing-label-space); border-radius: var(--values-radius-input-corner); } button { width: var(--values-sizes-width-button); height: var(--values-sizes-height-button); background-color: var(--colors-button-background); color: var(--colors-button-text); font-size: var(--values-font-size-button); cursor: pointer; border: none; border-radius: var(--values-radius-button-corner); }

Таким образом процесс верстки занимает не более 3-5 минут и мы получаем результат который с точностью до пикселя повторяет дизайн:

Скриншот с браузера

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

А еще поддержка, изменение и развитие проекта требует гораздо меньше усилии и вложении

Про другие языки программирование

Скоро Figma должны добавить функцию перевода переменных в код, который опять же мы упоминали выше. Разработчики заявили о поддержке языков СSS, JavaScript, Kotlin, Swift. Плагин который мы сегодня обсуждали помимо этих языков Java.

Но что делать если проект делается на других языках программирование, например мобильное приложение на Flutter с использованием ЯП Dart? На такой случай есть универсальный способ который работает почти на всех языках — использовать JSON файлы.

JSON или JavaScript Object Notation — текстовый формат обмена данными, основанный на JavaScript. Но при этом он может использоваться в любом языке программирования. Дизайн-токены хранятся в JSON-файле, в котором нет ничего хитрого: обычный текстовый файл, с расширением *. json и специальной древовидной разметкой. Разметка файла JSON позволяет каталогизировать мета-информацию в древовидную структуру, которая в последующем будет обрабатываться компилятором. JSON становится единым хранилищем всех дизайн-стилей вашего приложения. Преимущество JSON — один такой файл можно использовать в нескольких проектах, например android и ios. А при изменении дизайна, нужно только внести правки в один файл JSON.

Вот ссылка на плагин который переводит токены в JSON файл. А нужные статьи как использовать JSON файл в своем проекте я думаю вы и сами можете найти.

Подводим итоги

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

В реальной практике использование дизайн токенов с переменными в Figma может привести к следующим преимуществам:

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

*Я очень надеюсь что эта статья была для вас полезным))) Это первый мой опыт в написания статей. Если я сказал что то не так пожалуйста поправьте меня в комментариях. Вы можете меня найти во всех социальных сетях под ником @nicheriin

Немного о себе: меня зовут Нурсултан и я занимаюсь дизайном более трех лет и поработал над приличным количеством проектов и том числе и в Astana Hub. На данный момент я студент 2 курса Astana IT University по программе Media Technologies*

Полезные ссылки

0
6 комментариев
Написать комментарий...
Andrew Oz

На грамотность мог и проверить бы текст

Ответить
Развернуть ветку
Владимир Сиволовский

тоже об этом подумал. 30 сек в gpt закинуть

Ответить
Развернуть ветку
Anna Cherkesova

Классная стать, но опечатки и правда слегка отвлекают

Ответить
Развернуть ветку
Alexander Cherkashin

Спасибо за статью!

Для чего нужны компонентные токены? Почему не использовать напрямую семантические токены для компонентов?

Ответить
Развернуть ветку
Nursultan Akim
Автор

Привет! Компонентные токены упрощают изменение стилей отдельных элементов без воздействия на общие стили. Например, если у тебя есть кнопка, которая использует глобальный токен для цвета, использование компонентных токенов для кнопки позволяет изменить только её цвет, не затрагивая другие элементы интерфейса, использующие тот же глобальный токен.

Ответить
Развернуть ветку
Alexander Cherkashin

Да, но ведь можно просто открыть стили кнопки и изменить один семантический токен на другой.

Ответить
Развернуть ветку
3 комментария
Раскрывать всегда