← Назад к вопросам

Зачем нужно несколько нотаций цветов в CSS?

1.0 Junior🔥 201 комментариев
#HTML и CSS

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Несколько нотаций цветов в CSS: зачем нужны

CSS предлагает множество способов задавать цвета: hex, rgb, hsl, названия цветов и новый цветной формат css color(). Это не просто излишество - каждый имеет конкретные преимущества.

Основные форматы цветов

/* HEX - наиболее компактный */
color: #FF5733;     /* 6 цифр */
color: #F57;        /* 3 цифры - краткая форма */

/* RGB - для понимания смешивания цветов */
color: rgb(255, 87, 51);      /* функциональная нотация */
color: rgba(255, 87, 51, 0.5); /* с прозрачностью */

/* HSL - для интуитивного подбора цветов */
color: hsl(9, 100%, 60%);      /* Hue 0-360, Saturation 0-100%, Lightness 0-100% */
color: hsla(9, 100%, 60%, 0.5);

/* Названия цветов */
color: red;
color: transparent;

/* Новый современный CSS Color Module */
color: color(srgb 1 0.34 0.2);
color: lch(50% 100 30);

HEX формат - стандарт веб-дизайна

Преимущества:

  • Компактный (6 символов или 3 для краткой формы)
  • Идеален для копирования из фотошопа/фигмы
  • Легче читать при быстром сканировании кода
  • Максимально поддерживается везде
#FF5733  /* Красный */
#F57     /* То же, но краткая форма */

/* С альфа-каналом (новое в современных браузерах) */
#FF573380 /* 8 символов с прозрачностью */

RGB - для вычислений и алгоритмов

Когда использовать:

  • Когда нужны вычисления: darken, lighten
  • Смешивание цветов
  • Анимация цветов
  • Генерация цветов программно
function lightenColor(r, g, b, amount) {
  return {
    r: Math.min(r + amount, 255),
    g: Math.min(g + amount, 255),
    b: Math.min(b + amount, 255)
  };
}

const darkRed = { r: 200, g: 0, b: 0 };
const lighter = lightenColor(darkRed.r, darkRed.g, darkRed.b, 50);

const css = `rgb(${lighter.r}, ${lighter.g}, ${lighter.b})`;

С rgba легко добавить прозрачность:

background: rgba(255, 87, 51, 0.5); /* 50% прозрачности */

HSL - для дизайна и палитр

Самый интуитивный для дизайнеров:

  • H (Hue) - 0-360 градусов цветового круга
  • S (Saturation) - 0-100% насыщенность
  • L (Lightness) - 0-100% яркость
/* Создавать оттенки одного цвета очень просто */
hsl(9, 100%, 30%)  /* Тёмный апельсин */
hsl(9, 100%, 50%)  /* Апельсин */
hsl(9, 100%, 70%)  /* Светлый апельсин */

/* Это намного проще чем с HEX:
FF571A
FF6B2C
FF7F3D
*/

Практический пример: создание цветовой палитры

:root {
  --primary-hue: 220;
  --primary-saturation: 95%;
  
  --primary-900: hsl(var(--primary-hue), var(--primary-saturation), 20%);
  --primary-700: hsl(var(--primary-hue), var(--primary-saturation), 40%);
  --primary-500: hsl(var(--primary-hue), var(--primary-saturation), 60%);
  --primary-300: hsl(var(--primary-hue), var(--primary-saturation), 80%);
  --primary-100: hsl(var(--primary-hue), var(--primary-saturation), 95%);
}

button {
  background: var(--primary-500);
}

button:hover {
  background: var(--primary-700);
}

Променяйте только hue и saturation - вся палитра пересчитается автоматически!

Названия цветов - для простоты

color: red;        /* Просто и понятно */
color: #FF0000;    /* То же самое, но менее читаемо */
color: rgb(255, 0, 0);
color: hsl(0, 100%, 50%);

Лучше использовать названия только для базовых цветов (white, black, transparent) или стандартных (blue, green). Для точных цветов лучше hex или hsl.

Новые форматы: CSS Color Module Level 4

Современные браузеры поддерживают новые форматы с лучшей точностью:

/* LCH - более точный, чем HSL */
color: lch(50% 100 30);

/* OKLAB - улучшенная версия LAB */
color: oklab(0.5 0.1 0.1);

/* Поддержка색온도 */
color: hwb(194 0% 0%); /* Hue, Whiteness, Blackness */

Когда какой формат использовать

/* HEX - основное решение */
button { background: #FF5733; }

/* RGB - при нужде в прозрачности или вычислениях */
.overlay { background: rgba(0, 0, 0, 0.5); }

/* HSL - для создания вариаций цветов */
:root { --primary: 220 95% 60%; }
button { background: hsl(var(--primary)); }

/* Названия - только для базовых цветов */
body { background: white; }
.hidden { display: none; color: transparent; }

Практический совет: CSS переменные с разными форматами

:root {
  /* Основной цвет в HSL для вариаций */
  --color-primary-h: 220;
  --color-primary-s: 95%;
  --color-primary-l: 60%;
  --color-primary: hsl(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l));
  
  /* Акцентные цвета в HEX */
  --color-success: #10B981;
  --color-error: #EF4444;
  --color-warning: #F59E0B;
  
  /* Полупрозрачные версии в RGBA */
  --color-overlay: rgba(0, 0, 0, 0.5);
}

Вывод

Множество форматов цветов в CSS - это не прихоть, а признание того, что разные сценарии требуют разных подходов:

  • HEX для точных цветов из дизайна
  • RGB для вычислений и анимаций
  • HSL для создания палитр и вариаций
  • Названия только для базовых, стандартных цветов

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