{"id":14277,"url":"\/distributions\/14277\/click?bit=1&hash=17ce698c744183890278e5e72fb5473eaa8dd0a28fac1d357bd91d8537b18c22","title":"\u041e\u0446\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u0442\u0440\u044b \u0431\u0435\u043d\u0437\u0438\u043d\u0430 \u0438\u043b\u0438 \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u0443\u043a\u0440\u0430\u0448\u0435\u043d\u0438\u044f","buttonText":"\u041a\u0430\u043a?","imageUuid":"771ad34a-9f50-5b0b-bc84-204d36a20025"}

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

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

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

2. Создаем компонент кнопок, чтобы наши токены применялись побыстрее и нам не пришлось тыкать много раз подряд.

3. Переносим готовые кнопки-компоненты в попап. У нас получилась вот такая простая структура.

4. Убираем выделение со всех элементов, находим справа в панели Local variables. И нажимает на иконку настройки

5. Как мы видим, пока тут пусто, нажимаем на + Create variable

6. Нам предлагают выбор между цветом и другими переменными. Они тоже очень полезные. Например Number используют для того, чтобы добавить определенные скругления, или высоту, или что-то еще. В общем любой параметр из панели справа, выраженный в цифрах. Это нужно, чтобы например у вас на мобиле, десктопе и планшете были одни и те же скругления. Или для того, чтобы высота таббара на всех девайсах была одной и той же (ну а вдруг). String - переменная, удобная для локализации. Например вы создаете ру/англ версию сайта. Привязываете переменную к текстам и просто в 1 клик переключаете языки, чтобы убедиться что все локализовано + тексты не поехали. Boolean – это уже что-то на программистком, но можно использовать для того, чтобы показать/скрыть слой. Например на мобильных устройствах у вас есть бургер, а на десктопе он пропадает. Для этого лучше использовать true/false булеву переменную.

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

8. Создаем две переменные для цвета кнопки. Primary для основной и secondary для доп. кнопок. Так же забиваем цвета. Например синий у нас не изменится, будет везде синим, а вот черная кнопка изменится на серую. Такие HEX и вставляем.

9. Как видите, то, что писал выше мы добавили, а еще накидали переменных для текста. Черный текст у нас станет белым, а серый останется серым, так как выбран оттенок, хорошо различимый на фоне.

10. Теперь выбираем кнопку и применяем к ней нашу переменную button-primary. Переменные при этом выглядят в виде квадратиков, в отличие от круглых стилей.

11. Теперь применяем для второй кнопки button-secondary. Но почему-то она покрасилась в белый, и очевидно, что что-то пошло нет так. Разбираемся

12. Находим у кнопки вот такие гаечки в разделе Layer.

13. Дальше находим нашу коллекцию и выбираем нужный Mode.

14. Теперь наша кнопка покрасилась в нужный цвет с примененной темной темой. Теперь все ок. Но обратите внимание, что кнопка покрасилась, а компонент остался таким же. В этом случае нужно было применять переменную к компоненту.

15. Теперь находим все наши элементы, применяем к ним переменные цветов и выбираем темную тему.

16. Для кнопок исправляем ошибку выше и красим кнопочки в компоненте.

17. Мы забыли подложку! Добавляем еще одну переменную surface – она будет служить фоном для попапа.

18. Добавляем значения.

19. У нас появился новый токен surface-primary

20. Теперь нажимаем на layer и находим этот токен.

21. Применяем его к подложке.

22. Заключительный шаг, создаем секцию вокруг попапа.

22. Нажимаем на секцию и применяем для нее Light mode. И казалось бы все должно заработать. Но ничего не произошло. Почему? Потому что мы для попапа добавили dark переменные грубо говоря хардкодом. В таком случае попап не слушается внешнего регулятора.

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

24. В итоге добавляем еще одну секцию и привязываем к секции переменную Dark, а к другой Light. Попап у нас при этом в режиме Auto. В таком случае его цвета и токены будут управляться через внешнюю секцию. Получается вот такая игрушка. Можете пойти хвастаться перед коллегами.

Спасибо тем, кто дочитал, успехов вам с дизайном. Помните, что делая такую систему, один фронтендер облегченно выдыхает, благодаря вас.

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

Комментарий удален модератором

Развернуть ветку
Vova Krasilnikov
Автор

у каждого свой подход, как в продукте нет универсального пути его успеха. Я показал то, что может работать для маленьких команд и стартапов. Если знаете, как делать правильно – покажите

Ответить
Развернуть ветку
Невероятный Блондин

У тебя всё ок кроме распределения цвета (оттенков).
Чем ближе слой, тем он светлее.
Кнопка не может быть черной.
Черный для поля ввода текста.

Просто соблюдай законы, и всё.

Ответить
Развернуть ветку
Vova Krasilnikov
Автор

Согласен, это можно поправить, но статья про другое, так что ничего страшного)

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

Я очень сильно поржал с "неможет" и "правил" - это дизайн, тут нет правил и много душнил. (О нет. поставил "-" вместо "—" перед это, я злостный нарушитель)

Ответить
Развернуть ветку
Невероятный Блондин

В творчестве нет правил, в дизайне есть. Если тебе легче воспринять, то не правила, а определенные законы.

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

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

Поэтому да, есть и законы и правила.

Ответить
Развернуть ветку
Roman Volgasov

В даркмоде тёмная кнопка с более светлом БГ это дырка.

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

Комментарий удален модератором

Развернуть ветку
Невероятный Блондин

HIG, Material Design Guidelines, Inclusive Best Practices вышли из чата.

Продолжай 👌🏼

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

Понятно. Дизайнер со скиллбокса

Ответить
Развернуть ветку
Невероятный Блондин

Спасибо что поделился.
Я догадывался.

Ответить
Развернуть ветку
Leonid Meleshin

Статья все-таки не про построение тем, а про пример работы с variables для создание разных цветовых тем. Не душите и научитесь видеть для себя пользу во всем 😉

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

Комментарий удален модератором

Развернуть ветку
Fedor Mironov

Печально, что для цвета теней нет поддержи variables

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

Это временно, на презентации говорили, что поддержка для эффектов тоже будет скоро

Ответить
Развернуть ветку
Нина И.

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

Ответить
Развернуть ветку
Andrew Oz

Подавляющее большинство приложений крупных ретейлеров не имеет темных тем

Ответить
Развернуть ветку
Vova Krasilnikov
Автор

Зато у Озон, Авито, WB, Яндекс маркет есть 👍🏻

Ответить
Развернуть ветку
Andrew Oz

Где в WB и ЯМ такие настройки?

Ответить
Развернуть ветку
Vova Krasilnikov
Автор

Автоматически

Ответить
Развернуть ветку
Polina Biriukova

Спасибо за статью конечно, но я еще больше запуталась(

Ответить
Развернуть ветку
Vova Krasilnikov
Автор

Это нормально, попробуйте сами поковырять

Ответить
Развернуть ветку
Fedor Mironov

Печально, что для цвета теней нет поддержи variables

Ответить
Развернуть ветку
Pigeon P

Фигма жоско двинулась вперёд, это чудо господне какое-то. Научилась гарнитуры показывать, это что вообще!

Ответить
Развернуть ветку
Роман Юречко

Цвет теней нет поддержи variables

Ответить
Развернуть ветку
Максим Клименко

спасибо за кейс ,сохраню чтобы не потерять

Ответить
Развернуть ветку
МистерThe Big OneАдекватни

Нет variables-ов для цвета теней, если что

Ответить
Развернуть ветку
Sergei Klimenko

Мож я туплю, но объясните про переменные типа string. Почему я могу добавить переменную к текстовым полям, кроме только тех случаев, когда текстовое поле в компоненте привязано к property / text

Это бага и ждать обновлений? Это фича и надо поудалять проперти в библе?

Ответить
Развернуть ветку
Nori Bathory

Можете подсказать как уже в большом проекте перенести все цвета из стилей в variables? Чтобы можно потом быстро все это настроить

Ответить
Развернуть ветку
Vova Krasilnikov
Автор

Умельцы уже начали плагины писать. Можете поискать что-то типа styles to variables

Ответить
Развернуть ветку
Yana Morgunova

Нихрена не понятно, но все равно спасибо...

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