oklch()
Базовая версия 2023
Новое
С мая 2023 года эта функция работает на последних версиях устройств и браузеров. Возможно, она не будет работать на более старых устройствах или браузерах.
Функциональное обозначение oklch() выражает заданный цвет в цветовом пространстве Oklab цветовое пространство. oklch() является цилиндрической формой oklab(), используя те же L оси, но с полярными координатами насыщенности (C) и оттенка (h).
Синтаксис
/* Absolute values */ oklch(40.1% 0.123 21.57) oklch(59.69% 0.156 49.77) oklch(59.69% 0.156 49.77 / .5) /* Relative values */ oklch(from green l c h / 0.5) oklch(from #0000FF calc(l + 0.1) c h) oklch(from hsl(180 100% 50%) calc(l - 0.1) c h) oklch(from var(--aColor) l c h / calc(alpha - 0.1))
Значения
Ниже приведены описания разрешенных значений для абсолютных и относительных цветов.
Примечание: Обычно, когда процентные значения имеют числовой эквивалент в CSS, 100% равно числу 1. Это не относится ко всем значениям компонентов oklch(). Здесь 100% равно 0.4 для значения C.
Синтаксис абсолютного значения
oklch(L C H[ / A])
Параметры следующие:
L-
Числовое
<number>от0до1, процентное<percentage>от0%до100%, или ключевое словоnone(эквивалентное0%в данном случае). В данном случае число0соответствует0%(чёрный), а число1соответствует100%(белый). Это значение задаёт воспринимаемую светлоту или «яркость» цвета.Примечание:
Lвoklch()— это воспринимаемая светлота, которая относится к «яркости», которую мы визуально воспринимаем нашими глазами. Это отличается отLвhsl(), где она представляет светлоту по сравнению с другими цветами. C-
Числовое
<number>, процентное<percentage>или ключевое словоnone(эквивалентное0%в данном случае). Это значение представляет собой показатель хроматичности цвета (приблизительно представляющей «количество цвета»). Его минимальное полезное значение —0, а максимальное теоретически неограничено (но на практике не превышает0.5). В данном случае0%— это0, а100%— число0.4. H-
Числовое
<number>, угловое<angle>или ключевое словоnone(эквивалентное0degв данном случае), представляющее угловое значение<hue>цвета.Примечание: Углы, соответствующие определённым оттенкам, различаются в цветовых пространствах sRGB (используемых
hsl()иhwb()), CIELAB (используемыхlch()) и Oklab (используемыхoklch()) . См. пример Оттенков вoklch()ниже и страницу справки<hue>для получения более подробной информации и примеров. -
AНеобязательно -
Значение
<alpha-value>, представляющее значение канала альфа цвета, где число0соответствует0%(полностью прозрачный), а1соответствует100%(полностью непрозрачный). Кроме того, ключевое словоnoneможет быть использовано для явного указания отсутствия канала альфа. Если значение каналаAне указано явно, оно по умолчанию равно 100%. Если включено, значение предваряется косой чертой (/).
Примечание: См. Отсутствующие компоненты цвета для получения дополнительной информации о влиянии none.
Синтаксис относительного значения
oklch(from <color> L C H[ / A])
Параметры следующие:
from <color>-
Ключевое слово
fromвсегда включается при определении относительного цвета, за которым следует значение<color>, представляющее цвет-источник: это исходный цвет, на основе которого определяется относительный цвет. Цвет-источник может быть любым допустимым синтаксисом<color>, включая другой относительный цвет. L-
Числовое
<number>от0до1, процентное<percentage>от0%до100%, или ключевое словоnone(эквивалентное0%в данном случае). Это представляет собой значение светлоты выходного цвета. Здесь число0соответствует0%(чёрный), а число1соответствует100%(белый). C-
Числовое
<number>, процентное<percentage>или ключевое словоnone(эквивалентное0%в данном случае). Это значение представляет собой значение хроматичности выходного цвета (приблизительно представляющее «количество цвета»). Его минимальное полезное значение —0, а максимальное теоретически неограничено (но на практике не превышает0.5). В данном случае0%— это0, а100%— число0.4. H-
Числовое
<number>, угловое<angle>или ключевое словоnone(эквивалентное0degв данном случае), представляющее угловое значение<hue>выходного цвета. См. примеры различных оттенков в разделе Примеры ниже. -
AНеобязательно -
Значение
<alpha-value>, представляющее значение канала альфа выходного цвета, где число0соответствует0%(полностью прозрачный), а1соответствует100%(полностью непрозрачный). Кроме того, ключевое словоnoneможет быть использовано для явного указания отсутствия канала альфа. Если значение каналаAне указано явно, оно по умолчанию равно значению канала альфа цвета-источника. Если включено, значение предваряется косой чертой (/).
Определение компонентов выходного канала относительного цвета
При использовании синтаксиса относительного цвета внутри функции oklch(), браузер преобразует цвет-источник в эквивалентный цвет Oklch (если он не задан как таковой). Цвет определяется как три отдельных значения каналов цвета — l (светлота), c (хроматичность) и h (оттенок) — плюс значение канала альфа (alpha). Эти значения каналов доступны внутри функции для использования при определении значений выходных каналов цвета:
- Значение канала
lразрешается до значения<number>в диапазоне от0до1, включительно. - Значение канала
cразрешается до значения<number>в диапазоне от0до0.4, включительно. - Значение канала
hразрешается до значения<number>в диапазоне от0до360, включительно. - Канал
alphaразрешается до значения<number>в диапазоне от0до1, включительно.
При определении относительного цвета различные каналы выходного цвета могут быть выражены различными способами. Ниже мы рассмотрим несколько примеров, чтобы проиллюстрировать это.
В первых двух примерах ниже используется синтаксис относительного цвета. Однако первый из них выводит тот же цвет, что и цвет-источник, а второй — цвет, вообще не связанный с цветом-источником. Они фактически не создают относительные цвета! Вероятность их использования в реальном коде низка, и, скорее всего, вы будете использовать абсолютные значения цвета вместо них. Мы включили эти примеры в качестве отправной точки для изучения синтаксиса относительных oklch().
Начнём с цвета-источника hsl(0 100% 50%) (эквивалентного red). Следующая функция выводит тот же цвет, что и цвет-источник — она использует значения каналов l, c и h цвета-источника (0.627966, 0.257704, и 29.2346) как значения каналов выходного цвета:
oklch(from hsl(0 100% 50%) l c h)
Цвет, выводимый этой функцией, равен oklch(0.627966 0.257704 29.2346).
Следующая функция использует абсолютные значения для значений каналов выходного цвета, выводя совершенно другой цвет, не связанный с цветом-источником:
oklch(from hsl(0 100% 50%) 42.1% 0.25 328.363)
В этом случае выходной цвет равен oklch(0.421 0.25 328.363).
Следующая функция создаёт относительный цвет, основанный на цвете-источнике:
oklch(from hsl(0 100% 50%) 0.8 0.4 h)
В этом примере:
- Цвет-источник
hsl()преобразуется в эквивалентный цветoklch()—oklch(0.627966 0.257704 29.2346). - Значение канала
Hдля выходного цвета устанавливается в значение каналаoklch()эквивалента цвета-источника —29.2346. - Значения каналов
LиCвыходного цвета устанавливаются на новые значения, не основанные на цвете-источнике:0.8и0.4соответственно.
Конечный выходной цвет равен oklch(0.8 0.4 29.2346).
Примечание: Как упоминалось выше, если выходной цвет использует другую модель цвета по сравнению с цветом-источником, цвет-источник преобразуется в ту же модель, что и выходной цвет в фоновом режиме, чтобы он мог быть представлен совместимым образом (т. е. с использованием тех же каналов).
В примерах, которые мы видели в этом разделе до сих пор, альфа-каналы для исходных и выходных цветов не были явно указаны. Когда альфа-канал выходного цвета не указан, он по умолчанию принимает значение, равное альфа-каналу исходного цвета. Когда альфа-канал исходного цвета не указан (и это не относительный цвет), он по умолчанию равен 1. Поэтому значения альфа-каналов источника и результата равны 1 в приведенных выше примерах.
Давайте рассмотрим примеры, в которых заданы значения альфа-каналов источника и результата. В первом примере значение альфа-канала результата равно значению альфа-канала источника, а во втором — другое значение альфа-канала результата, не связанное со значением альфа-канала источника.
oklch(from hsl(0 100% 50% / 0.8) l c h / alpha) /* Computed output color: oklch(0.627966 0.257704 29.2346 / 0.8) */ oklch(from hsl(0 100% 50% / 0.8) l c h / 0.5) /* Computed output color: oklch(0.627966 0.257704 29.2346 / 0.5) */
В следующем примере hsl() исходный цвет снова преобразуется в эквивалент oklch() — oklch(0.627966 0.257704 29.2346). Вычисления calc() применяются к значениям L, C, H и A, что приводит к выходному цвету oklch(0.827966 0.357704 9.23462 / 0.9).
oklch(from hsl(0 100% 50%) calc(l + 0.2) calc(c + 0.1) calc(h - 20) / calc(alpha - 0.1))
Примечание: Поскольку значения каналов исходного цвета разрешаются до значений <number>, при использовании их в вычислениях необходимо добавлять числа, даже в тех случаях, когда канал обычно принимает значения <percentage>, <angle> или других типов. Например, добавление <percentage> к <number> не работает.
Формальный синтаксис
Примеры
Изменение яркости цвета
Этот пример демонстрирует влияние изменения значения L (светлоты) в функциональной записи oklch().
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: oklch(10% 0.4 240);
}
[data-color="blue"] {
background-color: oklch(50% 0.4 240);
}
[data-color="blue-light"] {
background-color: oklch(90% 0.4 240);
}
[data-color="red-dark"] {
background-color: oklch(10% 0.4 20);
}
[data-color="red"] {
background-color: oklch(50% 0.4 20);
}
[data-color="red-light"] {
background-color: oklch(90% 0.4 20);
}
[data-color="green-dark"] {
background-color: oklch(10% 0.4 130);
}
[data-color="green"] {
background-color: oklch(50% 0.4 130);
}
[data-color="green-light"] {
background-color: oklch(90% 0.4 130);
}
Результат
Изменение интенсивности цвета через хроматичность
Следующий пример демонстрирует эффект изменения значения C (хроматичность) функциональной записи oklch(), где цвета теряют интенсивность по мере уменьшения значения 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
Используя начальные цвета синий, красный и зелёный, мы задаём всё более низкие значения хроматичности, начиная от полной насыщенности при высоком значении 0.4 (эквивалентное 100%) до 0.01 (эквивалентное 2%), что почти серое для всех цветов.
[data-color="blue"] {
background-color: oklch(50% 0.4 240);
}
[data-color="blue-chroma1"] {
background-color: oklch(50% 0.2 240);
}
[data-color="blue-chroma2"] {
background-color: oklch(50% 0.1 240);
}
[data-color="blue-chroma3"] {
background-color: oklch(50% 0.01 240);
}
[data-color="red"] {
background-color: oklch(50% 100% 20deg);
}
[data-color="red-chroma1"] {
background-color: oklch(50% 50% 20deg);
}
[data-color="red-chroma2"] {
background-color: oklch(50% 25% 20deg);
}
[data-color="red-chroma3"] {
background-color: oklch(50% 2% 20deg);
}
[data-color="green"] {
background-color: oklch(50% 0.4 130);
}
[data-color="green-chroma1"] {
background-color: oklch(50% 0.2 130);
}
[data-color="green-chroma2"] {
background-color: oklch(50% 0.1 130);
}
[data-color="green-chroma3"] {
background-color: oklch(50% 0.01 130);
}
Результат
Если бы мы использовали 0 вместо 0.01 и 2%, с теми же значениями светлоты, цвета были бы одинаковым оттенком серого. В этом примере они почти серые.
Цветовые тона в oklch
Следующий пример демонстрирует образцы с различными значениями H (цветовой тон) функциональной записи oklch().
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: oklch(50% 0.4 0deg);
}
[data-color="20"] {
background-color: oklch(50% 0.4 20deg);
}
[data-color="40"] {
background-color: oklch(50% 0.4 40deg);
}
[data-color="60"] {
background-color: oklch(50% 0.4 60deg);
}
и так далее.
Результат
Углы цветовых тонов в oklch() отличаются от углов в hsl(). Для получения дополнительной информации см. <hue>. В hsl(), цвет sRGB 0deg представляет красный цвет. Однако в цветовом пространстве CIELab, 0deg соответствует пурпурному цвету, а красный цвет примерно соответствует 41deg.
Настройка значения альфа-канала цвета
Следующий пример демонстрирует эффект изменения значения A (альфа) функции цвета oklch(). Элементы 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: oklch(50% 0.5 20);
}
[data-color="red-alpha"] {
background-color: oklch(50% 0.5 20 / 0.4);
}
Результат
Использование относительных цветов с oklch()
В этом примере три элемента <div> стилизованы с разными цветами фона. Средний элемент получает исходный --base-color, а левый и правый — осветлённую и затемнённую версии этого --base-color.
Эти варианты определяются с помощью относительных цветов — пользовательская свойство --base-color передаётся в функцию oklch(), а выходные цвета изменяются в канале светлоты с помощью функции calc(). В осветлённом цвете к каналу светлоты добавляется значение 0.15 (15%), а в затемнённом — отнимается 0.15 (15%).
CSS
:root {
--base-color: orange;
}
#one {
background-color: oklch(from var(--base-color) calc(l + 0.15) c h);
}
#two {
background-color: var(--base-color);
}
#three {
background-color: oklch(from var(--base-color) calc(l - 0.15) c h);
}
Результат
Вывод выглядит следующим образом:
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
oklch |
111 | 111 | 113 | 97 | 15.4 | 111 | 113 | 75 | 15.4 | 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()иoklab()функции цвета - Интерактивная запись о цветовом пространстве OKLCH (2024)
- OKLCH в CSS: почему мы перешли от RGB и HSL (2024)
- Перцептуальное цветовое пространство для обработки изображений (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/oklch