lch()
Базовая линия 2023
Новое
С мая 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 #0000FF calc(l + 10) c h) lch(from hsl(180 100% 50%) calc(l - 10) c h) lch(from var(--aColorValue) 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). Вычисления calc() применяются к значениям L, C, H, и A, что приводит к выходному цвету 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> не работает.
Формальный синтаксис
Примеры
Настройка яркости цвета
Этот пример демонстрирует эффект изменения значения 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
[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%). Это почти серый для всех цветов.
[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);
}
Результат
Если бы мы использовали 0 вместо 3 и 2%, сохранив те же значения светлоты, цвета были бы одинакового оттенка серого. В этом примере они почти серые.
Цвета в 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>
и так далее.
CSS
[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);
}
и так далее.
Результат
Углы оттенков в lch() отличаются от углов в hsl(). Для получения дополнительной информации см. <hue>. В hsl(), цвет sRGB 0deg представляет красный цвет. Однако в цветовом пространстве CIELab 0deg соответствует пурпурному, а красный цвет примерно 41deg.
Регулировка непрозрачности с помощью lch()
В следующем примере демонстрируется эффект изменения значения A (альфа) lch() функциональной нотации. Элементы red и red-alpha перекрывают элемент #background-div, чтобы продемонстрировать эффект непрозрачности. Присвоение A значения 0.4 делает цвет 40% непрозрачным.
HTML
<div id="background-div"> <div data-color="red"></div> <div data-color="red-alpha"></div> </div>
CSS
[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% вычтенных из канала светлоты.
CSS
: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);
}
Результат
Вывод следующий:
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
lch |
111 | 111 | 113 | 97 | 15 | 111 | 113 | 75 | 15 | 22.0 | 111 |
mixed_type_parameters |
116 | 116 | 113 | 102 | 16.2 | 116 | 113 | 78 | 16.2 | 24.0 | 116 |
relative_syntax |
119 | 119 | 128 | 105 | 16.4Реализация основана на более ранней версии спецификации. В результате вычисления со значениями каналаh не работают правильно, требуя указания значений с единицами (deg). |
119 | 128 | 79 | 16.4Реализация основана на более ранней версии спецификации. В результате вычисления со значениями каналаh не работают правильно, требуя указания значений с единицами (deg). |
25.0 | 119 |
См. также
- Список всех обозначений цвета
- Использование относительных цветов
- Модуль CSS цвета
-
<hue>тип данных - Цвета LCH в CSS: что, почему и как? Леа Вероу (2020)
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/lch