CSS поддерживает множество форматов цвета, от ключевых слов до современных пространств, где яркость ведёт себя предсказуемо для глаза.
Названия цветов
СкопированоНаписать название цвета по-английски это самый простой способ. CSS знает 140+ ключевых слов:
.selector { color: black; background-color: AntiqueWhite;}
.selector {
color: black;
background-color: AntiqueWhite;
}
Ключевые слова регистронезависимые, браузер одинаково поймёт Red, red и RED.
Палитра встроенных имён:
| IndianRed | LightCoral | Salmon | DarkSalmon |
| LightSalmon | Crimson | Red | FireBrick |
| DarkRed | Pink | LightPink | HotPink |
| DeepPink | MediumVioletRed | PaleVioletRed | Coral |
| Tomato | OrangeRed | DarkOrange | Orange |
| Gold | Yellow | LightYellow | LemonChiffon |
| LightGoldenrodYellow | PapayaWhip | Moccasin | PeachPuff |
| PaleGoldenrod | Khaki | DarkKhaki | Lavender |
| Thistle | Plum | Violet | Orchid |
| Fuchsia | Magenta | MediumOrchid | MediumPurple |
| RebeccaPurple | BlueViolet | DarkViolet | DarkOrchid |
| DarkMagenta | Purple | Indigo | SlateBlue |
| DarkSlateBlue | MediumSlateBlue | GreenYellow | Chartreuse |
| LawnGreen | Lime | LimeGreen | PaleGreen |
| LightGreen | MediumSpringGreen | SpringGreen | MediumSeaGreen |
| SeaGreen | ForestGreen | Green | DarkGreen |
| YellowGreen | OliveDrab | Olive | DarkOliveGreen |
| MediumAquamarine | DarkSeaGreen | LightSeaGreen | DarkCyan |
| Teal | Aqua | Cyan | LightCyan |
| PaleTurquoise | Aquamarine | Turquoise | MediumTurquoise |
| DarkTurquoise | CadetBlue | SteelBlue | LightSteelBlue |
| PowderBlue | LightBlue | SkyBlue | LightSkyBlue |
| DeepSkyBlue | DodgerBlue | CornflowerBlue | MediumSlateBlue |
| RoyalBlue | Blue | MediumBlue | DarkBlue |
| Navy | MidnightBlue | Cornsilk | BlanchedAlmond |
| Bisque | NavajoWhite | Wheat | BurlyWood |
| Tan | RosyBrown | SandyBrown | Goldenrod |
| DarkGoldenrod | Peru | Chocolate | SaddleBrown |
| Sienna | Brown | Maroon | White |
| Snow | HoneyDew | MintCream | Azure |
| AliceBlue | GhostWhite | WhiteSmoke | SeaShell |
| Beige | OldLace | FloralWhite | Ivory |
| AntiqueWhite | Linen | LavenderBlush | MistyRose |
| Gainsboro | LightGray | Silver | DarkGray |
| Gray | DimGray | LightSlateGray | SlateGray |
| DarkSlateGray | Black |
HEX
СкопированоШестнадцатеричная запись — самый распространённый формат в вебе. Начинается с # и кодирует красный, зелёный и синий каналы парами шестнадцатеричных символов:
.selector { color: #ff0000; /* чистый красный */ background-color: #FFF; /* сокращённая запись белого */ border-color: #00990055; /* зелёный с 33% прозрачностью */}
.selector {
color: #ff0000; /* чистый красный */
background-color: #FFF; /* сокращённая запись белого */
border-color: #00990055; /* зелёный с 33% прозрачностью */
}
Форматы записи:
#— полный вариант, напримерR R G G B B #ff6347(tomato)#— сокращённый, если каждая пара одинакова:R G B #f00=#ff0000#— с прозрачностью, AA отR R G G B B A A 00(полностью прозрачный) доff(непрозрачный)#— сокращённый с прозрачностью:R G B A #f008=rgb( 255 0 0 / 50 % )

Прозрачность в HEX неудобно считать в голове — 50% это 80, 25% это 40. Поэтому для полупрозрачных цветов проще использовать другие форматы.
RGB
Скопировано
Функция rgb принимает три значения каналов (красный, зелёный, синий) от 0 до 255 или в процентах. Прозрачность добавляется четвёртым параметром через слэш:
.element { color: rgb(255 0 0); /* красный */ color: rgb(0 63 255); /* синий */ color: rgb(0 63 255 / 0.5); /* полупрозрачный синий */ color: rgb(0 63 255 / 50%); /* то же самое в процентах */}
.element {
color: rgb(255 0 0); /* красный */
color: rgb(0 63 255); /* синий */
color: rgb(0 63 255 / 0.5); /* полупрозрачный синий */
color: rgb(0 63 255 / 50%); /* то же самое в процентах */
}
В старом коде встречается синтаксис с запятыми. Он работает, но считается устаревшим. Вместо rgba для прозрачности теперь просто добавляют слэш в rgb:
/* старый синтаксис */color: rgba(255, 0, 0, 0.5);/* современный */color: rgb(255 0 0 / 0.5);
/* старый синтаксис */
color: rgba(255, 0, 0, 0.5);
/* современный */
color: rgb(255 0 0 / 0.5);
HSL
СкопированоHSL описывает цвет через три параметра, более понятные человеку:
- H (Hue) — оттенок, угол на цветовом колесе от 0 до 360°
- S (Saturation) — насыщенность в процентах, 0% = серый
- L (Lightness) — светлота в процентах, 0% = чёрный, 100% = белый

.element { color: hsl(120 100% 50%); /* яркий зелёный */ color: hsl(120 100% 50% / 0.5); /* полупрозрачный */ color: hsl(0.5turn 100% 50%); /* то же, что 180deg */}
.element {
color: hsl(120 100% 50%); /* яркий зелёный */
color: hsl(120 100% 50% / 0.5); /* полупрозрачный */
color: hsl(0.5turn 100% 50%); /* то же, что 180deg */
}
Оттенок можно задавать в deg, turn, grad, rad. Чаще всего просто пишут число, браузер считает его градусами.
HSL удобен для ручного подбора цветов и создания тематических палитр через CSS-переменные:
:root { --hue: 220; --accent: hsl(var(--hue) 80% 55%); --accent-light: hsl(var(--hue) 80% 75%); --accent-dark: hsl(var(--hue) 80% 35%);}
:root {
--hue: 220;
--accent: hsl(var(--hue) 80% 55%);
--accent-light: hsl(var(--hue) 80% 75%);
--accent-dark: hsl(var(--hue) 80% 35%);
}
HWB
СкопированоHWB — ещё один способ описать цвет через оттенок плюс количество белого и чёрного:
- H (Hue) — оттенок, 0–360°
- W (Whiteness) — белизна, 0–100%
- B (Blackness) — чернота, 0–100%
.item { color: hwb(45 45% 20%); /* тёплый жёлто-оранжевый */ color: hwb(45 45% 20% / 0.6); /* с прозрачностью */}
.item {
color: hwb(45 45% 20%); /* тёплый жёлто-оранжевый */
color: hwb(45 45% 20% / 0.6); /* с прозрачностью */
}
Если W + B в сумме превышают 100%, браузер нормализует их автоматически.
Поиграть с HWB:
Цветовые пространства
СкопированоВсе форматы выше — RGB, HEX, HSL, HWB — работают в одном пространстве под названием sRGB. Это стандарт, который появился в конце 1990-х для мониторов и интернета, и он описывает лишь часть видимых человеком цветов.
Современные дисплеи, в том числе iPhone, Mac с Retina и большинство флагманских телефонов, поддерживают более широкий охват Display P3: он покрывает примерно на 35% больше цветов, чем sRGB. Особенно это заметно в ярких насыщенных зелёных, красных и пурпурных: на P3-экране они выглядят гораздо живее.
Второй важный вопрос — перцептуальная равномерность: насколько одинаковое изменение числа ощущается одинаковым на глаз. В HSL параметр L называется «светлотой», но он неточен: жёлтый и синий с одинаковым L выглядят по-разному ярко. Это делает создание сбалансированных палитр сложным: приходится вручную корректировать каждый цвет.
Современные форматы (oklch, oklab, lch, lab) решают обе проблемы:
- Они перцептуально равномерны: одинаковое изменение L даёт одинаково воспринимаемую разницу в яркости.
- Функция
colorс пространством( ) displayдаёт доступ к широкому охвату P3-экранов.- p3
Наглядно сравнить интерполяцию в разных пространствах и увидеть разницу в равномерности светлоты:
OKLab и OKLCh
СкопированоДва формата из одного пространства, они описывают одни и те же цвета, просто разными координатами. Оба работают во всех актуальных браузерах с мая 2023.
oklch(L C H)
СкопированоПолярные координаты: L — светлота (0–1), C — насыщенность (chroma, от 0 и выше, обычно до ~0.37), H — оттенок (0–360°). Рекомендуемый современный формат для большинства задач: интуитивный, удобен для палитр.
.element { color: oklch(0.7 0.2 160); /* зелёный */ color: oklch(0.7 0.2 160 / 0.8); /* полупрозрачный */ color: oklch(0 0 0); /* чёрный */ color: oklch(1 0 0); /* белый */}
.element {
color: oklch(0.7 0.2 160); /* зелёный */
color: oklch(0.7 0.2 160 / 0.8); /* полупрозрачный */
color: oklch(0 0 0); /* чёрный */
color: oklch(1 0 0); /* белый */
}
Главное преимущество: одинаковый L при любом оттенке — это одинаково воспринимаемая яркость. Это делает oklch идеальным для создания дизайн-токенов и тематических палитр.
oklab(L a b)
СкопированоПрямоугольные координаты того же пространства: a — ось зелёный/красный, b — ось синий/жёлтый. Удобен для интерполяции: в градиентах цвета плавно переходят без «серых провалов» посередине:
.gradient { background: linear-gradient( in oklab, oklch(0.65 0.25 0), oklch(0.65 0.25 150) );}
.gradient {
background: linear-gradient(
in oklab, oklch(0.65 0.25 0),
oklch(0.65 0.25 150)
);
}
.element { color: oklab(0.7 -0.1 0.1); color: oklab(0.7 -0.1 0.1 / 0.5);}
.element {
color: oklab(0.7 -0.1 0.1);
color: oklab(0.7 -0.1 0.1 / 0.5);
}
Lab и LCH
СкопированоАналоги oklch/oklab на основе более старого стандарта CIE. Тоже перцептуально равномерные, но OKLab/OKLCh дают более точные результаты на практике и обычно предпочтительнее. Работают во всех актуальных браузерах с мая 2023.
.element { color: lch(50 80 160); /* L: 0–100, C: 0–150+, H: 0–360 */ color: lab(50 -40 30); /* L: 0–100, a и b: -125 до 125 */}
.element {
color: lch(50 80 160); /* L: 0–100, C: 0–150+, H: 0–360 */
color: lab(50 -40 30); /* L: 0–100, a и b: -125 до 125 */
}
Если уже используете oklch/oklab — lch/lab не нужны. Они нужны, когда работаете с инструментами или библиотеками, которые оперируют CIE-пространством.
color() — широкий охват
СкопированоФункция color позволяет явно указать цветовое пространство — display-p3, rec2020, srgb и другие. Поддерживается с мая 2023.
Относительный синтаксис цветов
СкопированоКлючевое слово from позволяет создать новый цвет на основе существующего, меняя только нужные компоненты. Поддерживается в браузерах с сентября 2024.
.element { /* Берём синий и сдвигаем оттенок на 180° — получаем оранжевый */ color: oklch(from blue l c calc(h + 180)); /* Осветляем произвольный цвет из переменной */ background: oklch(from var(--brand) calc(l + 0.15) c h); /* Делаем цвет полупрозрачным */ border-color: oklch(from var(--brand) l c h / 0.5); /* Убираем насыщенность — получаем серый той же яркости */ color: oklch(from var(--brand) l 0 h);}
.element {
/* Берём синий и сдвигаем оттенок на 180° — получаем оранжевый */
color: oklch(from blue l c calc(h + 180));
/* Осветляем произвольный цвет из переменной */
background: oklch(from var(--brand) calc(l + 0.15) c h);
/* Делаем цвет полупрозрачным */
border-color: oklch(from var(--brand) l c h / 0.5);
/* Убираем насыщенность — получаем серый той же яркости */
color: oklch(from var(--brand) l 0 h);
}
Внутри функции можно использовать calc с компонентами цвета (l, c, h для oklch или r, g, b для rgb). Это мощный инструмент для создания динамических палитр прямо в CSS без JavaScript.
Ключевые слова
Скопированоtransparent
СкопированоКлючевое слово transparent — полностью прозрачный цвет, эквивалент rgb. Пригодится там, где нужно «убрать» цвет, не сломав остальные свойства. Стоит знать: в градиентах transparent интерполируется через чёрный, поэтому иногда лучше использовать oklch или rgb с нужным оттенком, чтобы не было «серых провалов»:
/* Может появиться серый/чёрный в середине */background: linear-gradient(red, transparent);/* Чистый переход без артефактов */background: linear-gradient(red, oklch(from red l c h / 0));
/* Может появиться серый/чёрный в середине */
background: linear-gradient(red, transparent);
/* Чистый переход без артефактов */
background: linear-gradient(red, oklch(from red l c h / 0));
currentColor
Скопированоcurrent — текущий цвет текста элемента. Удобен, когда нужно синхронизировать несколько свойств с одним источником:
.element { color: #6e4aff; border: 1px solid currentColor; /* рамка того же цвета, что текст */ fill: currentColor; /* для SVG-иконок */}/* При hover достаточно изменить одно свойство */.element:hover { color: #09ff00;}
.element {
color: #6e4aff;
border: 1px solid currentColor; /* рамка того же цвета, что текст */
fill: currentColor; /* для SVG-иконок */
}
/* При hover достаточно изменить одно свойство */
.element:hover {
color: #09ff00;
}
light-dark()
СкопированоФункция light принимает два цвета — для светлой и тёмной темы — и выбирает нужный в зависимости от color. Поддерживается с мая 2024.
html { /* Обязательно — разрешает переключение тем */ color-scheme: light dark;}.element { /* Белый в светлой теме, тёмно-серый в тёмной */ background: light-dark(#ffffff, #1a1a1a); /* Тёмный текст в светлой теме, светлый в тёмной */ color: light-dark(#111111, #eeeeee);}
html {
/* Обязательно — разрешает переключение тем */
color-scheme: light dark;
}
.element {
/* Белый в светлой теме, тёмно-серый в тёмной */
background: light-dark(#ffffff, #1a1a1a);
/* Тёмный текст в светлой теме, светлый в тёмной */
color: light-dark(#111111, #eeeeee);
}
Без color на html или :root функция не работает.