Подробный гайд как сделать темную тему с помощью variables фигмы

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

  1. В качестве примера создаем попап в темной теме и будем работать с переменными на его примере. При этом у меня не заданы цветовые стили.

2e2e4a29b41706128e343f8a07e1f860.png

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

cf4ddd07e8d2a8b80bcbcecd189db207.png

  1. После этого перемещаем наши кнопки-компоненты в попап, получая простую структуру.

055249f794c0720e7c391e73bbb1de30.png

  1. Снимаем выделение со всех элементов и находим в правой панели раздел Local variables, где нажимаем на иконку настроек.

76f64704b2ac2ee7dcc1e918b4fe1351.png

  1. Замечаем, что раздел пуст, и выбираем + Create variable.

98ad56a055314e76df043a39e0e0e117.png

  1. Перед нами выбор между цветом и другими типами переменных, которые тоже могут быть очень полезны. Например, переменные типа Number используют для задания скруглений, высоты или других параметров, выраженных числами, чтобы обеспечить единообразие дизайна на разных устройствах. Переменные типа String удобны для локализации, позволяя легко переключаться между языковыми версиями сайта и убеждаться в правильности локализации. Boolean переменные, хоть и более технические, могут быть использованы для показа или скрытия слоя, например, для отображения меню-бургера на мобильных устройствах и его скрытия на десктопной версии, используя логические переменные true/false.

b43f4e2c5c1378eafbdc05d740354827.png

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

a7211d563fe3144efbf018bebbf886fd.png

  1. Создаем две переменные для цветов кнопок: одну для основных (primary) и другую для второстепенных (secondary) кнопок, задавая соответствующие цвета. К примеру, синий цвет будет постоянным для основных кнопок, в то время как цвет второстепенных кнопок изменится с черного на серый. Именно такие HEX-коды мы и используем.

b63ac3d917d39039a843cc59cfe08c34.webp

  1. Следуя предыдущему шагу, мы добавили указанные переменные и ввели дополнительные переменные для текста. Так, черный текст превратится в белый, в то время как серый текст останется неизменным благодаря выбору контрастного оттенка.

23d8d2924cae6b50fe3e4539309762db.webp

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

4edeffd1617e5fb2d66c13c2fd41dcee.webp

  1. Затем применяем переменную secondary для второй кнопки, но она по ошибке стала белой, указывая на возникшую проблему, которую нужно исправить.

94eed8b6ba6c0eb480ebee4ee4d227ba.webp

  1. Обнаруживаем у кнопки специальные значки в разделе Layer.

431118d084842bf92dd6ab06a6819a6c.webp

  1. Находим наш набор переменных и выбираем подходящий Mode.

68b52432ffb4e9fc47406744b513b308.webp

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

2dc7d5a4068b76b2c66d0b8f986fa6cc.webp

  1. Проходимся по всем элементам, применяя к ним цветовые переменные и переключаясь на темную тему.

a94c05bfacb2ed441a4c1d87042ac598.webp

  1. Исправляем ранее упомянутую ошибку, окрашивая компоненты кнопок в соответствии с выбранными переменными.

c45b19b4cc799767232ee36b5a66fba8.webp

  1. Оказывается, мы пропустили фон попапа! Добавляем еще одну переменную под названием surface, которая будет служить фоном для нашего попапа.

24718b6ba885692ab572a58ec0a42be1.webp

  1. Вводим конкретные значения.

cc68237639b1684061df3f7eb37e71af.webp

  1. У нас теперь есть новый токен под названием surface-primary.

46d571e868fd3899969c4abee622755d.webp

  1. Затем выбираем слой и находим этот токен.

708e5b46f55ce8f0134eca39396a5a06.webp

  1. Применяем токен к основанию попапа.

5da0b1b3811476d4cf8f4e3ff17d35d0.webp

  1. Как заключительное действие, создаем обрамление вокруг попапа.

c00e0403fd2180af1ce0063e2040c90e.webp

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

0105a6c99bac7864e53e68f57e91bf23.webp

  1. Чтобы устранить эту проблему, перенастраиваем все элементы в попапе на автоматические переменные. При этом светлый режим отображается в наших переменных в первой колонке, и по умолчанию будет применен именно он. Так что если планируете использовать разделение по темам с автоматическим переключением, рекомендуется установить настройку на auto. Если же у вас есть макеты для светлой и темной тем, вам может потребоваться ручная настройка режима.

0392f429cf890f20c5b8269b68138b6f.webp

  1. Наконец, добавляем еще одну область и связываем одну с переменной Dark, а другую — с Light. Попап при этом настроен на автоматический выбор режима. Таким образом, его стиль и токены будут регулироваться внешней областью. В итоге получается такой интересный эффект. Теперь можете поделиться этим с коллегами.

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


  • В качестве примера создаем попап в темной теме и будем работать с переменными на его примере. При этом у меня не заданы цветовые стили.

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

  • После этого перемещаем наши кнопки-компоненты в попап, получая простую структуру.

  • Снимаем выделение со всех элементов и находим в правой панели раздел Local variables, где нажимаем на иконку настроек.

  • Замечаем, что раздел пуст, и выбираем + Create variable.

  • Перед нами выбор между цветом и другими типами переменных, которые тоже могут быть очень полезны. Например, переменные типа Number используют для задания скруглений, высоты или других параметров, выраженных числами, чтобы обеспечить единообразие дизайна на разных устройствах. Переменные типа String удобны для локализации, позволяя легко переключаться между языковыми версиями сайта и убеждаться в правильности локализации. Boolean переменные, хоть и более технические, могут быть использованы для показа или скрытия слоя, например, для отображения меню-бургера на мобильных устройствах и его скрытия на десктопной версии, используя логические переменные true/false.

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


  • В качестве примера создаем попап в темной теме и будем работать с переменными на его примере. При этом у меня не заданы цветовые стили.

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

  • После этого перемещаем наши кнопки-компоненты в попап, получая простую структуру.

  • Снимаем выделение со всех элементов и находим в правой панели раздел Local variables, где нажимаем на иконку настроек.

  • Замечаем, что раздел пуст, и выбираем + Create variable.

  • Перед нами выбор между цветом и другими типами переменных, которые тоже могут быть очень полезны. Например, переменные типа Number используют для задания скруглений, высоты или других параметров, выраженных числами, чтобы обеспечить единообразие дизайна на разных устройствах. Переменные типа String удобны для локализации, позволяя легко переключаться между языковыми версиями сайта и убеждаться в правильности локализации. Boolean переменные, хоть и более технические, могут быть использованы для показа или скрытия слоя, например, для отображения меню-бургера на мобильных устройствах и его скрытия на десктопной версии, используя логические переменные true/false.

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

© Habrahabr.ru