Функция CSS `color()`
Базовая поддержка Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и во многих версиях браузеров. Она доступна во всех браузерах с мая 2023 года.
Функциональная запись color() позволяет задать цвет в определённом цветовом пространстве, а не в неявном цветовом пространстве sRGB, в котором работают большинство других цветовых функций.
Поддержку конкретного цветового пространства можно определить с помощью CSS-медиавозможности color-gamut.
Синтаксис
/* Absolute values */ color(display-p3 1 0.5 0); color(display-p3 1 0.5 0 / .5); /* Relative values */ color(from green srgb r g b / 0.5) color(from #123456 xyz calc(x + 0.75) y calc(z - 0.35))
Значения
Ниже приведены описания допустимых значений для относительных цветов и цветов с абсолютными значениями.
Синтаксис абсолютных значений
color(colorspace c1 c2 c3[ / A])
Параметры:
-
colorspace <ident>, обозначающий одно из предопределённых цветовых пространств:srgb,srgb-linear,display-p3,display-p3-linear,a98-rgb,prophoto-rgb,rec2020,xyz,xyz-d50илиxyz-d65.-
c1,c2,c3 - Каждое значение можно записать как
<number>,<percentage>или ключевое словоnone(в данном случае эквивалентное0). Эти значения представляют значения компонентов цветового пространства. При использовании значения<number>диапазон от0до1обычно соответствует границам цветового пространства. Допускаются значения за пределами этого диапазона, но они будут выходить за пределы цветового охвата данного цветового пространства. При использовании процентного значения100%соответствует1, а0%соответствует0. -
AНеобязательно <alpha-value>, представляющее значение альфа-канала цвета, где число0соответствует0%(полностью прозрачный), а1соответствует100%(полностью непрозрачный). Кроме того, ключевое словоnoneможно использовать, чтобы явно указать отсутствие альфа-канала. Если значение каналаAне задано явно, по умолчанию оно равно 100%. Если значение указано, перед ним ставится косая черта (/).
Примечание: Подробнее о влиянии none см. в разделе Отсутствующие компоненты цвета.
Синтаксис относительных значений
color(from <color> colorspace c1 c2 c3[ / A])
Параметры:
-
from <color> - При задании относительного цвета всегда указывается ключевое слово
from, за которым следует значениеcolor, представляющее исходный цвет. Это исходный цвет, на основе которого задаётся относительный цвет. Исходным цветом может быть любой допустимый синтаксисcolor, в том числе другой относительный цвет. -
colorspace <ident>, обозначающий цветовое пространство выходного цвета, обычно одно из предопределённых цветовых пространств:srgb,srgb-linear,display-p3,display-p3-linear,a98-rgb,prophoto-rgb,rec2020,xyz,xyz-d50илиxyz-d65.-
c1,c2,c3 - Каждое значение можно записать как
<number>,<percentage>или ключевое словоnone(в данном случае эквивалентное0). Эти значения представляют значения компонентов выходного цвета. При использовании значения<number>диапазон от0до1обычно соответствует границам цветового пространства. Допускаются значения за пределами этого диапазона, но они будут выходить за пределы цветового охвата данного цветового пространства. При использовании процентного значения100%обычно соответствует1, а0%соответствует0. -
AНеобязательно <alpha-value>, представляющее значение альфа-канала выходного цвета, где число0соответствует0%(полностью прозрачный), а1соответствует100%(полностью непрозрачный). Кроме того, ключевое словоnoneможно использовать, чтобы явно указать отсутствие альфа-канала. Если значение каналаAне задано явно, по умолчанию оно равно значению альфа-канала исходного цвета. Если значение указано, перед ним ставится косая черта (/).
Задание компонентов каналов выходного цвета для относительного цвета
При использовании синтаксиса относительного цвета внутри функции color() браузер преобразует исходный цвет в эквивалентный цвет в указанном цветовом пространстве (если он ещё не задан в нём). Цвет задаётся тремя отдельными значениями цветовых каналов и значением альфа-канала (alpha). Эти значения каналов доступны внутри функции и могут использоваться при задании значений каналов выходного цвета:
- Три значения цветовых каналов исходного цвета преобразуются в
<number>. Для предопределённых цветовых пространств эти значения будут следующими — в зависимости от указанного пространства:-
r,gиb: значения цветовых каналов для цветовых пространств на основе RGBsrgb,srgb-linear,display-p3,display-p3-linear,a98-rgb,prophoto-rgbиrec2020. -
x,yиz: значения цветовых каналов для цветовых пространств на основе CIE XYZxyz,xyz-d50иxyz-d65.Примечание: Обычно каждое из этих значений находится в диапазоне от
0до1, однако, как объяснялось выше, значения могут выходить за его пределы.Примечание: Использовать значения
r,gиbвнутри функцииcolor()с цветовым пространством на основе XYZ, значенияx,yиzвнутри функцииcolor()с цветовым пространством на основе RGB или любые другие символы недопустимо. Доступные внутри функции значения каналов исходного цвета должны соответствовать указанному типу цветового пространства.
-
-
alpha: значение прозрачности цвета, преобразованное в<number>от0до1включительно.
При задании относительного цвета каналы выходного цвета можно выразить несколькими способами. Ниже рассмотрим примеры, иллюстрирующие эти способы.
В первых двух примерах ниже используется синтаксис относительного цвета. Однако первый пример выводит тот же цвет, что и исходный, а второй — цвет, никак не основанный на исходном. На самом деле они не создают относительные цвета! В реальном коде вы вряд ли когда-нибудь станете их использовать и, вероятно, просто укажете абсолютное значение цвета. Мы включили эти примеры, чтобы начать знакомство с синтаксисом относительного color().
Возьмём исходный цвет hsl(0 100% 50%) (эквивалентный red). Вряд ли вы когда-либо будете записывать следующие функции, поскольку они выводят тот же цвет, что и исходный, но на этом примере показано, как использовать значения каналов исходного цвета в качестве значений каналов выходного цвета:
color(from hsl(0 100% 50%) srgb r g b) color(from hsl(0 100% 50%) xyz x y z)
Выходными цветами этих функций будут соответственно color(srgb 1 0 0) и color(xyz-d65 0.412426 0.212648 0.0193173).
В следующих функциях для значений каналов выходного цвета используются абсолютные значения, в результате чего получаются совершенно другие цвета, не основанные на исходном:
color(from hsl(0 100% 50%) srgb 0.749938 0 0.609579) /* Computed output color: color(srgb 0.749938 0 0.609579) */ color(from hsl(0 100% 50%) xyz 0.75 0.6554 0.1) /* Computed output color: color(xyz-d65 0.75 0.6554 0.1 */
В следующих функциях для значений каналов выходного цвета используются два значения каналов исходного цвета (r и b, а также x и y соответственно), но для другого значения канала выходного цвета используется новое значение (g и z соответственно). В результате в каждом случае создаётся относительный цвет на основе исходного:
color(from hsl(0 100% 50%) srgb r 1 b) /* Computed output color: color(srgb 1 1 0) */ color(from hsl(0 100% 50%) xyz x y 0.5) /* Computed output color: color(xyz-d65 0.412426 0.212648 0.5) */
Примечание: Как упоминалось выше, если для выходного и исходного цветов используются разные цветовые модели, исходный цвет преобразуется в ту же модель, что и выходной, чтобы его можно было представить совместимым образом (то есть с использованием тех же каналов). Например, цвет hsl() hsl(0 100% 50%) в первом случае выше преобразуется в color(srgb 1 0 0), а во втором — в color(xyz 0.412426 0.212648 0.5).
В рассмотренных до сих пор примерах альфа-каналы исходного и выходного цветов не задавались явно. Если альфа-канал выходного цвета не задан, по умолчанию используется то же значение, что и для альфа-канала исходного цвета. Если альфа-канал исходного цвета не задан (и это не относительный цвет), по умолчанию используется 1. Поэтому в приведённых выше примерах значения альфа-каналов исходного и выходного цветов равны 1.
Рассмотрим примеры с заданными значениями альфа-каналов исходного и выходного цветов. В первом примере значение альфа-канала выходного цвета задано таким же, как у исходного, а во втором — другим и не связанным со значением альфа-канала исходного цвета.
color(from hsl(0 100% 50% / 0.8) srgb r g b / alpha) /* Computed output color: color(srgb 1 0 0 / 0.8) */ color(from hsl(0 100% 50% / 0.8) xyz x y z / 0.5) /* Computed output color: color(xyz-d65 0.412426 0.212648 0.0193173 / 0.5) */
В следующих примерах используются функции calc() для вычисления новых значений каналов выходных цветов относительно значений каналов исходного цвета:
color(from hsl(0 100% 50%) srgb calc(r - 0.4) calc(g + 0.1) calc(b + 0.6) / calc(alpha - 0.1)) /* Computed output color: color(srgb 0.6 0.1 0.6 / 0.9) */ color(from hsl(0 100% 50%) xyz calc(x - 0.3) calc(y + 0.3) calc(z + 0.3) / calc(alpha - 0.1)) /* Computed output color: color(xyz-d65 0.112426 0.512648 0.319317 / 0.9) */
Примечание: Значения каналов исходного цвета преобразуются в значения <number>, поэтому при использовании их в вычислениях к ним нужно прибавлять числа, даже если для данного канала обычно принимаются значения <percentage>, <angle> или другие типы значений. Например, сложение <percentage> и <number> не работает.
Формальный синтаксис
<color()> = color( [ from <color> ]? <colorspace-params> [ / [ <alpha-value> | none ] ]? ) <color> = <color-base> | currentColor | <system-color> | <light-dark()> | <deprecated-system-color> <colorspace-params> = [<custom-params> | <predefined-rgb-params> | <xyz-params>] <alpha-value> = <number> | <percentage> <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 <custom-params> = <dashed-ident> [ <number> | <percentage> | none ]+ <predefined-rgb-params> = <predefined-rgb> [ <number> | <percentage> | none ]{3} <xyz-params> = <xyz> [ <number> | <percentage> | none ]{3} <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}) <predefined-rgb> = srgb | srgb-linear | display-p3 | display-p3-linear | a98-rgb | prophoto-rgb | rec2020 <xyz> = xyz | xyz-d50 | xyz-d65 <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> ] <hue> = <number> | <angle> <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>
Примеры
Использование предопределённых цветовых пространств с color()
В следующем примере показан эффект изменения значений светлоты, оси a и оси b функции color().
HTML
<div data-color="red-a98-rgb"></div> <div data-color="red-prophoto-rgb"></div> <div data-color="green-srgb-linear"></div> <div data-color="green-display-p3"></div> <div data-color="green-display-p3-linear"></div> <div data-color="blue-rec2020"></div> <div data-color="blue-srgb"></div>
CSS
div {
width: 50px;
height: 50px;
padding: 5px;
margin: 5px;
display: inline-block;
border: 1px solid black;
}
[data-color="red-a98-rgb"] {
background-color: color(a98-rgb 1 0 0);
}
[data-color="red-prophoto-rgb"] {
background-color: color(prophoto-rgb 1 0 0);
}
/* sRGB gamut, linear-light — full brightness (green channel 100%) */
[data-color="green-srgb-linear"] {
background-color: color(srgb-linear 0 1 0);
}
/* P3 gamut (wider), gamma-encoded — low brightness (green channel ~21% light output) */
[data-color="green-display-p3"] {
background-color: color(display-p3 0 0.5 0);
}
/* P3 gamut (wider), linear-light — half brightness (green channel at 50% light output) */
[data-color="green-display-p3-linear"] {
background-color: color(display-p3-linear 0 0.5 0);
}
[data-color="blue-rec2020"] {
background-color: color(rec2020 0 0 1);
}
[data-color="blue-srgb"] {
background-color: color(srgb 0 0 1);
}
Результат
Использование цветового пространства xyz с color()
В следующем примере показано, как задать цвет с помощью цветового пространства xyz.
HTML
<div data-color="red"></div> <div data-color="green"></div> <div data-color="blue"></div>
CSS
div {
width: 50px;
height: 50px;
padding: 5px;
margin: 5px;
display: inline-block;
border: 1px solid black;
}
[data-color="red"] {
background-color: color(xyz 45 20 0);
}
[data-color="green"] {
background-color: color(xyz-d50 0.3 80 0.3);
}
[data-color="blue"] {
background-color: color(xyz-d65 5 0 50);
}
Результат
Использование медиазапросов color-gamut с color()
В этом примере показано, как с помощью медиазапроса color-gamut определить поддержку определённого цветового пространства и использовать его для задания цвета.
HTML
<div></div> <div></div> <div></div>
CSS
div {
width: 50px;
height: 50px;
padding: 5px;
margin: 5px;
display: inline-block;
border: 1px solid black;
}
@media (color-gamut: p3) {
div {
background-color: color(display-p3 1 0 0);
}
}
@media (color-gamut: srgb) {
div:nth-child(2) {
background-color: color(srgb 1 0 0);
}
}
@media (color-gamut: rec2020) {
div:nth-child(3) {
background-color: color(rec2020 1 0 0);
}
}
Результат
Использование относительных цветов с color()
В этом примере для трёх элементов <div> заданы разные цвета фона. Среднему элементу присваивается неизменённый --base-color, а левому и правому — осветлённый и затемнённый варианты этого --base-color.
Эти варианты задаются с помощью относительных цветов: пользовательское свойство --base-color передаётся функции color(), а каналы g и b выходных цветов изменяются с помощью функций calc(), чтобы достичь нужного эффекта. Для осветления к этим каналам прибавляется 15%, а для затемнения из них вычитается 15%.
<div id="container"> <div class="item" id="one"></div> <div class="item" id="two"></div> <div class="item" id="three"></div> </div>
CSS
#container {
display: flex;
width: 100vw;
height: 100vh;
box-sizing: border-box;
}
.item {
flex: 1;
margin: 20px;
}
:root {
--base-color: orange;
}
#one {
background-color: color(
from var(--base-color) display-p3 r calc(g + 0.15) calc(b + 0.15)
);
}
#two {
background-color: var(--base-color);
}
#three {
background-color: color(
from var(--base-color) display-p3 r calc(g - 0.15) calc(b - 0.15)
);
}
/* Use @supports to add in support old syntax that requires r g b values
to be specified as percentages (with units) in calculations.
This is required for Safari 16.4+ */
@supports (color: color(from red display-p3 r g calc(b + 30%))) {
#one {
background-color: color(
from var(--base-color) display-p3 r calc(g + 15%) calc(b + 15%)
);
}
#three {
background-color: color(
from var(--base-color) display-p3 r calc(g - 15%) calc(b - 15%)
);
}
}
Результат
Результат выглядит так:
Спецификации
| Спецификация |
|---|
| CSS Color Module Level 5 # color-function |
| CSS Color Module Level 5 # relative-color-function |
| CSS Color Module Level 4 # color-function |
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | WebView на iOS | |
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. |
colorSpace_parameter_accepts_display-p3-linear_value |
144 |
144 |
146 |
128 |
26.2 |
144 |
146 |
95 |
26.2 |
Нет |
144 |
26.2 |
mixed_type_parameters |
111 |
111 |
113 |
97 |
15 |
111 |
113 |
75 |
15 |
22.0 |
111 |
15 |
relative_syntax |
119 |
119 |
128 |
105 |
18
16.4–18Реализация основана на более старой версии спецификации. В результате вычисления со значениями каналов работают некорректно, поэтому значения необходимо задавать в процентах с единицами измерения (%). |
119 |
128 |
79 |
18
16.4–18Реализация основана на более старой версии спецификации. В результате вычисления со значениями каналов работают некорректно, поэтому значения необходимо задавать в процентах с единицами измерения (%). |
25.0 |
119 |
18
16.4–18Реализация основана на более старой версии спецификации. В результате вычисления со значениями каналов работают некорректно, поэтому значения необходимо задавать в процентах с единицами измерения (%). |
См. также
-
colorсвойство -
Тип данных
<color>со списком всех способов записи цветов - Использование относительных цветов
- Инструмент Color_format_converter
- Модуль CSS Colors
-
color-gamutмедиавозможность - Широкий цветовой охват в CSS с Display-p3
© 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/color