Привет, Хабр! Меня зовут Антон, я UX дизайнер. Сейчас работаю в линстартапе. Основное требование к нашему продукту (приложению) — его быстрое получение пользователем.
Преамбула
Продукт не должен проседать на фоне конкурентов, даже несмотря на наследие и ограниченные ресурсы.
Сейчас я расскажу, как моя команда, имея слабую компонентную базу, умудрилась завести и завезти тёмную тему для айос и андроид.
Задача стояла нехитрая: сделать тёмную тему для приложений на обеих платформах.
При этом в «дано» у нас было:
библиотека цветов в Фигме;
библиотека цветов на платформах (с кучей цветов наследия);
только базовые компоненты в Фигме и ещё меньше — в коде;
иконочный сет и сет иллюстраций.
Да, мы знали, как правильно, но на это у нас не было ни времени, ни рук.
Далее по шагам опишу наш путь.
![](https://habrastorage.org/getpro/habr/upload_files/b41/628/dc7/b41628dc7397a1fd986fb89fc2ec7060.jpg)
1 шаг — Рефакторинг
Заскринили экраны приложений для обеих платформ (iOS, Android), сравнили с макетами.
Ремарка: приложения у нас в большинстве своём схожи.
![](https://habrastorage.org/getpro/habr/upload_files/ac8/34b/cea/ac834bceaf7c5c5adeed3fb2b42aab63.jpg)
![](https://habrastorage.org/getpro/habr/upload_files/855/f3a/f6f/855f3af6f3821410c8d04bc4911bfaed.jpg)
2 шаг — Цвета
Наши цвета — это стандартный набор основных цветов и их оттенки в светлую и тёмную стороны: фоновый белый, триггерный синий, чёрный и серый для шрифтов и частные случаи использования оттенков применяемых в дизайне.
Немного о принципах: при управлении вниманием пользователя в первую очередь мы опираемся на когнитивные свойства восприятия. На фокус сильно влияют картинки и контрастные элементы. Потому мы распределили цвета и оттенки по контрасту, создав цветовые пары, где парой цвету приходится фон.
Думали сделать уникальные цвета с идентичным контрастом для обеих тем. Но решили не упарываться и для светлой темы почти ничего в цветах не меняли, а для тёмной реверсировали глубину цвета. Так мы получили 2 набора динамичных (переключающихся) цветов.
![](https://habrastorage.org/getpro/habr/upload_files/9b1/fe4/bd8/9b1fe4bd89a5cab2b3a4c70330240a81.jpg)
Контрасты цветов мы замерили по шкале доступности контента применяемой к контрасту. Получили в большинстве случаев близкие показатели.
![](https://habrastorage.org/getpro/habr/upload_files/3a1/45d/df3/3a145ddf3595f08427819b8f46de986d.jpg)
3 шаг — Цветовые токены
![](https://habrastorage.org/getpro/habr/upload_files/504/97e/04e/50497e04e52770794977efe7e1e086aa.jpg)
Ранее мы именовали цвета исходя из глубины цвета. Теперь мы взяли за основу контраст в светлой и тёмной темах. Цвета именуются одинаково, содержат префикс оттенка и число контраста. То есть, светлый синий на светлой теме и тёмный синий на тёмной имеют одинаковый b_100. Чем контрастнее, тем больше число.
![](https://habrastorage.org/getpro/habr/upload_files/dfb/667/db1/dfb667db15d7db142e4bf119a54b3e96.jpg)
4 шаг — Отрисовка
![](https://habrastorage.org/getpro/habr/upload_files/3cc/74c/dfb/3cc74cdfb2abeef1bf7afe782a01ea17.jpg)
Скорее не отрисовка, а назначение тёмной цветовой схемы светлой.
![](https://habrastorage.org/getpro/habr/upload_files/d50/22a/704/d5022a70458cf245bc02f4de7d44c34e.jpg)
5 шаг — Уникальные цвета
Как я выше писал, у нас есть частные случаи, которые нельзя переключить в рамках заложенной логики. Потому мы добавили небольшие сеты уникальных цветов, которые переключаются уникальным образом.
![](https://habrastorage.org/getpro/habr/upload_files/523/64b/be1/52364bbe1765e3d9f519987dfccb18e7.jpg)
Также нам понадобился набор статичных (непереключающихся) цветовых оттенков.
![](https://habrastorage.org/getpro/habr/upload_files/ebc/bc2/f9e/ebcbc2f9e501834b8a2922062a920ae1.jpg)
6 шаг — Автоматизация
![](https://habrastorage.org/getpro/habr/upload_files/273/c92/f35/273c92f35300c4e8e2e3581eb76812ba.jpg)
Мы должны проверять свой дизайн, а делать для этого макеты в 2-х темах совершенно не наш подход. Запустили плагин Appearance для Фигмы, настроили, протестили.
![](https://habrastorage.org/getpro/habr/upload_files/f1d/7e3/16b/f1d7e316bef74ed6c781ecde3b411b35.jpg)
7 шаг — Разработка
Выгружаем наши цвета в нужном разработчикам формате и/или добавляем их в песочницу сами. Просим разработчиков выгрузить библиотеку цветов из кода. Рефакторим цвета, присваивая цветам наследия новые цвета.
![](https://habrastorage.org/getpro/habr/upload_files/f9e/d29/23d/f9ed2923dd337e0b837e1865ba0721da.jpg)
Просим сборку у разрабов на новых цветах и наслаждаемся результатом переключения цветов. Конечно же, было ещё немало работы по вычищению ошибок по цветам. Но не долго.
![](https://habrastorage.org/getpro/habr/upload_files/b3e/710/d15/b3e710d1545db65352bec6a0408f3f19.jpg)
Итог
Таким подходом, технически, мы завезли тёмную тему буквально за пару недель. Да, на изучение различных подходов, перебор массы дизайн-систем, перекраску цветов (раз 8) ушло месяца 3, но глядя на результат, мы с командой понимаем, что всё было не зря.
Тонкостей по пути было много. Если будут вопросы, я с радостью отвечу на них в Телеграме — @Kilunin.
Рад, если было полезно!