Главная / Изображения и графика / Генератор CSS-цвета
CSS-графика

Цветовое значение CSS для веб-элемента

Получите значение цвета в формате, подходящем для CSS.

Палитра
для веб-стилей

Подберите оттенок и получите готовое CSS-объявление для оформления элемента.

Цвет
Формат
CSS

Соберите CSS-цвет

Настройте оттенок, прозрачность и CSS-свойство — получите готовое объявление для стилей.

Результат
—
После генерации здесь появится CSS-объявление.

Точное цветовое значение CSS для веб-элемента позволяет однозначно задать оттенок и прозрачность компонентов при верстке документов HTML. Генератор цвета Qivrora преобразует выбранные пользователем параметры оттенка в готовый для вставки синтаксический код. Инструмент автоматически рассчитывает координаты каналов и формирует строковое представление в соответствии со спецификациями таблиц стилей. Разработчик сразу получает валидную строку для подстановки в правила оформления.

За визуальное восприятие интерфейса в таблицах стилей отвечает базовый тип данных <color>. Он управляет заливкой фона, начертанием текста, контурами рамок, тенями и векторной графикой.

Любая синтаксическая ошибка при ручном написании кода приводит к тому, что браузер полностью игнорирует объявленное свойство. Автоматическая генерация исключает опечатки в шестнадцатеричных символах, пропущенные скобки или неверные единицы измерения. На вход подаются координаты цветового тона, насыщенности, светлоты и уровня альфа-канала, которые задаются визуально или через числовые поля. На выходе формируется точное выражение для прямой интеграции в селекторы или переменные таблицы стилей.

Генератор CSS-цвета

Форматы и синтаксис записи цвета в CSS

В стандартном пространстве sRGB тип данных <color> записывается через шестнадцатеричные коды или математические функции. Все эти варианты кодируют одну и ту же точку в цветовом пространстве, но отличаются способом представления координат и удобством чтения кода разработчиком.

Структура шестнадцатеричной нотации HEX

Запись в формате HEX начинается с символа решетки и состоит из символов шестнадцатеричной системы счисления от 0 до 9 и латинских букв от A до F . Регистр букв не влияет на итоговый оттенок. Каждая пара символов последовательно задает интенсивность трех базовых каналов в диапазоне от 00 (минимум, что соответствует десятичному нулю) до FF (максимум, равный 255 в десятичной системе).

В зависимости от повторяемости символов и наличия данных о прозрачности применяются четыре синтаксические схемы записи шестнадцатеричного кода:

  • Полная запись из шести символов по маске #RRGGBB . Первые два знака после решетки определяют долю первого канала, средние два - второго, последние два - третьего. Например, строка #1A8CFF задает точное значение без прозрачности.
  • Сокращенная трехсимвольная форма #RGB . Допустима только в тех случаях, когда оба знака в каждой из трех пар полностью совпадают. Браузер при чтении кода дублирует каждый символ: запись #F0C интерпретируется точно так же, как #FF00CC .
  • Восьмисимвольный формат с прозрачностью #RRGGBBAA . К стандартному шестизначному коду в конце добавляется пара шестнадцатеричных символов AA , управляющая альфа-каналом. Значение 00 делает элемент полностью невидимым, 80 задает половинную плотность (около 50%), а FF соответствует полной непрозрачности.
  • Четырехсимвольная сокращенная запись с альфа-каналом #RGBA . Работает по принципу удвоения каждого знака, если все четыре пары исходного восьмизначного кода состоят из одинаковых символов. Короткая строка #0F08 разворачивается при рендеринге в полный вид #00FF0088 .

Функциональные нотации для моделей RGB и HSL

Помимо компактных шестнадцатеричных строк, спецификации таблиц стилей поддерживают функциональную нотацию. Параметры передаются в круглых скобках после имени выбранной модели: rgb() или hsl() . В ранних редакциях стандарта для передачи прозрачности требовалось вызывать отдельные функции с суффиксом альфа-канала - rgba() и hsla() .

В действующем стандарте функции rgb() и rgba() , равно как hsl() и hsla() , стали полными синонимами. Базовые функции без суффикса a теперь напрямую принимают четвертый необязательный аргумент прозрачности, а старые имена сохранены в движках браузеров для обратной совместимости с ранее написанным кодом.

Синтаксис записи аргументов внутри скобок разделился на два стандарта: классический через запятую (comma syntax) и современный через пробел (modern space syntax). Смешивать оба подхода внутри одного выражения запрещено - браузер сочтет такое правило невалидным и отбросит его при обработке стилей.

Отличия между классическим и современным синтаксисом функциональной записи в пространстве sRGB представлены в сравнительной таблице:

Характеристика записи Классический синтаксис (comma syntax) Современный синтаксис (modern space syntax)
Разделитель цветовых координат Запятая между каждым из трех параметров Одиночный пробел между координатами
Передача альфа-канала Через третью запятую четвертым аргументом Через символ косой черты (слэш) после третьей координаты
Примеры валидного кода для RGB rgb(26, 140, 255) или rgba(26, 140, 255, 0.75) rgb(26 140 255) или rgb(26 140 255 / 75%)
Примеры валидного кода для HSL hsl(210, 100%, 55%) или hsla(210, 100%, 55%, 0.75) hsl(210deg 100% 55%) или hsl(210 100% 55% / 0.75)

Допустимые типы данных и единицы измерения параметров

Каждая функция предъявляет строгие требования к типам данных передаваемых аргументов: они могут быть записаны как числа <number> , проценты <percentage> или угловые величины <angle> . Несоблюдение размерности (например, пропуск знака процента там, где он обязателен по спецификации) делает все свойство нерабочим.

В функции rgb() интенсивность трех цветовых каналов задается либо целыми и дробными числами <number> в интервале от 0 до 255 , либо в процентах <percentage> от 0% до 100% . В классическом синтаксисе с запятыми комбинировать числа и проценты в одной функции нельзя: запись вида rgb(255, 50%, 0) вызовет ошибку чтения стиля.

Функция hsl() требует разных единиц измерения для своих трех координат. Первым аргументом идет цветовой тон, который принимает тип данных <angle> или безразмерное число <number> . Если единица измерения не указана, значение по умолчанию считывается как градусы. Вторая и третья координаты (насыщенность и светлота) всегда записываются строго в формате <percentage> от 0% до 100% . Даже при нулевом значении опускать знак % у второго и третьего параметров в hsl() запрещено.

Для точного задания угла цветового тона в модели HSL допускаются четыре стандартные единицы измерения типа <angle> :

  • Градусы ( deg ). Полный круг составляет 360deg . Это базовая единица, при которой запись hsl(180deg 50% 50%) полностью идентична записи без суффикса hsl(180 50% 50%) .
  • Градианы ( grad ). В полной окружности содержится 400grad , а прямой угол равен ровно 100grad . Половина цветового круга записывается как 200grad .
  • Радианы ( rad ). Полный оборот равен удвоенному числу пи (приблизительно 6.2832rad ). Половина круга (180 градусов) соответствует значению около 3.1416rad .
  • Обороты ( turn ). Единица отражает долю от полного витка окружности, где весь круг равен 1turn . Четверть круга (90 градусов) удобно передавать как 0.25turn , а половину - как 0.5turn .

Значение прозрачности в функциональных нотациях (после запятой или после слэша) поддерживает как тип <number> в диапазоне от 0 (полная прозрачность) до 1 (полная плотность цвета), так и <percentage> от 0% до 100% . Например, выражения / 0.4 и / 40% дают одинаковый визуальный результат при отрисовке элемента на странице.

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

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

Аддитивное смешение каналов в модели RGB

Модель RGB опирается на физический принцип аддитивного синтеза, то есть сложения световых потоков. Исходной точкой в этой системе служит абсолютная темнота (отсутствие свечения субпикселей экрана), а итоговый оттенок формируется путем комбинирования трех базовых цветовых каналов: красного (Red), зеленого (Green) и синего (Blue).

Интенсивность каждого канала в 8-битном представлении задается в диапазоне от 0 до 255 (или от 0% до 100%). Математически координаты модели можно представить как трехмерный куб, где по осям отложены значения трех первичных цветов. Базовые комбинации каналов дают следующие результаты:

  • Нулевая интенсивность всех трех компонентов rgb(0 0 0) формирует черный цвет.
  • Максимальное свечение всех каналов rgb(255 255 255) при сложении дает чистый белый цвет.
  • Равные ненулевые значения всех трех аргументов, например rgb(128 128 128) , образуют нейтральные оттенки серого (ахроматическую шкалу), так как ни один из цветовых тонов не доминирует.
  • Попарное смешение двух каналов на максимальной мощности при нулевом третьем дает вторичные цвета: красный и зеленый образуют желтый rgb(255 255 0) , зеленый и синий складываются в голубой или циан rgb(0 255 255) , а красный и синий формируют пурпурный или мадженту rgb(255 0 255) .

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

Цилиндрическая система координат HSL

Для более интуитивной работы с оттенками в таблицах стилей применяется модель HSL, которая переводит декартовы координаты куба RGB в биконическую или цилиндрическую систему. Здесь цвет разделяется на три независимые характеристики: цветовой тон (Hue), насыщенность (Saturation) и светлоту (Lightness).

Первый параметр - цветовой тон (Hue) - определяет положение базового чистого оттенка на замкнутом цветовом круге и задается углом от 0 до 360 градусов. Поскольку окружность непрерывна, значения 0deg и 360deg совпадают, а при передаче величин больше 360 или отрицательных чисел вычисляется остаток от деления по модулю 360 (например, -60deg соответствует 300deg ). Опорные точки цветового круга распределены с шагом в 60 градусов:

  • 0deg (или 360deg ) - красный (Red);
  • 60deg - желтый (Yellow);
  • 120deg - зеленый (Green);
  • 180deg - голубой (Cyan);
  • 240deg - синий (Blue);
  • 300deg - пурпурный (Magenta).

Второй параметр - насыщенность (Saturation) - отвечает за чистоту и интенсивность тона, измеряясь по радиусу от центральной оси цилиндра к его внешним стенкам в диапазоне от 0% до 100% . При значении 100% цвет обладает максимальной хроматической чистотой и не содержит примесей серого. По мере снижения насыщенности оттенок тускнеет, а при 0% полностью теряет цветность, превращаясь в ахроматический серый независимо от того, какой угол задан для Hue.

Третий параметр - светлота (Lightness) - определяет вертикальную координату вдоль центральной оси от 0% до 100% . Особенность шкалы светлоты в HSL заключается в том, что чистый, неразбавленный цвет достигается строго посередине - при значении 50% . Смещение параметра вниз от 50% к 0% эквивалентно добавлению черной краски: при 0% любой оттенок становится абсолютно черным. Движение вверх от 50% к 100% имитирует разбавление белым: при 100% цвет вырождается в абсолютно белый при любых значениях тона и насыщенности.

Разница между светлотой, яркостью и относительной яркостью

При переносе цветовых значений из графических редакторов в код часто возникает путаница между параметром Lightness в CSS и другими метриками светлоты. В таблице ниже приведены ключевые различия между этими параметрами.

Параметр Где используется Математический и визуальный смысл
Lightness (L) Модель HSL в CSS Определяет баланс между черным (0%) и белым (100%). Чистый спектральный цвет находится на отметке 50%, а при 100% любой тон становится чисто белым.
Brightness (B) / Value (V) Палитры HSB / HSV в графических редакторах Отражает степень освещенности цвета от черного (0%) до максимального свечения самого тона (100%). Чистый цвет достигается при V=100% и S=100%, а белый получается только при сбросе насыщенности до S=0% при V=100%.
Luminance (Y) Фотометрия и расчеты визуального восприятия Относительная яркость, учитывающая физиологию человеческого глаза. В отличие от геометрической светлоты L, учитывает, что при одинаковой координате Lightness=50% чистый желтый цвет воспринимается глазом в несколько раз светлее, чем чистый синий.

Из-за разницы между формулами HSL и HSB нельзя напрямую копировать проценты из пипетки графического редактора, работающего в режиме HSB, в CSS-функцию hsl() : цвет с координатами HSB (200, 100%, 100%) в записи hsl(200 100% 100%) превратится из ярко-голубого в обычный белый.

Механика работы альфа-канала и отличие от свойства opacity

Четвертый параметр в цветовых моделях - альфа-канал (Alpha) - управляет степенью непрозрачности самого цвета при наложении одного графического слоя на другой (альфа-композитинге). Значение 0 (или 0% , либо 00 в HEX) делает цвет полностью прозрачным, пропуская 100% фона под ним. Значение 1 (или 100% , либо FF в HEX) означает полную плотность (непрозрачность), при которой нижележащий слой полностью перекрывается. Промежуточные коэффициенты задают пропорцию смешивания: при альфа-канале 0.75 итоговый пиксель на экране формируется на 75% из заданного цвета и на 25% из цвета фона под элементом.

В верстке полупрозрачность можно задать двумя способами: через альфа-канал внутри самого цветового значения (например, rgb(0 0 0 / 50%) ) или через отдельное CSS-свойство opacity: 0.5 . Несмотря на внешнюю схожесть, эти подходы работают на разных уровнях рендеринга:

  • Локальное действие альфа-канала цвета. Передача прозрачности через цветовое значение затрагивает исключительно то CSS-свойство, к которому этот код применен. Если задать блоку фон rgb(0 0 0 / 50%) , полупрозрачной станет только заливка подложки, тогда как текст, рамки, тени и дочерние изображения внутри этого блока сохранят 100% плотности и четкости.
  • Глобальное действие свойства opacity . Свойство применяется ко всему HTML-элементу целиком и формирует для него отдельный контекст наложения. Браузер сначала отрисовывает блок со всем его содержимым и вложенными тегами, а затем делает полупрозрачным весь полученный слой. В результате тускнеет и фон, и текст, и иконки. При этом вернуть дочернему элементу полную плотность путем указания opacity: 1 внутри родителя с opacity: 0.5 невозможно.

Для создания читаемых плашек поверх фотографий, полупрозрачных рамок или мягких теней используется именно альфа-канал внутри цветового кода. Свойство opacity применяется в тех случаях, когда требуется равномерно приглушить весь интерфейсный узел целиком (например, при отображении неактивной кнопки или плавной анимации появления модального окна).

Современные цветовые пространства и спецификация CSS Color Module Level 4

Долгое время стандарты W3C, включая спецификацию CSS Color Module Level 3, ограничивали веб-разработку пространством sRGB. Эта модель создавалась в конце 1990-х годов под возможности тогдашних мониторов и охватывает лишь около 35% оттенков, различимых человеческим глазом. Современные дисплеи смартфонов, ноутбуков и профессиональных мониторов способны отображать гораздо более чистые, глубокие и насыщенные тона, которые математически невозможно закодировать в рамках классического цветового охвата (gamut) sRGB.

Спецификация CSS Color Module Level 4 сняла это ограничение, добавив поддержку широкого цветового охвата (Wide Gamut), аппаратно-независимых моделей и перцептивно равномерных пространств. Теперь в таблицах стилей можно напрямую обращаться к расширенным палитрам, а также управлять цветом с учетом особенностей человеческого зрения, а не только физики свечения пикселей.

Расширенные цветовые пространства и функция color()

Для выхода за пределы sRGB в CSS введена универсальная функциональная нотация color() . Она позволяет явно указать целевое цветовое пространство, за которым следуют числовые или процентные значения каналов (обычно от 0 до 1 или от 0% до 100%) и опциональный альфа-канал после слэша.

В веб-стандартах зафиксировано несколько ключевых пространств с широким и эталонным охватом:

  • display-p3 - пространство Display P3, разработанное для цифрового кино и ставшее стандартом для современных экранов Apple, флагманских смартфонов и OLED-матриц. Его цветовой охват примерно на 25-50% шире sRGB, что особенно заметно в области ярко-зеленых, пурпурных, неоново-оранжевых и алых оттенков.
  • a98-rgb (Adobe RGB) - профиль, ориентированный на профессиональную фотографию и полиграфию, обладающий расширенным диапазоном в сине-зеленом секторе спектра.
  • rec2020 - сверхширокое пространство стандарта телевидения высокой четкости UHDTV (REC.2020), покрывающее почти три четверти видимого спектра.
  • xyz , xyz-d50 и xyz-d65 - эталонная аппаратно-независимая математическая модель CIE 1931 XYZ, которая описывает весь спектр физически воспринимаемого человеком света и служит базовым связующим звеном при конвертации между любыми другими профилями.
  • srgb-linear - линейная версия sRGB без гамма-коррекции, применяемая в расчетах физически корректного освещения и трехмерной графики.

Синтаксис функции требует точного указания идентификатора профиля перед координатами каналов:

/* Ярко-зеленый цвет в пространстве Display P3 */
background-color: color(display-p3 0 1 0);

/* Полупрозрачный оттенок в пространстве REC.2020 */
border-color: color(rec2020 0.85 0.25 0.15 / 75%);

Модель HWB

Наряду с расширением цветового охвата, в стандарт добавлена функция hwb() , работающая внутри привычного пространства sRGB, но предлагающая альтернативный способ подбора оттенка. Название складывается из трех параметров: Hue (цветовой тон), Whiteness (белизна) и Blackness (чернота).

Такой подход повторяет смешивание красок на палитре художника: берется чистый спектральный тон (угол от 0 до 360 градусов), к которому добавляется определенный процент белой и черной краски. Если сумма параметров белизны и черноты достигает или превышает 100%, цвет полностью теряет насыщенность и превращается в оттенок серого (конкретная светлота серого определяется пропорцией между введенными долями белого и черного).

/* Чистый синий тон с добавлением 20% белого и 10% черного */
color: hwb(240deg 20% 10%);

Перцептуальная равномерность: CIELAB, LCH, OKLab и OKLCH

Главный недостаток цилиндрических моделей вроде HSL при проектировании интерфейсов заключается в их перцептуальной неравномерности. Математическая светлота в них не совпадает с тем, как яркость воспринимает человеческий глаз (воспринимаемой светлотой). Например, чистый желтый и чистый синий цвета в формате HSL имеют одинаковый показатель светлоты 50%, но визуально желтый кажется ослепительно светлым, а синий - темным. Если в дизайн-системе просто поменять цветовой тон у кнопки, сохранив остальные числа, контрастность текста на ней резко изменится.

Для решения этой задачи в CSS внедрены аппаратно-независимые перцептуально равномерные пространства. В них одинаковое изменение числового параметра вызывает одинаковое по силе визуальное изменение для наблюдателя, а цвета с равным показателем светлоты выглядят одинаково светлыми независимо от их оттенка. Эти модели делятся на две группы: исторический стандарт Международной комиссии по освещению (CIELAB и его цилиндрическая форма LCH) и современное скорректированное пространство OKLab (и его цилиндрическая форма OKLCH), в котором устранено искажение оттенка при изменении насыщенности в сине-фиолетовой области.

В этих функциях используются следующие оси координат:

  • Воспринимаемая светлота (Lightness, L ) - регулирует тон от абсолютно черного до белого с равномерным визуальным шагом.
  • Оси a и b (в lab() и oklab() ) - декартовы координаты противоположных цветов: ось a отвечает за баланс от зеленого (отрицательные числа) к красно-пурпурному (положительные), а ось b - от синего к желтому.
  • Хрома (Chroma, C в lch() и oklch() ) - чистота или концентрация цвета от полностью ахроматического серого (0) до максимально возможной интенсивности. В отличие от классической насыщенности, ограниченной порогом в 100%, хрома теоретически не имеет жесткого верхнего предела и позволяет выходить в широкий цветовой охват Display P3 и выше.
  • Цветовой тон (Hue, H ) - угол оттенка на перцептуальном цветовом круге от 0 до 360 градусов.

В таблице ниже приведены синтаксические правила и диапазоны значений для перцептивных функций CSS:

Функция CSS Параметр 1 (Светлота) Параметр 2 Параметр 3 Пример записи
lab() L : 0% - 100% (или 0 - 100 ) Ось a : обычно от -125 до 125 (или -100% - 100% ) Ось b : обычно от -125 до 125 (или -100% - 100% ) lab(65% 40 -20 / 90%)
lch() L : 0% - 100% (или 0 - 100 ) Хрома C : от 0 до 150 + ( 100% равно 150 ) Тон H : угол 0deg - 360deg lch(65% 55 280deg)
oklab() L : 0% - 100% (или 0 - 1 ) Ось a : от -0.4 до 0.4 (или -100% - 100% ) Ось b : от -0.4 до 0.4 (или -100% - 100% ) oklab(0.7 -0.1 0.15)
oklch() L : 0% - 100% (или 0 - 1 ) Хрома C : от 0 до 0.4 + ( 100% равно 0.4 ) Тон H : угол 0deg - 360deg oklch(70% 0.18 145deg / 50%)

Практическое применение модели OKLCH стало стандартом при создании предсказуемых палитр интерфейса. Если зафиксировать в oklch() светлоту на уровне 65% и хрому на 0.15 , то при вращении угла тона (например, для генерации статусных плашек ошибок, предупреждений и успешных действий) все полученные цвета будут иметь идентичную визуальную плотность и одинаковый уровень читаемости текста.

Динамическое преобразование и вычисление цветов в CSS

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

Смешивание цветов через color-mix()

Функция color-mix() принимает указание рабочего цветового пространства (с ключевым словом in ) и два исходных цвета с опциональными процентными долями их участия. То, как именно будут усредняться оттенки, напрямую зависит от выбранной модели интерполяции. Для цилиндрических пространств с углом тона (таких как lch или oklch ) можно дополнительно указать направление обхода круга: по кратчайшей дуге ( shorter hue , по умолчанию), по длинной дуге ( longer hue ), по возрастанию угла ( increasing hue ) или по убыванию ( decreasing hue ).

/* Смешивание синего и желтого в пространстве OKLab в пропорции 40% на 60% */
background-color: color-mix(in oklab, #0055ff 40%, #ffcc00 60%);

/* Смешивание с выбором длинного пути по цветовому кругу в OKLCH */
background-color: color-mix(in oklch longer hue, oklch(70% 0.2 30deg), oklch(70% 0.2 250deg));

Синтаксис относительных цветов (Relative Color Syntax)

Механизм относительных цветов с ключевым словом from позволяет взять любое существующее цветовое значение, разложить его на каналы выбранного пространства, модифицировать нужные координаты (в том числе через математическую функцию calc() ) и собрать новый цвет. Исходный образец может быть задан в любом формате - браузер сам преобразует его в координаты целевой функции.

/* Осветление исходного HEX-цвета на 15% через пространство OKLCH */
background-color: oklch(from #3b82f6 calc(l + 0.15) c h);

/* Добавление прозрачности к базовому цвету с сохранением его RGB-каналов */
box-shadow: 0 4px 12px rgb(from #1e293b r g b / 25%);

/* Инверсия или сдвиг цветового тона на 180 градусов (комплементарный оттенок) */
border-color: lch(from #e11d48 l c calc(h + 180deg));

Адаптация к цветовой схеме через light-dark()

Функция light-dark() упрощает назначение оттенков для светлого и темного режимов оформления. Она принимает два цветовых аргумента: первый возвращается, если активна светлая тема, а второй - если пользователь или разработчик активировал темную схему (для корректного срабатывания у родительского элемента или корня документа должно быть задано свойство color-scheme: light dark ).

/* Автоматический выбор цвета фона: белый для светлой темы, темно-серый для темной */
background-color: light-dark(#ffffff, oklch(20% 0.02 250deg));

Именованные цвета и системные ключевые слова в таблицах стилей

Помимо числовых координат и функциональных выражений, спецификация CSS допускает передачу оттенков через текстовые строковые идентификаторы. При обработке таблицы стилей браузер сопоставляет такое ключевое слово с внутренней таблицей соответствия и преобразует его в точные координаты пространства sRGB. Все строковые идентификаторы в CSS нечувствительны к регистру: записи darkblue , DarkBlue и DARKBLUE интерпретируются совершенно одинаково, а пробелы, дефисы или символы подчеркивания внутри названий не допускаются.

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

Стандартные ключевые слова W3C и расширенная палитра X11

Набор именованных оттенков формировался поэтапно по мере развития веб-стандартов. Первоначальная спецификация CSS Level 1 включала всего 16 базовых цветов, заимствованных из стандартной 16-цветной палитры видеоадаптеров VGA. В редакции CSS Level 2.1 этот список пополнился оттенком orange , а начиная с CSS Color Module Level 3 в стандарт официально вошел полный спектр цветов оконной системы X11, который ранее поддерживался в SVG 1.0. В спецификации Level 4 был добавлен мемориальный оттенок rebeccapurple ( #663399 ), после чего общее количество уникальных цветовых имен достигло 148.

Ниже приведены основные и наиболее востребованные именованные оттенки из базового и расширенного списков W3C с их точными числовыми эквивалентами в пространстве sRGB.

Ключевое слово Код HEX Координаты RGB Категория и особенности восприятия
black #000000 rgb(0 0 0) Базовый ахроматический черный (нулевая интенсивность всех каналов)
white #ffffff rgb(255 255 255) Базовый ахроматический белый (максимальная интенсивность всех каналов)
red #ff0000 rgb(255 0 0) Чистый красный канал на максимальной яркости
green #008000 rgb(0 128 0) Темно-зеленый (половина яркости канала); чистый зеленый #00ff00 в CSS называется lime
blue #0000ff rgb(0 0 255) Чистый синий канал на максимальной яркости
yellow #ffff00 rgb(255 255 0) Вторичный тон, получаемый сложением красного и зеленого
cyan / aqua #00ffff rgb(0 255 255) Два взаимозаменяемых имени (синонима) для одного голубого оттенка
magenta / fuchsia #ff00ff rgb(255 0 255) Два взаимозаменяемых имени для пурпурного оттенка
gray / grey #808080 rgb(128 128 128) Средне-серый; в палитре X11 поддерживаются оба варианта написания (американский и британский)
orange #ffa500 rgb(255 165 0) Ярко-оранжевый тон, добавленный в стандарт CSS 2.1
purple #800080 rgb(128 0 128) Классический темно-фиолетовый из базовой шестнадцатицветной палитры
pink #ffc0cb rgb(255 192 203) Светло-розовый оттенок из расширенного набора X11
teal #008080 rgb(0 128 128) Темный сине-зеленый (приглушенный вариант cyan )
navy #000080 rgb(0 0 128) Глубокий темно-синий (половина интенсивности синего канала)

При работе с палитрой X11 важно учитывать историческую несогласованность некоторых названий с их фактической светлотой. Из-за того, что базовые цвета CSS 1 и таблица X11 разрабатывались независимо друг от друга, оттенок darkgray ( #a9a9a9 ) на практике оказывается заметно светлее стандартного gray ( #808080 ). Аналогичная особенность характерна для пар с американским и британским правописанием: darkgray и darkgrey , lightgray и lightgrey , darkslategray и darkslategrey попарно ссылаются на идентичные шестнадцатеричные коды.

Безопасная веб-палитра WEBSAFE

Палитра безопасных веб-цветов (WEBSAFE) сформировалась в эпоху дисплеев с глубиной цвета 8 бит, способных одновременно отображать не более 256 различных оттенков. Часть системного индекса забирала под свои нужды операционная система, а оставшиеся 216 оттенков были стандартизированы так, чтобы гарантированно выводиться на любых мониторах без дизеринга (принудительного смешения соседних пикселей разных тонов для имитации недостающего цвета).

Математическая структура палитры WEBSAFE строится на жестком шаге квантования. Каждый из трех каналов RGB может принимать только одно из шести фиксированных значений:

  • В шестнадцатеричной системе: 00 , 33 , 66 , 99 , CC , FF .
  • В десятичном представлении (диапазон 0-255): 0 , 51 , 102 , 153 , 204 , 255 .
  • В процентном выражении: 0% , 20% , 40% , 60% , 80% , 100% .

Комбинация шести вариантов по трем независимым каналам ($6 \times 6 \times 6$) дает ровно 216 цветов. Любой такой оттенок можно записать в сокращенном трехсимвольном формате HEX: например, #336699 эквивалентен #369 , а #cc00ff сворачивается до #c0f . На современных устройствах с поддержкой 24-битного цвета (TrueColor) и выше аппаратная необходимость в этой палитре отпала, но сама сетка из 216 значений до сих пор применяется для быстрого подбора контрастных базовых тонов и создания ретро-стилистики.

Специальные ключевые слова transparent и currentColor

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

Механика работы ключевого слова transparent

Идентификатор transparent задает полностью прозрачный цвет. Изначально в CSS Level 1 он допускался только для свойства фона, но в современных спецификациях является полноценным значением типа <color> и может передаваться в любые цветовые свойства (рамки, текст, тени, градиенты). Технически браузер вычисляет transparent как полностью прозрачный черный цвет в пространстве sRGB, что эквивалентно записи rgb(0 0 0 / 0%) или #00000000 .

Это внутреннее представление имеет прямое практическое значение при интерполяции цветов в пространстве sRGB (например, при плавных CSS-переходах transition ). Если задать переход от чистого белого цвета #ffffff к transparent , в промежуточной фазе анимации оттенок пройдет через грязно-серую полупрозрачную фазу, так как каналы RGB будут одновременно стремиться от 255 к 0 (черному), пока альфа-канал падает от 1 до 0 . Чтобы избежать появления темного ореола, вместо ключевого слова transparent в подобных переходах иногда явно указывают прозрачную версию целевого цвета: rgb(255 255 255 / 0%) .

/* Создание невидимой рамки, резервирующей место в блочной модели во избежание смещения контента при наведении */
button {
  border: 2px solid transparent;
}

button:hover {
  border-color: royalblue;
}

Контекстная переменная currentColor

Ключевое слово currentColor (регистр букв не имеет значения, допустима запись currentcolor ) исторически стало первой динамической переменной в CSS. Оно указывает браузеру взять текущее вычисленное значение свойства color данного элемента и подставить его в другое свойство, принимающее тип данных <color> (например, в цвет рамки, фона, контура или тени).

По умолчанию именно currentColor является начальным значением для свойств border-color , outline-color , text-decoration-color и column-rule-color . Если у элемента задан только color: seagreen , а для рамки написано border: 1px solid без указания оттенка, рамка автоматически станет темно-зеленой.

/* Автоматическая синхронизация цвета текста, рамки и встроенной иконки внутри интерактивного компонента */
.status-badge {
  color: crimson;
  border: 1px solid currentColor;
  background-color: oklch(from currentColor l c h / 10%);
}

Если ключевое слово currentColor присвоено самому свойству color (запись color: currentColor ), оно разрешается на этапе наследования как инструкция inherit , то есть элемент просто получает цвет текста своего родителя. В современных спецификациях currentColor также можно передавать внутрь функций color-mix() и относительного синтаксиса с ключевым словом from , что позволяет строить целые локальные палитры компонента от одного-единственного свойства текста.

Интеграция сгенерированного кода в CSS-свойства и архитектуру проекта

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

Базовые CSS-свойства и векторная графика

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

Основные свойства, принимающие цветовые значения при верстке компонентов, включают:

  • color - задает цвет текстового содержимого элемента и определяет контекстное значение для наследуемых декоративных линий.
  • background-color - заполняет сплошным цветом область фона внутри границ элемента, включая внутренние отступы.
  • border-color - окрашивает контурные рамки блока (может задаваться отдельно для каждой из четырех сторон или в составе краткой записи border ).
  • box-shadow - формирует внешнюю или внутреннюю тень блока, где цветовой код с альфа-каналом обычно указывается последним параметром после координат смещения, радиуса размытия и растяжения.
  • fill и stroke - управляют заливкой внутренних контуров и цветом обводки узлов векторной графики SVG (таких как path , circle , rect ).
/* Применение цветовых кодов к интерактивной карточке и встроенной иконке SVG */
.feature-card {
  color: #1e293b;
  background-color: #f8fafc;
  border: 1px solid #cbd5e1;
  box-shadow: 0 10px 15px -3px rgb(15 23 42 / 8%);
}

.feature-card svg path {
  fill: oklch(55% 0.22 260);
  stroke: #0f172a;
}

Построение линейных и повторяющихся градиентов

В отличие от сплошной заливки, градиенты генерируют растровое изображение на лету и подключаются через свойство background-image или универсальное свойство background . Цветовые коды здесь выступают в роли опорных точек (color stops), между которыми браузер вычисляет плавный цветовой переход или четкую границу.

Функция linear-gradient() распределяет оттенки вдоль прямой линии под заданным углом или по направлению к стороне блока. Функция repeating-linear-gradient() циклично размножает заданный отрезок с цветовыми точками по всей площади элемента, что применяется для создания полосатых фонов, индикаторов загрузки и диагональной штриховки.

/* Плавный трехцветный переход с указанием пространства интерполяции */
.hero-banner {
  background-image: linear-gradient(in oklch 135deg, #2563eb 0%, #7c3aed 50%, #db2777 100%);
}

/* Четкий полосатый паттерн за счет совпадения позиций соседних цветовых точек */
.hazard-stripe {
  background-image: repeating-linear-gradient(
    -45deg,
    #facc15 0px,
    #facc15 12px,
    #1e293b 12px,
    #1e293b 24px
  );
}

Организация палитры через CSS-переменные и дизайн-токены

Ручное дублирование одних и тех же кодов в десятках правил усложняет поддержку таблиц стилей. Для централизованного управления палитрой в нативном CSS используются кастомные свойства (CSS Custom Properties), которые объявляются с двойным дефисом и вызываются через функцию var() .

Глобальные переменные обычно размещают внутри псевдокласса :root , который соответствует корневому элементу html и делает значения доступными во всем документе. В крупных проектах переменные разделяют на два уровня абстракции: базовые примитивы (хранят сырой цветовой код) и семантические дизайн-токены (описывают роль цвета в интерфейсе и ссылаются на примитивы).

:root {
  /* Базовые цветовые примитивы палитры */
  --palette-blue-600: #2563eb;
  --palette-slate-900: #0f172a;
  --palette-slate-100: #f1f5f9;

  /* Семантические дизайн-токены интерфейса */
  --color-text-primary: var(--palette-slate-900);
  --color-surface-card: var(--palette-slate-100);
  --color-action-brand: var(--palette-blue-600);
}

.action-button {
  color: var(--color-surface-card);
  background-color: var(--color-action-brand);
}

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

:root {
  --brand-rgb: 37 99 235;
}

.alert-box {
  color: rgb(var(--brand-rgb));
  background-color: rgb(var(--brand-rgb) / 12%);
  border-color: rgb(var(--brand-rgb) / 40%);
}

Переключение цветовых тем через data-атрибуты

Поскольку кастомные свойства подчиняются стандартному каскаду CSS и изменяются в реальном времени, на их основе строят переключение между светлой, темной или контрастной темами оформления. Для этого на корневой тег html или body добавляют пользовательский атрибут, например data-theme .

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

/* Переопределение семантических токенов при активации темной темы */
[data-theme="dark"] {
  --color-text-primary: #f8fafc;
  --color-surface-card: #1e293b;
  --color-action-brand: #60a5fa;
}

Интеграция в препроцессоры и утилитарные фреймворки

В проектах со сборщиками полученные цветовые значения часто закладываются на этапе компиляции через препроцессоры SCSS и Less или в конфигурационные файлы утилитарных фреймворков вроде Tailwind CSS. Каждый подход имеет свои синтаксические особенности и область видимости.

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

Инструмент Синтаксис объявления Этап разрешения кода Поддержка динамической смены в браузере
CSS Custom Properties --color-main: #10b981; Во время выполнения в браузере Да, через каскад, медиазапросы и DOM-скрипты
Препроцессор SCSS $color-main: #10b981; На этапе сборки в статический CSS Нет (требует компиляции отдельных наборов правил)
Препроцессор Less @color-main: #10b981; На этапе сборки в статический CSS Нет (значения жестко подставляются в свойства)
Tailwind CSS Объект theme.extend.colors в конфиге Генерация атомарных классов при сборке Да, если значения привязаны к CSS-переменным

При использовании Tailwind CSS добавление пользовательского цвета в секцию theme.extend.colors конфигурационного файла создает набор готовых утилитарных классов для всех базовых свойств (например, text-brand , bg-brand , border-brand , fill-brand ). Чтобы сохранить возможность управления прозрачностью через модификаторы вроде bg-brand/50 при работе с CSS-переменными, в конфигурацию передают функцию с подстановкой ключевого слова <alpha-value> :

// Фрагмент файла tailwind.config.js
module.exports = {
  theme: {
    extend: {
      colors: {
        brand: 'rgb(var(--brand-rgb) / <alpha-value>)',
        surface: '#0f172a',
      }
    }
  }
}

Контрастность, доступность интерфейса и браузерная поддержка

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

Схемы цветовых сочетаний и распределение ролей в UI

Гармоничные палитры строятся по геометрическим соотношениям углов цветового тона. Использование математически выверенных схем позволяет избежать визуального шума при комбинировании нескольких оттенков на одном экране.

Цветовая схема Принцип построения на круге тонов Применение в элементах интерфейса
Монохромная Один базовый тон с изменением светлоты и насыщенности Фоновые подложки, карточки, бордюры, состояния наведения и нажатия для одного компонента
Аналогичная Соседние сектора, расположенные рядом друг с другом Градиентные заливки, иллюстрации, спокойные информационные дашборды без резких акцентов
Комплементарная Два противоположных оттенка, расположенных друг напротив друга Выделение главных кнопок целевого действия на фоне доминирующего фирменного цвета
Триадная Три равноудаленных тона, образующих равносторонний треугольник Разметка графиков, диаграмм, категорий товаров и статусных бейджей
Тетрадная Четыре тона, образующие прямоугольник (две комплементарные пары) Сложные многокомпонентные системы с кодированием множества разнородных типов данных

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

Требования стандарта WCAG к цветовому контрасту

Для обеспечения доступности веб-контента людям с нарушениями зрения и пользователям, просматривающим страницу при ярком внешнем освещении, используется стандарт WCAG. Он регламентирует коэффициент контрастности между цветом текста (передним планом) и цветом фона, вычисляемый на основе относительной яркости обоих значений.

Недостаточный контраст делает текстовую информацию нечитаемой и препятствует навигации по сайту. При выборе пары «текст - фон» в рамках проектирования интерфейса ориентируются на следующие критерии:

  • Базовый уровень доступности (AA) требует достаточного контрастного разрыва для основного массива текста и допускает небольшое снижение порога для крупного шрифта, заголовков, а также графических иконок и границ полей ввода.
  • Повышенный уровень доступности (AAA) предъявляет строгие требования к контрастности и применяется при разработке специализированных сервисов, государственных порталов и интерфейсов для длительного чтения.
  • Декоративные элементы, не несущие смысловой нагрузки, логотипы и заблокированные неактивные кнопки (состояние disabled) освобождаются от жестких ограничений по контрасту.
  • При наложении текста на полупрозрачную плашку или градиент проверка читаемости проводится по самому неблагоприятному участку фона, где разница в светлоте с буквами минимальна.

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

Проверка поддержки и организация фолбэков

Базовые форматы пространства sRGB поддерживаются всеми существующими браузерами. Однако функции расширенного цветового охвата, перцептивные модели и динамическое смешивание из современных спецификаций могут не распознаваться устаревшими версиями браузерных движков. Если парсер CSS встречает неизвестную функцию, он игнорирует всё объявление свойства целиком.

Чтобы интерфейс не терял стилизацию на старых устройствах, применяют механизм каскадных фолбэков (fallback). Перед объявлением современного цветового значения в том же блоке правил записывают аналогичное свойство в классическом формате HEX или RGB:

.action-button {
  background-color: #2563eb;
  background-color: oklch(0.55 0.22 260);
}

Браузер, не поддерживающий новую нотацию, применит первое значение и отбросит второе. Современный движок прочитает оба правила и переопределит базовый цвет более точным значением.

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

:root {
  --brand-primary: #e11d48;
  --brand-surface: #ffe4e6;
}

@supports (color: oklch(0 0 0)) and (color: color-mix(in oklch, red, blue)) {
  :root {
    --brand-primary: oklch(0.58 0.23 15);
    --brand-surface: color-mix(in oklch, var(--brand-primary) 15%, white);
  }
}

Когда цвета элементов формируются динамически на стороне клиента (например, при отрисовке графиков на холсте Canvas или генерации тем через скрипты), проверку совместимости выполняют с помощью JavaScript API CSS.supports() :

const supportsDisplayP3 = CSS.supports('color', 'color(display-p3 1 0 0)');
const chartStrokeColor = supportsDisplayP3 
  ? 'color(display-p3 0.12 0.85 0.45)' 
  : '#1fd973';

document.documentElement.style.setProperty('--chart-line', chartStrokeColor);

Помимо синтаксической поддержки браузером, отображение широких цветовых пространств зависит от физических возможностей экрана пользователя. Для проверки аппаратной поддержки монитора применяют медиазапрос color-gamut , который позволяет загружать насыщенные оттенки только на дисплеях, способных отобразить пространство шире стандартного sRGB:

.hero-banner {
  background-color: rgb(255 40 0);
}

@media (color-gamut: p3) {
  @supports (color: color(display-p3 1 0 0)) {
    .hero-banner {
      background-color: color(display-p3 1 0.15 0);
    }
  }
}

Нужен другой
инструмент для изображений?

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

Все инструменты для изображений