Тип CSS `<color>`
Базовая поддержка Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в разных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
<color> — это CSS тип данных, представляющий цвет. Значение <color> также может включать значение прозрачности альфа-канала, указывающее, как цвет должен смешиваться с фоном.
Примечание: Хотя значения <color> определены точно, их фактический вид может различаться (иногда значительно) от устройства к устройству. Это связано с тем, что большинство устройств не откалиброваны, а некоторые браузеры не поддерживают цветовые профили устройств вывода.
Синтаксис
/* Named colors */ rebeccapurple aliceblue /* RGB Hexadecimal */ #f09 #ff0099 /* RGB (Red, Green, Blue) */ rgb(255 0 153) rgb(255 0 153 / 80%) /* HSL (Hue, Saturation, Lightness) */ hsl(150 30% 60%) hsl(150 30% 60% / 80%) /* HWB (Hue, Whiteness, Blackness) */ hwb(12 50% 0%) hwb(194 0% 0% / 0.5) /* Lab (Lightness, A-axis, B-axis) */ lab(50% 40 59.5) lab(50% 40 59.5 / 0.5) /* LCH (Lightness, Chroma, Hue) */ lch(52.2% 72.2 50) lch(52.2% 72.2 50 / 0.5) /* Oklab (Lightness, A-axis, B-axis) */ oklab(59% 0.1 0.1) oklab(59% 0.1 0.1 / 0.5) /* OkLCh (Lightness, Chroma, Hue) */ oklch(60% 0.15 50) oklch(60% 0.15 50 / 0.5) /* Relative CSS colors */ /* HSL hue change */ hsl(from red 240deg s l) /* HWB alpha channel change */ hwb(from green h w b / 0.5) /* LCH lightness change */ lch(from blue calc(l + 20) c h) /* light-dark */ light-dark(white, black) light-dark(rgb(255 255 255), rgb(0 0 0))
Значение <color> можно задать одним из перечисленных ниже способов:
- С помощью ключевых слов:
<named-color>(например,blueилиpink),<system-color>иcurrentColor. - С помощью шестнадцатеричной записи:
<hex-color>(например,#ff0000). - С помощью
<color-function>с параметрами в цветовом пространстве, используя функциональные нотации: - С помощью синтаксиса относительного цвета для создания нового цвета на основе существующего. Любая из перечисленных выше цветовых функций может принимать исходный цвет, перед которым указывается ключевое слово
from, а после которого задаются значения каналов для нового выходного цвета. - Смешивая два цвета:
color-mix(). - Указывая цвет, для которого нужно получить контрастный цвет:
contrast-color(). - Указывая два цвета: первый для светлых цветовых схем, второй — для тёмных:
light-dark().
Ключевое слово
currentColor
Ключевое слово currentColor представляет значение свойства color элемента. Это позволяет использовать значение color для свойств, которые по умолчанию его не получают.
Если currentColor используется в качестве значения свойства color, вместо этого оно принимает унаследованное значение свойства color.
<div class="container"> The color of this text is blue. <div class="child"></div> This block is surrounded by a blue border. </div>
.container {
color: blue;
border: 1px dashed currentColor;
}
.child {
background: currentColor;
height: 9px;
}
Отсутствующие компоненты цвета
Каждый компонент любой цветовой функции CSS — за исключением функций с устаревшим синтаксисом с разделением запятыми — можно указать как отсутствующий, задав ключевое слово none.
Явное указание отсутствующих компонентов при интерполяции цвета полезно в случаях, когда нужно интерполировать одни компоненты цвета, но не другие. Во всех остальных случаях отсутствующий компонент фактически будет иметь нулевое значение в соответствующей единице измерения: 0, 0% или 0deg. Например, следующие цвета эквивалентны при использовании вне интерполяции:
/* These are equivalent */ color: oklab(50% none -0.25); color: oklab(50% 0 -0.25); /* These are equivalent */ background-color: hsl(none 100% 50%); background-color: hsl(0deg 100% 50%);
Интерполяция
Интерполяция цвета происходит в градиентах, переходах и анимациях.
При интерполяции значений <color> они сначала преобразуются в заданное цветовое пространство, а затем каждый компонент вычисленных значений интерполируется линейно. Скорость интерполяции определяется функцией плавности в переходах и анимациях. По умолчанию используется цветовое пространство Oklab, но для некоторых связанных с цветом функциональных нотаций его можно переопределить с помощью <color-interpolation-method>.
Интерполяция с отсутствующими компонентами
Интерполяция цветов в одном и том же пространстве
При интерполяции цветов, уже заданных в цветовом пространстве интерполяции, отсутствующие компоненты одного цвета заменяются существующими значениями соответствующих компонентов другого цвета. Например, следующие два выражения эквивалентны:
color-mix(in oklch, oklch(none 0.2 10), oklch(60% none 30)) color-mix(in oklch, oklch(60% 0.2 10), oklch(60% 0.2 30))
Примечание: Если компонент отсутствует в обоих цветах, он останется отсутствующим и после интерполяции.
Интерполяция цветов из разных пространств: аналогичные компоненты
Если какой-либо интерполируемый цвет не задан в цветовом пространстве интерполяции, его отсутствующие компоненты переносятся в преобразованный цвет на основе аналогичных компонентов той же категории, как описано в следующей таблице:
| Категория | Аналогичные компоненты |
|---|---|
| Красные |
R, X
|
| Зелёные |
G, Y
|
| Синие |
B, Z
|
| Светлота | L |
| Цветность |
C, S
|
| Тон | H |
| a | a |
| b | b |
Например:
-
X(0.2) вcolor(xyz 0.2 0.1 0.6)аналогиченR(50%) вrgb(50% 70% 30%). -
H(0deg) вhsl(0deg 100% 80%)аналогиченH(140) вoklch(80% 0.1 140).
В качестве примера рассмотрим цветовое пространство OkLCh для интерполяции и два цвета ниже:
lch(80% 30 none) color(display-p3 0.7 0.5 none)
Предварительная обработка выполняется следующим образом:
-
Замените отсутствующие компоненты в обоих цветах нулевыми значениями:
lch(80% 30 0) color(display-p3 0.7 0.5 0)
-
Преобразуйте оба цвета в цветовое пространство интерполяции:
oklch(83.915% 0.0902 0.28) oklch(63.612% 0.1522 78.748)
-
Если какой-либо компонент преобразованных цветов аналогичен отсутствующему компоненту соответствующего исходного цвета, снова задайте ему значение «отсутствует»:
oklch(83.915% 0.0902 none) oklch(63.612% 0.1522 78.748)
-
Замените каждый отсутствующий компонент соответствующим компонентом другого преобразованного цвета:
oklch(83.915% 0.0902 78.748) oklch(63.612% 0.1522 78.748)
Доступность
Некоторым людям трудно различать цвета. Рекомендации WCAG 2.2 настоятельно не рекомендуют использовать цвет как единственное средство передачи определённого сообщения, действия или результата. Дополнительную информацию см. в разделе «Цвет и контрастность цвета».
Формальный синтаксис
<color> = <color-base> | currentColor | <system-color> | <light-dark()> | <deprecated-system-color> <color-base> = <hex-color> | <color-function> | <named-color> | <color-mix()> | transparent <system-color> = AccentColor | AccentColorText | ActiveText | ButtonBorder | ButtonFace | ButtonText | Canvas | CanvasText | Field | FieldText | GrayText | Highlight | HighlightText | LinkText | Mark | MarkText | SelectedItem | SelectedItemText | VisitedText <light-dark()> = light-dark( <color>, <color> ) <deprecated-system-color> = ActiveBorder | ActiveCaption | AppWorkspace | Background | ButtonHighlight | ButtonShadow | CaptionText | InactiveBorder | InactiveCaption | InactiveCaptionText | InfoBackground | InfoText | Menu | MenuText | Scrollbar | ThreeDDarkShadow | ThreeDFace | ThreeDHighlight | ThreeDLightShadow | ThreeDShadow | Window | WindowFrame | WindowText <color-function> = <rgb()> | <rgba()> | <hsl()> | <hsla()> | <hwb()> | <lab()> | <lch()> | <oklab()> | <oklch()> | <color()> <named-color> = aliceblue | antiquewhite | aqua | aquamarine | azure | beige | bisque | black | blanchedalmond | blue | blueviolet | brown | burlywood | cadetblue | chartreuse | chocolate | coral | cornflowerblue | cornsilk | crimson | cyan | darkblue | darkcyan | darkgoldenrod | darkgray | darkgreen | darkgrey | darkkhaki | darkmagenta | darkolivegreen | darkorange | darkorchid | darkred | darksalmon | darkseagreen | darkslateblue | darkslategray | darkslategrey | darkturquoise | darkviolet | deeppink | deepskyblue | dimgray | dimgrey | dodgerblue | firebrick | floralwhite | forestgreen | fuchsia | gainsboro | ghostwhite | gold | goldenrod | gray | green | greenyellow | grey | honeydew | hotpink | indianred | indigo | ivory | khaki | lavender | lavenderblush | lawngreen | lemonchiffon | lightblue | lightcoral | lightcyan | lightgoldenrodyellow | lightgray | lightgreen | lightgrey | lightpink | lightsalmon | lightseagreen | lightskyblue | lightslategray | lightslategrey | lightsteelblue | lightyellow | lime | limegreen | linen | magenta | maroon | mediumaquamarine | mediumblue | mediumorchid | mediumpurple | mediumseagreen | mediumslateblue | mediumspringgreen | mediumturquoise | mediumvioletred | midnightblue | mintcream | mistyrose | moccasin | navajowhite | navy | oldlace | olive | olivedrab | orange | orangered | orchid | palegoldenrod | palegreen | paleturquoise | palevioletred | papayawhip | peachpuff | peru | pink | plum | powderblue | purple | rebeccapurple | red | rosybrown | royalblue | saddlebrown | salmon | sandybrown | seagreen | seashell | sienna | silver | skyblue | slateblue | slategray | slategrey | snow | springgreen | steelblue | tan | teal | thistle | tomato | turquoise | violet | wheat | white | whitesmoke | yellow | yellowgreen <color-mix()> = color-mix( <color-interpolation-method> , [ <color> && <percentage [0,100]>? ]#{2}) <color> = <color-base> | currentColor | <system-color> | <light-dark()> | <deprecated-system-color> <rgb()> = rgb( <percentage>#{3} , <alpha-value>? ) | rgb( <number>#{3} , <alpha-value>? ) | rgb( [ <number> | <percentage> | none ]{3} [ / [ <alpha-value> | none ] ]? ) <rgba()> = rgba( <percentage>#{3} , <alpha-value>? ) | rgba( <number>#{3} , <alpha-value>? ) | rgba( [ <number> | <percentage> | none ]{3} [ / [ <alpha-value> | none ] ]? ) <hsl()> = hsl( <hue>, <percentage>, <percentage>, <alpha-value>? ) | hsl( [ <hue> | none ] [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ / [ <alpha-value> | none ] ]? ) <hsla()> = hsla( <hue>, <percentage>, <percentage>, <alpha-value>? ) | hsla( [ <hue> | none ] [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ / [ <alpha-value> | none ] ]? ) <hwb()> = hwb( [ <hue> | none ] [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ / [ <alpha-value> | none ] ]? ) <lab()> = lab( [<percentage> | <number> | none] [ <percentage> | <number> | none] [ <percentage> | <number> | none] [ / [<alpha-value> | none] ]? ) <lch()> = lch( [<percentage> | <number> | none] [ <percentage> | <number> | none] [ <hue> | none] [ / [<alpha-value> | none] ]? ) <oklab()> = oklab( [ <percentage> | <number> | none] [ <percentage> | <number> | none] [ <percentage> | <number> | none] [ / [<alpha-value> | none] ]? ) <oklch()> = oklch( [ <percentage> | <number> | none] [ <percentage> | <number> | none] [ <hue> | none] [ / [<alpha-value> | none] ]? ) <color()> = color( [ from <color> ]? <colorspace-params> [ / [ <alpha-value> | none ] ]? ) <color-interpolation-method> = in [ <rectangular-color-space> | <polar-color-space> <hue-interpolation-method>? | <custom-color-space> ] <alpha-value> = <number> | <percentage> <hue> = <number> | <angle> <colorspace-params> = [<custom-params> | <predefined-rgb-params> | <xyz-params>] <rectangular-color-space> = srgb | srgb-linear | display-p3 | display-p3-linear | a98-rgb | prophoto-rgb | rec2020 | lab | oklab | xyz | xyz-d50 | xyz-d65 <polar-color-space> = hsl | hwb | lch | oklch <hue-interpolation-method> = [ shorter | longer | increasing | decreasing ] hue <custom-color-space> = <dashed-ident> <custom-params> = <dashed-ident> [ <number> | <percentage> | none ]+ <predefined-rgb-params> = <predefined-rgb> [ <number> | <percentage> | none ]{3} <xyz-params> = <xyz> [ <number> | <percentage> | none ]{3} <predefined-rgb> = srgb | srgb-linear | display-p3 | display-p3-linear | a98-rgb | prophoto-rgb | rec2020 <xyz> = xyz | xyz-d50 | xyz-d65
Примеры
Изучение значений цветов
В этом примере мы предоставляем <div> и текстовое поле ввода. Если ввести в поле допустимое значение цвета, <div> примет этот цвет, что позволит проверить значения цветов.
HTML
<div></div> <hr /> <label for="color">Enter a valid color value:</label> <input type="text" id="color" />
div {
height: 200px;
width: 200px;
}
const inputElem = document.querySelector("input");
const divElem = document.querySelector("div");
function validTextColor(stringToTest) {
if (stringToTest === "inherit" || stringToTest === "transparent") {
return false;
}
const div = document.createElement("div");
div.style.color = stringToTest;
return !!div.style.color;
}
inputElem.addEventListener("input", () => {
if (validTextColor(inputElem.value)) {
divElem.style.backgroundColor = inputElem.value;
divElem.textContent = "";
} else {
divElem.removeAttribute("style");
divElem.textContent = "Invalid color value";
}
});
Результат
Создание полностью насыщенных цветов sRGB
В этом примере показаны полностью насыщенные цвета в цветовом пространстве sRGB.
HTML
<div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div>
CSS
body {
display: flex;
flex-wrap: wrap;
}
div {
height: 80px;
margin: 10px;
width: 80px;
}
div:nth-child(1) {
background-color: hsl(0 100% 50%);
}
div:nth-child(2) {
background-color: hsl(30 100% 50%);
}
div:nth-child(3) {
background-color: hsl(60 100% 50%);
}
div:nth-child(4) {
background-color: hsl(90 100% 50%);
}
div:nth-child(5) {
background-color: hsl(120 100% 50%);
}
div:nth-child(6) {
background-color: hsl(150 100% 50%);
}
div:nth-child(7) {
background-color: hsl(180 100% 50%);
}
div:nth-child(8) {
background-color: hsl(210 100% 50%);
}
div:nth-child(9) {
background-color: hsl(240 100% 50%);
}
div:nth-child(10) {
background-color: hsl(270 100% 50%);
}
div:nth-child(11) {
background-color: hsl(300 100% 50%);
}
div:nth-child(12) {
background-color: hsl(330 100% 50%);
}
Результат
Создание разных оттенков красного
В этом примере показаны оттенки красного цвета в цветовом пространстве sRGB.
HTML
<div></div> <div></div> <div></div> <div></div> <div></div> <div></div>
CSS
body {
display: flex;
flex-wrap: wrap;
}
div {
box-sizing: border-box;
height: 80px;
margin: 10px;
width: 80px;
}
div:nth-child(1) {
background-color: hsl(0 100% 0%);
}
div:nth-child(2) {
background-color: hsl(0 100% 20%);
}
div:nth-child(3) {
background-color: hsl(0 100% 40%);
}
div:nth-child(4) {
background-color: hsl(0 100% 60%);
}
div:nth-child(5) {
background-color: hsl(0 100% 80%);
}
div:nth-child(6) {
background-color: hsl(0 100% 100%);
border: solid;
}
Результат
Создание красных цветов с разной насыщенностью
В этом примере показаны красные цвета с разной насыщенностью в цветовом пространстве sRGB.
HTML
<div></div> <div></div> <div></div> <div></div> <div></div> <div></div>
CSS
body {
display: flex;
flex-wrap: wrap;
}
div {
height: 80px;
margin: 10px;
width: 80px;
}
div:nth-child(1) {
background-color: hsl(0 0% 50%);
}
div:nth-child(2) {
background-color: hsl(0 20% 50%);
}
div:nth-child(3) {
background-color: hsl(0 40% 50%);
}
div:nth-child(4) {
background-color: hsl(0 60% 50%);
}
div:nth-child(5) {
background-color: hsl(0 80% 50%);
}
div:nth-child(6) {
background-color: hsl(0 100% 50%);
}
Результат
Спецификации
| Спецификация |
|---|
| Модуль CSS Color, уровень 4 # color-syntax |
Совместимость с браузерами
| Для ПК | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari на iOS | Samsung Internet | WebView для Android | WebView на iOS | |
color |
1 |
12 |
1 |
3.5 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
alpha |
151 |
151 |
155 |
135 |
27 |
151 |
155 |
101 |
27 |
Нет |
151 |
27 |
color |
111 |
111 |
113 |
97 |
15
10.1–15Поддерживаются только предопределённые цветовые профилиdisplay-p3 и srgb. |
111 |
113 |
75 |
15
10.3–15Поддерживаются только предопределённые цветовые профилиdisplay-p3 и srgb. |
22.0 |
111 |
15
10.3–15Поддерживаются только предопределённые цветовые профилиdisplay-p3 и srgb. |
color-mix |
111 |
111 |
113 |
97 |
16.2 |
111 |
113 |
75 |
16.2 |
22.0 |
111 |
16.2 |
contrast-color |
147 |
147 |
146 |
131 |
26 |
147 |
146 |
98 |
26 |
Нет |
147 |
26 |
currentcolor |
1 |
12 |
1.5 |
9.5 |
4 |
18 |
4 |
14 |
3.2 |
1.0 |
37 |
3.2 |
from_currentcolor |
131 |
131 |
133 |
116 |
18 |
131 |
133 |
87 |
18 |
29.0 |
131 |
18 |
hsl |
1 |
12 |
1 |
9.5 |
3.1 |
18 |
4 |
10.1 |
2 |
1.0 |
4.4 |
2 |
hwb |
101 |
101 |
96 |
87 |
15 |
101 |
96 |
70 |
15 |
19.0 |
101 |
15 |
lab |
111 |
111 |
113 |
97 |
15 |
111 |
113 |
75 |
15 |
22.0 |
111 |
15 |
lch |
111 |
111 |
113 |
97 |
15 |
111 |
113 |
75 |
15 |
22.0 |
111 |
15 |
light-dark |
123 |
123 |
120 |
109 |
17.5 |
123 |
120 |
82 |
17.5 |
27.0 |
123 |
17.5 |
named-color |
1 |
12 |
1 |
3.5 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
oklab |
111 |
111 |
113 |
97 |
15.4 |
111 |
113 |
75 |
15.4 |
22.0 |
111 |
15.4 |
oklch |
111 |
111 |
113 |
97 |
15.4 |
111 |
113 |
75 |
15.4 |
22.0 |
111 |
15.4 |
rgb |
1 |
12 |
1 |
3.5 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
rgb_hexadecimal_notation |
1 |
12 |
1 |
3.5 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
system-color |
1 |
12 |
1 |
3.5 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
transparent |
1 |
12 |
1 |
3.5 |
1 |
18 |
4 |
10.1 |
1 |
1.0 |
4.4 |
1 |
См. также
-
opacity: свойство, задающее прозрачность на уровне элемента -
<hue>: тип данных, представляющий угол оттенка цвета -
color,background-color,border-color,box-shadow,outline-color,text-shadow: распространённые свойства, использующие<color> -
функция
color() - Применение цвета к HTML-элементам с помощью CSS
- Использование относительных цветов
- Новые функции, градиенты и оттенки в цветах CSS (уровень 4) в блоге MDN (2023)
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/color_value