Применение локальных вариаций и стилей в атомарном подходе к созданию дизайн-системы

Привет, Хабр. Я Илья Сластен, продуктовый дизайнер интерактивной карты Первой грузовой компании, о создании, которой я рассказывал в своей предыдущей статье. Разработка современных цифровых продуктов требует системного подхода, обеспечивающего их гибкость, масштабируемость и согласованность. В этой статье будут рассмотрены ключевые аспекты работы с локальными переменными в Figma и подход Atomic Design, который позволяет упорядочить процесс проектирования. Эти принципы были применены для создания дизайн-системы для проекта «Декарта» в ПГК Диджитал — унифицированного картографического решения, которое дает возможность заказчику самостоятельно создавать модули, настраивать отчеты, управлять пользователями, а также получать доступ к инфраструктурным ж/д данным России и стран СНГ в формате единого окна. «Декарта» визуализирует дислокационную информацию об объектах, позволяет запрашивать детальную информацию по ним с помощью сквозного поиска и предоставляет возможности персонализации при работе с инструментом.

Атомарный подход к созданию дизайн-системы

Atomic Design — это методология, разработанная Брэдом Фростом, которая структурирует дизайн-систему, начиная с простейших компонентов (атомов) и завершая полноценными страницами.

Atomic Design позволяет минимизировать дублирование работы, упрощает обновления компонентов и повышает консистентность интерфейса.

Основные этапы Atomic Design

Методология включает пять ключевых этапов:

15a40653164034bef05bd53278277988.png

1. Атомы

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

Пример:

  • цветовые палитры (переменные primary-color, secondary-color);

  • базовые текстовые стили (Header-1, Body-text);

  • простые кнопки.

2. Молекулы

Молекулы объединяют несколько атомов для создания функциональных блоков.

Пример: форма ввода может включать:

  • поле для текста;

  • метку для ввода;

  • кнопку подтверждения.

Эти элементы взаимодействуют, выполняя единую задачу.

3. Организмы

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

Пример: меню навигации может включать:

  • логотип (атом);

  • текстовые ссылки (молекулы);

  • строку поиска (молекула).

4. Шаблоны

Шаблоны задают структуру страницы, включая размещение организмов и молекул. На этом этапе ещё отсутствуют стили и контент, но определяется логика их расположения.

Пример: главная страница может содержать:

  • шапку (организм);

  • основной контентный блок (молекулы и атомы);

  • футер (организм).

5. Страницы

На этапе создания страниц шаблоны наполняются реальным контентом: текстами, изображениями и данными. Здесь проводится финальное тестирование всех компонентов на предмет соответствия требованиям пользователей.

Local variables:

Для того, чтобы приступить к созданию компонентов, сначала мы будем создавать локальные переменные (Local variables) в Figma. Локальные переменные формируют основу для единообразного и масштабируемого дизайна.

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

7aa60504dd87b4879c516967f5bd60ee.png

Colors

Шаг 1: Primitive Tokens

Создание цветовых примитивов начинается с выбора базовых оттенков, таких как серый и брендовый цвет.

В качестве фирменного цвета был выбран Indigo, символизирующий технологии и эффективность. Примитивные цвета описываются в формате:

  • Primary;

  • Secondary;

  • Tertiary.

Шаг 2: Semantic Tokens

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

Пример использования:

  • border/primary;

  • background/primary.

Этот подход позволяет редактировать цвет границ и фонов отдельно, обеспечивая гибкость при внесении изменений.

Шаг 3: Color Modes

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

be3d451c8bfdb6b802ba19d6b5898123.png

Size and Spacing

Теперь приступаем к созданию детализированной системы размеров и отступов. Эти переменные позволяют нам легко адаптировать интерфейс под различные устройства и размеры экранов.

Corner radius (скругления углов)

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

Примеры:

  • zero-r: 0 (без скругления)

  • sm-r: 6 (для кнопок или маленьких контейнеров)

  • xl-r: 12 (для крупных карточек или контейнеров)

● Spacing (отступы)

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

Примеры:

  • zero: 0 (без отступа)

  • sm: 12 px (например, для маленьких отступов)

  • 2xl: 40 px (для более крупных отступов)

● Breakpoint (точки перелома для адаптивного дизайна)

Эти переменные определяют ширину и высоту экранов для различных устройств. Мы можем использовать их для настройки адаптивных макетов.

Примеры:

  • mobile_lg_width: 390 px (ширина экрана мобильного устройства)

  • tab_md_width: 834 px (ширина экрана планшета)

  • desktop-large: 1600 px (ширина десктопа)

b0170be2b5f42dbe47064d32bb3c16ce.png3a8d4f9fbb51947a26951959bc10b65a.pngbbff5467562d861c7996e6bb6fc2d41a.png

Local styles:

В процессе создания дизайн-системы важную роль играют типографика и эффекты, которые влияют на восприятие интерфейса пользователями. В этом разделе мы создадим и опишем локальные стили (Local styles) для типографики и эффектов с использованием шрифта Inter и различных визуальных эффектов, таких как тени.

1. Типографика (Typography)

1.1. Heading

Heading представляет собой различные уровни заголовков, которые могут варьироваться по размеру и весу. Каждый размер имеет два варианта: Default и Strong (для усиленной жирности). Пример градации для Heading:

● Large:

  • Default: Размер шрифта 32 px, жирность 600

  • Strong: Размер шрифта 32 px, жирность 700

● Medium:

  • Default: Размер шрифта 24 px, жирность 600

  • Strong: Размер шрифта 24 px, жирность 700

● Small:

  • Default: Размер шрифта 20 px, жирность 600

  • Strong: Размер шрифта 20 px, жирность 700

1.2. Label

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

● Large:

  • Default: Размер шрифта 16 px, жирность 400

  • Strong: Размер шрифта 16 px, жирность 600

● Medium:

  • Default: Размер шрифта 14 px, жирность 400

  • Strong: Размер шрифта 14 px, жирность 600

● Small:

  • Default: Размер шрифта 12 px, жирность 400

  • Strong: Размер шрифта 12 px, жирность 600

● Captions:

  • Default: Размер шрифта 10 px, жирность 400, Uppercase

  • Strong: Размер шрифта 10 px, жирность 600, Uppercase

1.3. Body

Body — это основной текст страницы, который используется для длинных абзацев и контента.

● xLarge:

  • Default: Размер шрифта 18 px, жирность 400

  • Strong: Размер шрифта 18 px, жирность 600

● Large:

  • Default: Размер шрифта 16 px, жирность 400

  • Strong: Размер шрифта 16 px, жирность 600

● Medium:

  • Default: Размер шрифта 14 px, жирность 400

  • Strong: Размер шрифта 14 px, жирность 600

Small:

  • Default: Размер шрифта 12 px, жирность 400

  • Strong: Размер шрифта 12 px, жирность 600

1.4. Underline

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

● xLarge:

  • Default: Размер шрифта 18 px, жирность 400, подчеркивание

  • Strong: Размер шрифта 18 px, жирность 600, подчеркивание

● Large:

  • Default: Размер шрифта 16 px, жирность 400, подчеркивание

  • Strong: Размер шрифта 16 px, жирность 600, подчеркивание

● Medium:

  • Default: Размер шрифта 14 px, жирность 400, подчеркивание

  • Strong: Размер шрифта 14 px, жирность 600, подчеркивание

● Small:

  • Default: Размер шрифта 12 px, жирность 400, подчеркивание

  • Strong: Размер шрифта 12 px, жирность 600, подчеркивание

2. Эффекты (Effect styles)

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

1. Shadow: xs

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

shadow-xs {

  box-shadow: 0 1 px 2 px rgba (0, 0, 0, 0.1);

}

2. Shadow: sm

Маленькая тень, подходящая для поиск и карточек.

shadow-sm {

  box-shadow: 0 2 px 4 px rgba (0, 0, 0, 0.1);

}

3. Shadow: md

Средняя тень для выделения элементов среднего размера, таких как формы.

shadow-md {

  box-shadow: 0 4 px 8 px rgba (0, 0, 0, 0.2);

} 

4. Shadow: lg

Большая тень для крупных элементов, таких как модальные окна.

shadow-lg {

  box-shadow: 0 8 px 16 px rgba (0, 0, 0, 0.2);

} 

5. Shadow: Overlay

Тень для наложения, используемая для элементов с затемненным фоном.

shadow-overlay {

  box-shadow: 0 0 40 px rgba (0, 0, 0, 0.7);

}

Создание компонентов на основе Local variables и Local styles:

Мы создали локальные вариации и стили для цвета, типографики, отступов и других параметров, и теперь, по методологии атомарного дизайна, мы приступим к созданию компонентов.

Чтобы ускорить процесс интеграции компонентов на Front-end, за основу, мы возьмем компонентную базу PrimeNG Lara Light.

PrimeNG Lara Light — это популярная UI-библиотека, которая предоставляет набор готовых компонентов для Angular-приложений. Она включает в себя различные элементы интерфейса, такие как кнопки, дропдауны, инпуты, формы, таблицы и другие, которые можно корректировать под нужды вашего проекта. Интеграция этих компонентов с нашими Local variables и Local styles позволит ускорить разработку и поддерживать единый стиль на всех уровнях проекта.

Шаги для интеграции компонентов PrimeNG с Figma Local variables и Local styles:

  1. Использование инспектора: В браузере откройте ваш проект, кликните правой кнопкой мыши по компоненту (например, кнопке или иконке) и выберите Inspect;

  2. Анализ компонентов: Инспектор откроет панель, в которой вы сможете проанализировать HTML-структуру компонента и связанные с ним стили (CSS). Этот этап необходим для того, чтобы сильно не уходить в кастомизацию компонентов библиотеки, найдя золотую середину между интеграцией с локальными вариациями и стилями Figma и скоростью и стоимостью разработки на стороне Front-end;

  3. Корректировка стилей: Используя полученные данные, заменяем их на ранее созданные Local variables и Local styles. Например, если компонент кнопки использует определенный цвет фона, вы можете заменить этот цвет на ваш фирменный, выбрав его из локальных вариаций;

  4. Итерационное пополнение компонентой базы: Согласно методологии атомарного дизайна, мы двигаемся от создания атомов и далее, к построению целых страниц, основанных на компонентах. Повторяем шаги 1–3, проходясь по всем компонентам библиотеки PrimeNG так, чтобы в итоге, все базовые компоненты были скорректированы и интегрированы в вашу дизайн-систему Figma.

Синхронизация Design & Front-end

Для создания единого стиля компонентов на основе Local Variables и Local Styles дизайнер и Front-end разработчик взаимодействуют в процессе интеграции библиотеки. С самого начала работы над созданием дизайн-системы важно наладить тесную коммуникацию. Это позволяет достичь полного соответствия между компонентами в Figma и их реализацией в коде.

  1. Постоянная коммуникация

    • Дизайнер и Front-end разработчик синхронизируются на всех этапах работы;

    • Дизайнер предоставляет разработчику доступ к инструменту Developer Inspect в Figma для работы с компонентами:
      — получение стилей;
      — анализ токенов и CSS-свойств.

    • Регулярные встречи помогают обсудить возникающие проблемы и уточнить детали.

61447098ba79f8b9e478bf8e108ec136.png

  • Постепенно все компоненты дизайн-системы интегрируются в проект;

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

  1. Первичный созвон и погружение в контекст

    • Дизайнер демонстрирует Front-end разработчику примитивы из Local Variables и Local Styles;

    • Обсуждаются ключевые принципы, такие как:
      — как именно будут использоваться токены (цвета, отступы, скругления и шрифты и их нэйминги);
      — логика построения компонентов и их состояния (hover, active, disabled);

    • Front-end разработчик получает общее представление о структуре дизайн-системы.

  2. Интеграция компонентов через Figma Developer Inspec

    • Front-end разработчик использует Developer Inspect, чтобы извлекать данные о вариациях, стилях и компонентах;

    • Эти данные адаптируются для компонентов библиотеки PrimeNG Lara Light, заменяя стандартные стили на локальные переменные из дизайн-системы.

  3. Проверка соответствия на всех этапах

    • Разработчик показывает дизайнеру внедрённые компоненты;

    • Дизайнер проверяет визуальную часть и сравнивает её с компонентами в Figma;

    • В случае несоответствий проводится корректировка как в коде, так и в макетах, если это необходимо.

  4. Итерационный процесс

    • Постепенно все компоненты дизайн-системы интегрируются в проект;

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

82e4e7605048fc972d78b012d3c823b0.pnge6efb797ee8e0c5256dc1ae4cb33e560.pnge598cb223b1dd20309be34a2afea5b77.png

Итог

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

  • Последовательность: чёткий алгоритм — от создания Local Variables и Local Styles до интеграции компонентов через Figma и PrimeNG — позволяет избежать хаоса и обеспечить структурированность процесса;

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

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

Начните с базовых шагов: настройте локальные переменные для цветов, размеров и отступов. Постепенно развивайте Atomic design в своём проекте, чтобы добиться согласованности и масштабируемости, коммуницируйте с front-end и product manager на ключевых этапах разработки.

© Habrahabr.ru