Функция CSS `lch()`
Базовая поддержка Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и во многих версиях браузеров. Она доступна во всех браузерах с мая 2023 года.
Функциональная нотация lch() задаёт цвет в цветовом пространстве LCH, которое описывает светлоту, цветность и тон. В ней используется та же ось L, что и в функции цвета lab() цветового пространства CIELab, но применяются полярные координаты C (цветность) и H (тон).
Синтаксис
/* Absolute values */ lch(29.2345% 44.2 27); lch(52.2345% 72.2 56.2); lch(52.2345% 72.2 56.2 / .5); /* Relative values */ lch(from green l c h / 0.5) lch(from #123456 calc(l + 10) c h) lch(from hsl(180 100% 50%) calc(l - 10) c h) lch(from var(--color-value) l c h / calc(alpha - 0.1))
Значения
Ниже описаны допустимые значения для абсолютных и относительных цветов.
Примечание: Обычно, когда процентные значения имеют числовой эквивалент в CSS, 100% равно числу 1. Для lch() это не так. Здесь 100% равно числу 100 для значения L и 150 для значения C.
Синтаксис абсолютного значения
lch(L C H[ / A])
Параметры:
-
L -
<number>в диапазоне от0до100,<percentage>в диапазоне от0%до100%или ключевое словоnone(эквивалентное0%). Число0соответствует0%(чёрный цвет), а число100соответствует100%(белый цвет). Это значение задаёт яркость цвета в цветовом пространстве CIELab.Примечание:
Lвlch()— это воспринимаемая светлота, то есть «яркость», которую мы видим глазами. Она отличается отLвhsl(), где светлота означает её значение относительно других цветов. -
C <number>,<percentage>или ключевое словоnone(в данном случае эквивалентное0%). Это значение измеряет цветность цвета (примерно соответствует «количеству цвета»). Минимальное полезное значение —0%, или0, а максимальное теоретически не ограничено (но на практике не превышает230);100%эквивалентно150.-
H -
<number>,<angle>или ключевое словоnone(эквивалентное0deg), задающее угол<hue>цвета.Примечание: Углы, соответствующие определённым тонам, различаются в цветовых пространствах sRGB (используется в
hsl()иhwb()), CIELAB (используется вlch()) и Oklab (используется вoklch()). Дополнительные сведения и примеры см. в примере тоны в LCH ниже и на справочной странице типа данных<hue>. -
AНеобязательный <alpha-value>, задающее значение альфа-канала цвета: число0соответствует0%(полностью прозрачный), а1—100%(полностью непрозрачный). Кроме того, для явного указания отсутствия альфа-канала можно использовать ключевое словоnone. Если значение каналаAне указано явно, по умолчанию оно равно 100%. Если это значение задано, перед ним ставится косая черта (/).
Примечание: Дополнительные сведения о влиянии none см. в разделе Отсутствующие компоненты цвета.
Синтаксис относительного значения
lch(from <color> L C H[ / A])
Параметры:
-
from <color> - При задании относительного цвета всегда используется ключевое слово
from, за которым следует значениеcolor, обозначающее исходный цвет. Это исходный цвет, на основе которого задаётся относительный цвет. В качестве исходного цвета можно использовать любой допустимый синтаксисcolor, в том числе другой относительный цвет. -
L <number>в диапазоне от0до100,<percentage>в диапазоне от0%до100%или ключевое словоnone(эквивалентное0%). Число0соответствует0%(чёрный цвет), а число100соответствует100%(белый цвет). Это значение задаёт яркость цвета в цветовом пространстве CIELab.-
C <number>,<percentage>или ключевое словоnone(в данном случае эквивалентное0%). Это значение задаёт цветность итогового цвета (примерно соответствует «количеству цвета»). Минимальное полезное значение —0%, или0, а максимальное теоретически не ограничено (но на практике не превышает230);100%эквивалентно150.-
H <number>,<angle>или ключевое словоnone(эквивалентное0deg), задающее угол<hue>итогового цвета. См. пример с тоном ниже.-
AНеобязательный <alpha-value>, задающее значение альфа-канала итогового цвета: число0соответствует0%(полностью прозрачный), а1—100%(полностью непрозрачный). Кроме того, для явного указания отсутствия альфа-канала можно использовать ключевое словоnone. Если значение каналаAне указано явно, по умолчанию оно равно значению альфа-канала исходного цвета. Если это значение задано, перед ним ставится косая черта (/).
Задание компонентов каналов итогового относительного цвета
При использовании синтаксиса относительных цветов внутри функции lch() браузер преобразует исходный цвет в эквивалентный цвет Lch (если он ещё не задан в этом пространстве). Цвет задаётся тремя отдельными значениями цветовых каналов — l (светлота), c (цветность) и h (тон), — а также значением альфа-канала (alpha). Эти значения каналов доступны внутри функции и могут использоваться при задании значений каналов итогового цвета:
- Значение канала
lразрешается в<number>в диапазоне от0до100включительно. - Значение канала
cразрешается в<number>в диапазоне от0до150включительно. - Значение канала
hразрешается в<number>в диапазоне от0до360включительно. - Значение канала
alphaразрешается в<number>в диапазоне от0до1включительно.
При задании относительного цвета разные каналы итогового цвета можно выразить несколькими способами. Ниже рассмотрим примеры, иллюстрирующие эти способы.
В первых двух примерах ниже используется синтаксис относительных цветов. Однако первый пример выводит тот же цвет, что и исходный, а второй — цвет, никак не связанный с исходным. По сути, они не создают относительные цвета! Вряд ли вы станете использовать такие варианты в реальном коде — вместо них проще задать абсолютное значение цвета. Мы включили эти примеры, чтобы начать знакомство с синтаксисом относительных цветов lch().
Начнём с исходного цвета hsl(0 100% 50%) (эквивалентного red). Следующая функция выводит тот же цвет, что и исходный: значения каналов l, c и h исходного цвета (54.29, 106.854 и 40.856) используются в качестве значений каналов итогового цвета:
lch(from hsl(0 100% 50%) l c h)
Результат работы этой функции — цвет lch(54.29 106.854 40.856).
Следующая функция использует абсолютные значения каналов итогового цвета и выводит совершенно другой цвет, не основанный на исходном:
lch(from hsl(0 100% 50%) 29.6871% 66.83 327.109)
В этом случае итоговый цвет — lch(29.6871 66.83 327.109).
Следующая функция создаёт относительный цвет на основе исходного:
lch(from hsl(0 100% 50%) 70 150 h)
Этот пример:
- Преобразует исходный цвет
hsl()в эквивалентный цветlch()—lch(54.29 106.854 40.856). - Задаёт значение канала
Hитогового цвета равным значению каналаHэквивалента исходного цветаlch()—40.856. - Задаёт новые значения каналов
LиCитогового цвета, не основанные на исходном: соответственно70и150.
Итоговый цвет — lch(70 150 40.856).
Примечание: Как упоминалось выше, если для итогового и исходного цветов используются разные цветовые модели, исходный цвет преобразуется в фоновом режиме в ту же модель, что и итоговый. Это позволяет представить его в совместимом виде (то есть с использованием тех же каналов).
В рассмотренных до этого примерах значения альфа-каналов исходного и итогового цветов не задавались явно. Если альфа-канал итогового цвета не задан, по умолчанию он принимает то же значение, что и альфа-канал исходного цвета. Если альфа-канал исходного цвета не задан (и это не относительный цвет), по умолчанию он равен 1. Поэтому в приведённых выше примерах значения альфа-каналов исходного и итогового цветов равны 1.
Рассмотрим примеры с заданными значениями альфа-каналов исходного и итогового цветов. В первом примере значение альфа-канала итогового цвета совпадает со значением альфа-канала исходного цвета, а во втором задаётся другое значение, не связанное со значением альфа-канала исходного цвета.
lch(from hsl(0 100% 50% / 0.8) l c h / alpha) /* Computed output color: lch(54.29 106.854 40.856 / 0.8) */ lch(from hsl(0 100% 50% / 0.8) l c h / 0.5) /* Computed output color: lch(54.29 106.854 40.856 / 0.5) */
В следующем примере исходный цвет hsl() снова преобразуется в эквивалентный цвет lch() — lch(54.29 106.854 40.856). К значениям L, C, H и A применяются вычисления calc(), в результате чего итоговый цвет равен lch(74.29 86.8541 0.856018 / 0.9):
lch(from hsl(0 100% 50%) calc(l + 20) calc(c - 20) calc(h - 40) / calc(alpha - 0.1))
Примечание: Поскольку значения каналов исходного цвета преобразуются в значения <number>, при использовании их в вычислениях необходимо прибавлять к ним числа, даже если канал обычно допускает значения <percentage>, <angle> или других типов. Например, прибавление <percentage> к <number> не работает.
Формальный синтаксис
<lch()> = lch( [<percentage> | <number> | none] [ <percentage> | <number> | none] [ <hue> | none] [ / [<alpha-value> | none] ]? ) <hue> = <number> | <angle> <alpha-value> = <number> | <percentage>
Примеры
Настройка яркости цвета
В этом примере показан эффект изменения значения L (светлоты) в функциональной нотации lch().
HTML
<div data-color="blue-dark"></div> <div data-color="blue"></div> <div data-color="blue-light"></div> <div data-color="red-dark"></div> <div data-color="red"></div> <div data-color="red-light"></div> <div data-color="green-dark"></div> <div data-color="green"></div> <div data-color="green-light"></div>
CSS
body {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 20px;
}
div {
height: 50px;
border: 1px solid black;
}
[data-color="blue-dark"] {
background-color: lch(10% 100 240);
}
[data-color="blue"] {
background-color: lch(50% 100 240);
}
[data-color="blue-light"] {
background-color: lch(90% 100 240);
}
[data-color="red-dark"] {
background-color: lch(10% 130 20);
}
[data-color="red"] {
background-color: lch(50% 130 20);
}
[data-color="red-light"] {
background-color: lch(90% 130 20);
}
[data-color="green-dark"] {
background-color: lch(10% 132 130);
}
[data-color="green"] {
background-color: lch(50% 132 130);
}
[data-color="green-light"] {
background-color: lch(90% 132 130);
}
Результат
Настройка интенсивности цвета с помощью цветности
В следующем примере показан эффект изменения значения C (цветности) в функциональной нотации lch(): по мере уменьшения значения C от полной насыщенности до почти серого цвета интенсивность цветов снижается.
HTML
<div data-color="blue"></div> <div data-color="blue-chroma1"></div> <div data-color="blue-chroma2"></div> <div data-color="blue-chroma3"></div> <div data-color="red"></div> <div data-color="red-chroma1"></div> <div data-color="red-chroma2"></div> <div data-color="red-chroma3"></div> <div data-color="green"></div> <div data-color="green-chroma1"></div> <div data-color="green-chroma2"></div> <div data-color="green-chroma3"></div>
CSS
Для исходных синего, красного и зелёного цветов мы задаём постепенно уменьшающиеся значения цветности: от максимальной насыщенности цвета при наибольшем значении 150 (эквивалентном 100%) до 3 (эквивалентного 2%), при котором все цвета становятся почти серыми.
body {
display: grid;
grid-template-columns: 1fr 1fr 1fr 1fr;
gap: 20px;
}
div {
height: 50px;
border: 1px solid black;
}
[data-color="blue"] {
background-color: lch(50% 150 240);
}
[data-color="blue-chroma1"] {
background-color: lch(50% 105 240);
}
[data-color="blue-chroma2"] {
background-color: lch(50% 54 240);
}
[data-color="blue-chroma3"] {
background-color: lch(50% 3 240);
}
[data-color="red"] {
background-color: lch(50% 100% 20deg);
}
[data-color="red-chroma1"] {
background-color: lch(50% 70% 20deg);
}
[data-color="red-chroma2"] {
background-color: lch(50% 36% 20deg);
}
[data-color="red-chroma3"] {
background-color: lch(50% 2% 20deg);
}
[data-color="green"] {
background-color: lch(50% 150 130);
}
[data-color="green-chroma1"] {
background-color: lch(50% 105 130);
}
[data-color="green-chroma2"] {
background-color: lch(50% 54 130);
}
[data-color="green-chroma3"] {
background-color: lch(50% 3 130);
}
Результат
Если бы вместо 3 и 2% мы использовали 0 с теми же значениями светлоты, все цвета имели бы одинаковый оттенок серого. В этом примере они почти серые.
Тоны в LCH
В следующем примере показаны образцы с разными значениями H (тона) в функциональной нотации lch().
HTML
<div data-color="0">0deg</div> <div data-color="20">20deg</div> <div data-color="40">40deg</div> <div data-color="60">60deg</div>
и так далее.
<div data-color="80">80deg</div> <div data-color="100">100deg</div> <div data-color="120">120deg</div> <div data-color="140">140deg</div> <div data-color="160">160deg</div> <div data-color="180">180deg</div> <div data-color="200">200deg</div> <div data-color="220">220deg</div> <div data-color="240">240deg</div> <div data-color="260">260deg</div> <div data-color="280">280deg</div> <div data-color="300">300deg</div> <div data-color="320">320deg</div> <div data-color="340">340deg</div> <div data-color="360">360deg</div>
CSS
body {
display: flex;
flex-wrap: wrap;
gap: 3px;
}
div {
flex: 0 0 4em;
text-align: center;
line-height: 4em;
display: inline-block;
border: 1px solid black;
color: white;
font-family: monospace;
}
[data-color="0"] {
background-color: lch(50% 150 0deg);
}
[data-color="20"] {
background-color: lch(50% 150 20deg);
}
[data-color="40"] {
background-color: lch(50% 150 40deg);
}
[data-color="60"] {
background-color: lch(50% 150 60deg);
}
и так далее.
[data-color="80"] {
background-color: lch(50% 150 80deg);
}
[data-color="100"] {
background-color: lch(50% 150 100deg);
}
[data-color="120"] {
background-color: lch(50% 150 120deg);
}
[data-color="140"] {
background-color: lch(50% 150 140deg);
}
[data-color="160"] {
background-color: lch(50% 150 160deg);
}
[data-color="180"] {
background-color: lch(50% 150 180deg);
}
[data-color="200"] {
background-color: lch(50% 150 200deg);
}
[data-color="220"] {
background-color: lch(50% 150 220deg);
}
[data-color="240"] {
background-color: lch(50% 150 240deg);
}
[data-color="260"] {
background-color: lch(50% 150 260deg);
}
[data-color="280"] {
background-color: lch(50% 150 280deg);
}
[data-color="300"] {
background-color: lch(50% 150 300deg);
}
[data-color="320"] {
background-color: lch(50% 150 320deg);
}
[data-color="340"] {
background-color: lch(50% 150 340deg);
}
[data-color="360"] {
background-color: lch(50% 150 360deg);
}
Результат
Углы тона в lch() отличаются от углов тона в hsl(). Дополнительные сведения см. в разделе <hue>. В hsl() цвет sRGB 0deg обозначает красный. Однако в цветовом пространстве CIELab значение 0deg соответствует пурпурному, а красному — примерно 41deg.
Настройка прозрачности с помощью lch()
В следующем примере показан эффект изменения значения A (альфа-канала) в функциональной нотации lch(). Элементы red и red-alpha перекрывают элемент #background-div, чтобы продемонстрировать эффект прозрачности. Значение 0.4 для A делает цвет непрозрачным на 40%.
HTML
<div id="background-div"> <div data-color="red"></div> <div data-color="red-alpha"></div> </div>
CSS
div {
width: 50px;
height: 50px;
padding: 5px;
margin: 5px;
display: inline-block;
border: 1px solid black;
}
#background-div {
background-color: lch(100% 100 240);
width: 150px;
height: 40px;
}
[data-color="red"] {
background-color: lch(50% 130 20);
}
[data-color="red-alpha"] {
background-color: lch(50% 130 20 / 0.4);
}
Результат
Использование относительных цветов с lch()
В этом примере для трёх элементов <div> задаются разные цвета фона, чтобы продемонстрировать, как с помощью относительных цветов можно изменять яркость цвета с помощью функции цвета lch(). Средний элемент <div> сохраняет исходный --base-color, а левому и правому элементам <div> задаются осветлённый и затемнённый варианты --base-color.
Эти варианты задаются с помощью относительных цветов: пользовательское свойство --base-color передаётся в функцию lch(), а в итоговых цветах изменяется канал светлоты, чтобы добиться нужного эффекта с помощью функции 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: lch(from var(--base-color) calc(l + 15) c h);
}
#two {
background-color: var(--base-color);
}
#three {
background-color: lch(from var(--base-color) calc(l - 15) c h);
}
Результат
Результат:
Спецификации
| Спецификация |
|---|
| Модуль цветов CSS, уровень 5 # относительный-LCH |
| Модуль цветов CSS, уровень 4 # цвета-lab |
Совместимость с браузерами
| Настольные устройства | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | WebView для iOS | |
lch |
111 |
111 |
113 |
97 |
15 |
111 |
113 |
75 |
15 |
22.0 |
111 |
15 |
mixed_type_parameters |
116 |
116 |
113 |
102 |
16.2 |
116 |
113 |
78 |
16.2 |
24.0 |
116 |
16.2 |
relative_syntax |
119 |
119 |
128 |
105 |
18
16.4–18Реализация основана на более старой версии спецификации. В результате вычисления со значениями каналаh работают некорректно, поэтому значения необходимо указывать с единицами измерения (deg). |
119 |
128 |
79 |
18
16.4–18Реализация основана на более старой версии спецификации. В результате вычисления со значениями каналаh работают некорректно, поэтому значения необходимо указывать с единицами измерения (deg). |
25.0 |
119 |
18
16.4–18Реализация основана на более старой версии спецификации. В результате вычисления со значениями каналаh работают некорректно, поэтому значения необходимо указывать с единицами измерения (deg). |
См. также
- Список всех обозначений цветов
- Использование относительных цветов
- Модуль «Цвета CSS»
-
<hue>тип данных - Цвета LCH в CSS: что это, зачем и как? — Леа Веру (2020)
© 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/lch