01

Один цвет в трёх полезных форматах

Индиго Аврора можно записать как #4F46E5, rgb(79 70 229) или приблизительно hsl(243 75% 59%). Браузер приводит каждое объявление к цвету sRGB. При округлённых значениях HSL результат после обратного преобразования иногда отличается на единицу в одном из каналов; дополнительная точность почти всегда устраняет это расхождение.

css
.sample {
  color: #4F46E5;
  color: rgb(79 70 229);
  color: hsl(243.4 75.4% 58.6%);
}
02

Как шестизначный HEX превращается в RGB

Шестизначный HEX состоит из трёх двузначных шестнадцатеричных чисел в порядке #RRGGBB. Каждая пара меняется от 00 до FF, то есть от 0 до 255 в десятичной системе. В #4F46E5 пара 4F даёт 79 красного, 46 — 70 зелёного, а E5 — 229 синего.

  • RR управляет красным каналом sRGB.
  • GG управляет зелёным каналом sRGB.
  • BB управляет синим каналом sRGB.
  • Необязательная четвёртая пара в #RRGGBBAA задаёт альфа-канал.

Трёхзначный HEX работает только тогда, когда в каждой полной паре повторяется одна цифра: #4AE раскрывается в #44AAEE. Он не может выразить любой шестизначный цвет, поэтому у #4F46E5 нет точного трёхзначного сокращения.

03

Когда RGB понятнее всего

Современный синтаксис rgb() напрямую показывает красный, зелёный и синий каналы. Целые значения обычно лежат в диапазоне 0–255, процентные — 0–100%. Косая черта добавляет альфа-канал без отдельной функции rgba().

css
.solid {
  background: rgb(79 70 229);
}

.translucent {
  background: rgb(79 70 229 / 60%);
}
  • Используйте RGB, когда каналы приходят из изображения, API или инструмента с байтовыми значениями.
  • Используйте запись через косую черту, когда прозрачность относится к цвету, а не ко всему элементу.
  • Придерживайтесь одного числового формата внутри компонента, чтобы код было проще проверять.
04

Что упрощает HSL — и чего он не делает

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

  • Тон 0° соответствует красному, 120° — зелёному sRGB, 240° — синему sRGB.
  • Насыщенность 0% даёт ахроматический серый; 100% задаёт максимальную насыщенность модели HSL для выбранных тона и светлоты.
  • Светлота 0% даёт чёрный, 50% — середину модели HSL, 100% — белый.
05

Почему значения после конвертации иногда расходятся

Преобразование RGB в HSL обычно даёт дробные числа. Если инструмент округляет тон, насыщенность и светлоту для показа, обратное преобразование округлённых значений может слегка изменить один или несколько каналов. Это вопрос точности, а не признак того, что один формат содержит больше цветов.

  • Сохраняйте исходный HEX или RGB как каноническое значение, если важны точные байты sRGB.
  • Во время расчётов оставляйте дробные значения HSL и округляйте только для отображения.
  • При проверке равенства сравнивайте итоговые каналы, а не строки.
  • Не преобразовывайте и не перезаписывайте исходное значение много раз подряд.
06

Какой формат выбрать

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

  • Выбирайте HEX для компактных стабильных токенов sRGB и значений из распространённых дизайн-инструментов.
  • Выбирайте RGB для явных каналов, вычислений и читаемых значений альфа-канала.
  • Выбирайте HSL для ручного поворота тона и простого управления насыщенностью и светлотой.
  • Выбирайте OKLCH вместо HSL для визуально равномерных шагов палитры.
  • Используйте CSS custom properties, чтобы компоненты получали семантические токены, а не повторяли сырые значения.
css
:root {
  --color-brand: #4F46E5;
  --color-brand-muted: rgb(79 70 229 / 60%);
}

.button {
  color: white;
  background: var(--color-brand);
}
07

Чек-лист преобразования

  • Убедитесь, что исходная и конечная записи должны описывать sRGB.
  • Сохраняйте альфа-канал отдельно и проверяйте, записан ли он процентом или числом от 0 до 1.
  • Оставляйте достаточно знаков после запятой для обратных преобразований.
  • Проверяйте контраст текста на итоговом фоне: сама запись ничего не говорит о доступности.
  • Храните одно каноническое значение, а остальные форматы вычисляйте из него.

Color Atlas следует последнему правилу: PostgreSQL хранит проверенный канонический HEX, а SSR-страница детерминированно рассчитывает RGB, HSL, HWB, яркость, контраст и связанные цвета.

S

Первоисточники

Фактические утверждения статьи проверены по этим опубликованным спецификациям.

  1. W3C CSS Color Module Level 4 — sRGB и rgb()
  2. W3C CSS Color Module Level 4 — запись HEX
  3. W3C CSS Color Module Level 4 — HSL