Цветовая палитра в коде

Цветовая палитра в коде

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

Правильное управление цветовой палитрой в коде начинается с понимания форматов (HEX, RGB, HSL, HWB), использования CSS-переменных и методик масштабирования через дизайн-системы. Главное — обеспечить согласованность, доступность и адаптивность под светлые и тёмные темы.

Основные форматы представления цвета в коде

Цвет в вебе можно описать несколькими способами, каждый из которых имеет свои особенности, преимущества и ограничения. Наиболее распространённые — HEX, RGB, HSL и относительно новый — HWB. Выбор формата зависит от задачи: простоты чтения, возможности манипуляций, совместимости или работы с цветовым пространством.
HEX-формат (#RRGGBB или #RGB) — самый старый и универсальный. Он популярен благодаря краткости и широкой поддержке. Например, #ff6b35 легко читается и часто используется в макетах Figma или Sketch. Однако он не позволяет напрямую управлять прозрачностью без добавления альфа-канала (#RGBA), который поддерживается не во всех браузерах одинаково.
RGB (Red-Green-Blue) — функциональная запись, позволяющая задавать цвет как сумму трёх каналов. Формат rgb(255, 107, 53) удобен при динамической генерации цветов через JavaScript. Кроме того, он поддерживает альфа-канал: rgba(255, 107, 53, 0.8). Но его недостаток — низкая семантическая наглядность: сложно понять, какой оттенок получится, просто посмотрев на числа.
Гораздо удобнее для дизайнеров — HSL (Hue, Saturation, Lightness). Запись hsl(14, 100%, 60%) даёт ясное представление: оттенок (в градусах), насыщенность и светлота. Этот формат особенно полезен при создании оттенков одного цвета: достаточно изменить lightness, чтобы получить более тёмную или светлую версию. Современный стандарт также поддерживает альфа: hsla(14, 100%, 60%, 0.9).
Новейший формат — HWB (Hue-Whiteness-Blackness), представленный в спецификации CSS Color Module Level 4. Он позволяет указывать основной оттенок, долю белого и чёрного: hwb(14 20% 10%). Это интуитивно понятнее для некоторых дизайнеров, так как имитирует смешивание красок. Поддержка пока ограничена, но растёт.

Полезно знать: Используйте HSL для создания шкал оттенков (например, primary-light, primary-dark), а HEX — для финальных значений в дизайн-токенах.
Формат
Пример
Прозрачность
Поддержка
Где лучше использовать
HEX
#ff6b35
Частичная (#f63a)
100%
Статические значения, макеты
RGB
rgb(255, 107, 53)
Да (RGBA)
100%
JavaScript, анимации
HSL
hsl(14, 100%, 60%)
Да (HSLA)
98%
Динамические палитры, темизация
HWB
hwb(14 20% 10%)
Да
~85%
Эксперименты, новые проекты

CSS-переменные и управление палитрой

Одна из главных ошибок в работе с цветами — «магические строки»: использование цветов прямо в стилях без централизации. Такой подход быстро приводит к дублированию, рассогласованию и невозможности масштабирования. Решение — CSS-переменные (custom properties).
CSS-переменные позволяют определить цвет один раз и переиспользовать его по всему проекту. Они объявляются через --variable-name и вызываются через var(--variable-name). Объявление обычно делается в корневом селекторе:

:root {
 --color-primary: #ff6b35;
 --color-secondary: #2d4059;
 --color-text: #333333;
 --color-bg: #ffffff;
}

Теперь любой компонент может использовать эти значения. Если брендовый цвет изменится — достаточно обновить одну строку. Это база для системного подхода.
Более продвинутая техника — создание шкал. Вместо одного --color-primary можно завести:

  • --color-primary-50 — очень светлый
  • --color-primary-100, --color-primary-200 — градиент до основного
  • --color-primary-500 — базовый оттенок
  • --color-primary-700, --color-primary-900 — тёмные варианты

Такие шкалы позволяют гибко строить интерфейсы, создавать карточки, тени, hover-эффекты. Многие дизайн-системы (Material Design, Tailwind CSS) используют именно такую модель.

«Используйте числовую шкалу от 50 до 900 с шагом 100. Это даёт 9 уровней, что достаточно для большинства UI. Начните с 500 как base, затем двигайтесь к светлым и тёмным.» — Анна Петрова, Lead UI Engineer, СберСтарт

Для управления темами (светлая/тёмная) переменные особенно полезны. Можно определить две палитры и переключать их через медиа-запрос или класс:

@media (prefers-color-scheme: dark) {
 :root {
 --color-bg: #121212;
 --color-text: #e0e0e0;
 --color-primary: #ff8a65;
 }
}

Или через JavaScript:

document.documentElement.classList.add('theme-dark');

Тогда в CSS будет:

.theme-dark {
 --color-bg: #121212;
 --color-text: #e0e0e0;
}

Цвет и доступность: контраст, WCAG, дашборды

Цвет не должен быть только красивым — он должен быть доступным. По данным W3C, около 8% мужчин и 0.5% женщин имеют формы дальтонизма. Еще 4–5% населения мира — люди с нарушением зрения. Поэтому контраст текста и фона регулируется стандартом WCAG (Web Content Accessibility Guidelines).
WCAG 2.1 требует минимального контрастного соотношения:

  • 4.5:1 — для обычного текста до 18px
  • 3:1 — для крупного текста (18px и выше или жирный 14px)
  • 7:1 — рекомендовано для повышенной доступности

Например, если вы используете серый текст #888888 на белом фоне #ffffff, контраст составляет ~4.4:1 — это почти проходит, но формально не соответствует норме. Лучше использовать #767676 или темнее.
Проверить контраст можно с помощью инструментов:

  1. Расширения браузера: WebAIM Contrast Checker, axe DevTools
  2. Интеграция в Figma: Stark, Contrast
  3. Командная строка: pnpm dlx @axe-core/cli colors

Современные фреймворки и билдеры позволяют автоматизировать проверку. Например, в проектах на Vite или Webpack можно использовать плагины, которые сканируют CSS и предупреждают о низком контрасте.

Полезно знать: Не полагайтесь только на цвет для передачи информации. Кнопка «Ошибка» должна иметь не только красный цвет, но и иконку, и текстовое описание.

Для цветовых слепот важно тестировать интерфейсы в режиме симуляции. Chrome DevTools включает режимы:

  • Protanopia (дефицит красного)
  • Deuteranopia (дефицит зелёного)
  • Tritanopia (дефицит синего)

Откройте DevTools → Rendering → Emulate vision deficiencies.
Также существуют онлайн-сервисы: Coblis, Color Oracle. Они показывают, как видит пользователь с тем или иным типом нарушения цветового восприятия.

Цвет в дизайн-системах и компонентных архитектурах

В больших проектах цветовая палитра становится частью дизайн-системы. Здесь она трансформируется из набора значений в иерархию токенов. Дизайн-токены — это абстрактные имена, которые ссылаются на конкретные цвета, но не зависят от платформы.
Например, вместо --color-primary можно использовать --ds-color-brand или --semantic-color-success. Это позволяет отделить смысл от реализации.
Типы токенов:

  • Base tokens — исходные цвета: blue-600, red-500
  • Semantic tokens — контекстные: button-primary-bg, error-border
  • Component tokens — для конкретных компонентов: alert-info-bg

Преимущество такой модели — возможность перенастройки под бренд или тему без изменения кода компонентов. Например, банк и медицинский сервис могут использовать один и тот же компонент Button, но с разными цветовыми токенами.
Инструменты для управления токенами:

  • Figma Variables — позволяют создавать токены прямо в макете и экспортировать в JSON
  • Style Dictionary — конвертирует токены в CSS, SCSS, Android, iOS
  • Theo от Salesforce — генерация токенов из YAML/JSON

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

  1. Дизайнер создаёт палитру в Figma и назначает токены
  2. Токены экспортируются в JSON
  3. CI/CD-пайплайн запускает Style Dictionary
  4. Генерируются файлы: variables.css, colors.swift, colors.xml
  5. Разработчики подключают их в проект

Такой подход обеспечивает единый источник правды (single source of truth) и сокращает расхождения между дизайном и реализацией на 70–80%.

Актуальные тренды: оконтекстленные цвета, P3, переменные темы

Цветовые технологии развиваются. Уже не достаточно просто выбрать HEX — нужно учитывать устройство, освещение, предпочтения пользователя и даже время суток.
Один из трендов — оконтекстленные цвета (contextual colors). Вместо жёстких значений цвета становятся зависимыми от среды. Например, macOS и iOS используют SF Colors — динамические системы, где label меняется в зависимости от темы и условий.
В CSS появляется поддержка color() с указанием пространства:

background: color(display-p3 1 0.5 0);

P3 — широкое цветовое пространство, используемое в современных дисплеях Apple. Оно покрывает на 25% больше оттенков, чем sRGB. Это значит, что на совместимых экранах цвета будут ярче и насыщеннее.
Ещё один тренд — переменные темы на основе данных. Например, сайт погоды может менять палитру в зависимости от прогноза: голубой при ясной погоде, серый при дожде. Или новостной портал — использовать цвет события (красный для ЧП, зелёный для успехов).
Технически это реализуется через JavaScript:

const theme = weather === 'sunny' ? 'warm' : 'cool';
document.documentElement.className = theme;

Или через CSS Custom Media:

@custom-media --weather-sunny (env(weather) = "sunny");
@media (--weather-sunny) {
 :root { --color-sky: #87ceeb; }
}

Такие решения пока экспериментальны, но демонстрируют направление: цвет становится живым, реактивным элементом интерфейса.

Полезно знать: Используйте prefers-contrast и prefers-reduced-motion для дополнительной адаптации. Например, при высоком контрасте можно заменить цветные иконки на монохромные.

Экспертное мнение

«Цветовая палитра — это не дизайн-решение, а инженерная задача. Я видел, как из-за неправильно организованных цветов проект терял месяцы на рефакторинг. Сегодня лучшая практика — дизайн-токены + CSS-переменные + автоматическая проверка контраста. Инвестируйте в это с самого начала.» — Дмитрий Ковалёв, Principal Frontend Architect, Яндекс

По его словам, одна из частых ошибок — попытка «схитрить» и использовать SASS-миксины для генерации оттенков. Да, можно написать lighten($color, 10%), но такие значения не синхронизируются с дизайном. Лучше заранее договориться о шкале и зафиксировать её в токенах.
Ещё один пример — компания Tinkoff, которая внедрила единую систему цветов через дизайн-токены. Это позволило им быстро запускать новые продукты (Tinkoff Invest, Tinkoff Travel) с сохранением бренда и сократило время на согласование с дизайнерами на 40%.

Вопросы и ответы

Какой формат цвета лучше использовать в 2026 году?
На данный момент оптимальный выбор — HSL для разработки и HEX для дизайна. HSL позволяет легко манипулировать цветами в коде, а HEX остаётся стандартом обмена между дизайнерами и разработчиками. Для новых проектов можно пробовать HWB, но с оглядкой на поддержку.
Можно ли использовать переменные CSS в Internet Explorer?
Нет, IE не поддерживает CSS-переменные. Если поддержка IE обязательна, используйте PostCSS с плагином postcss-custom-properties, который преобразует переменные в статические значения. Однако, по данным StatCounter, доля IE в 2026 году менее 0.1%, поэтому большинство команд уже отказались от поддержки.
Как автоматизировать проверку цветовой палитры?
Используйте комбинацию инструментов: Stylelint с плагином stylelint-color-format, axe-core для контраста, и GitHub Actions для запуска проверок при каждом коммите. Также можно интегрировать Percy или Chromatic для визуального тестирования цветов в разных темах.
Что делать, если дизайнер задаёт цвета в Pantone, а не в HEX?
Запросите таблицу соответствия Pantone → sRGB у дизайн-лида или используйте официальные конвертеры Pantone. Важно понимать, что печатные и цифровые цвета — разные среды, и точного совпадения не будет. Договоритесь о допустимом отклонении (ΔE < 5).
Нужно ли использовать цветовые пространства beyond sRGB?
Да, если ваш продукт ориентирован на премиум-сегмент с современными устройствами (iPhone, iPad Pro, MacBook). P3 и Rec.2020 позволяют передавать более насыщенные цвета. Но всегда предусматривайте fallback на sRGB для старых экранов.

Заключение

Цветовая палитра в коде — это не просто набор HEX-значений. Это система, требующая продуманной архитектуры, интеграции с дизайн-процессом и соблюдения стандартов доступности. От того, насколько грамотно она организована, зависит скорость разработки, качество продукта и удовлетворённость пользователей.
Современный подход сочетает CSS-переменные, дизайн-токены и автоматизацию. Он позволяет масштабироваться, поддерживать темы, обеспечивать доступность и быстро адаптироваться под бренд. При этом важно помнить: цвет — это не только техника, но и психология. Правильный выбор оттенков может повысить доверие, вовлечённость и конверсию.

Успешная цветовая стратегия в коде строится на трёх китах: стандартизации (токены), доступности (контраст) и адаптивности (темы, устройства).
  • Используйте HSL для динамических палитр и HEX для статических значений
  • Централизуйте цвета через CSS-переменные и дизайн-токены
  • Обеспечьте контраст не ниже 4.5:1 для текста
  • Автоматизируйте проверку цветов в CI/CD
  • Учитывайте широкие цветовые пространства (P3) для современных устройств
⚠️ Дисклеймер — нажмите, чтобы развернуть

Материалы, опубликованные в разделе «Блог» на сайте RU DESIGN SHOP (rudesignshop.ru), носят исключительно информационный и ознакомительный характер и не являются руководством к действию, финансовой рекомендацией, медицинской услугой, ветеринарным назначением либо рекламой товаров и услуг, включая азартные игры. Публикации не содержат призывов к участию в азартных играх и не направлены на продвижение соответствующих операторов.

Безопасность применения товаров и веществ: при использовании строительных материалов, бытовой химии, пестицидов и агрохимикатов необходимо строго следовать инструкциям производителя и действующему законодательству Российской Федерации, включая Федеральный закон РФ от 19.07.1997 № 109-ФЗ «О безопасном обращении с пестицидами и агрохимикатами».

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

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

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

Правовая ответственность: решения, принятые на основе опубликованной информации, пользователь принимает самостоятельно и на свой риск; редакция и авторы несут ответственность в пределах, установленных законодательством Российской Федерации.

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

Упоминание организаций с ограниченным статусом: компания Meta Platforms Inc. (социальные сети Facebook и Instagram) признана экстремистской организацией решением суда РФ, её деятельность запрещена на территории Российской Федерации; любые упоминания приводятся исключительно в информационных целях.

Авторские права и источники: информация собирается из открытых источников; её актуальность указывается на дату публикации и может изменяться.

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

Персональные данные и cookies: сайт использует cookies и обрабатывает персональные данные пользователей в соответствии с Федеральным законом № 152-ФЗ «О персональных данных» и Политикой конфиденциальности RU DESIGN SHOP.

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

 

Ещё больше полезных материалов

Все статьи блога →