hwb()
Базовая Широко доступная
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с апреля 2022 года.
Функциональная запись hwb() выражает цвет в цветовом пространстве sRGB цветового пространства в соответствии с его оттенком, белизной и черниной. Необязательный компонент alpha определяет прозрачность цвета.
Попробовать
Синтаксис
/* Absolute values */ hwb(194 0% 0%) hwb(194 0% 0% / .5) /* Relative values */ hwb(from green h w b / 0.5) hwb(from #0000FF h calc(w + 30) b) hwb(from lch(40% 70 240deg) h w calc(b - 30))
Описание
Эта функция цвета в sRGB цветовом пространстве определяется значением угла <hue>, значением белизны, значением чернины и, необязательно, значением alpha, представляющим прозрачность цвета.
Углы, соответствующие определенным оттенкам, различаются в цветовых пространствах sRGB (используемых hsl() и hwb()), CIELAB (используемых lch()) и Oklab (используемых oklch()). hwb() находится в том же цветовом пространстве, что и hsl(), и поэтому имеет те же углы оттенков цвета. См. страницу справки <hue> для получения подробных сведений и примеров, или попробуйте изменить оттенки на палитре цветов, чтобы увидеть их в действии.
Цвет hwb() полностью насыщен, когда значения белизны (W) и чернины (B) оба равны 0. Для любого значения оттенка H, hwb(H 0% 0%) имеет тот же цвет, что и hsl(H 100% 50%). Увеличение значения белизны осветляет цвет. Увеличение значения чернины затемняет цвет.
Когда оба значения чернины и белизны больше 0, цвет становится приглушенным, приближаясь к серому. Когда добавленное количество белизны и чернины равно или больше 100% — другими словами, если W + B >= 100%, функция цвета определяет оттенок серого. Когда сумма обоих значений больше 100% (W + B > 100%), значения белизны и чернины серого цвета эффективно нормализуются как W / (W + B) и B / (W + B) соответственно.
Значения
Ниже приведены описания разрешенных значений для абсолютных и относительных цветов.
Синтаксис абсолютных значений
hwb(H W B[ / A])
Параметры следующие:
H-
<number>,<angle>или ключевое словоnone(эквивалентное0degв данном случае), представляющее угол<hue>цвета. W-
<percentage>, представляющее белизну цвета, или ключевое словоnone(эквивалентное0%в данном случае) для смешивания.0%означает отсутствие белизны.100%означает полную белизну, еслиBравно0, в противном случае оба значенияWиBнормализуются. B-
<percentage>, представляющее чернину цвета, или ключевое словоnone(эквивалентное0%в данном случае) для смешивания.0%означает отсутствие чернины.100%означает полную чернину, еслиWравно0, в противном случае оба значенияWиBнормализуются. -
AНеобязательно -
<alpha-value>, представляющий значение канала alpha цвета, где число0соответствует0%(полностью прозрачный), а1соответствует100%(полностью непрозрачный). Дополнительно, ключевое словоnoneможет быть использовано для явного указания отсутствия канала alpha. Если значение каналаAне указано явно, оно по умолчанию равно 100%. Если указано, значение предшествует косой чертой (/).
Примечание: См. Отсутствующие компоненты цвета для получения дополнительной информации о влиянии none.
Примечание: Абсолютные цвета hwb() сериализуются в значения rgb(). Значения компонентов красного, зеленого и синего цветов могут быть округлены при сериализации.
Синтаксис относительных значений
hwb(from <color> H W B[ / A])
Параметры следующие:
from <color>-
Ключевое слово
fromвсегда включается при определении относительного цвета, за которым следует значение<color>, представляющее исходный цвет. Это исходный цвет, на основе которого определяется относительный цвет. Исходный цвет может быть любым допустимым синтаксисом<color>, включая другой относительный цвет. H-
<number>,<angle>или ключевое словоnone(эквивалентное0degв данном случае), представляющее угол<hue>выходного цвета. W-
<percentage>, представляющее белизну цвета, или ключевое словоnone(эквивалентное0%в данном случае) для смешивания.0%означает отсутствие белизны.100%означает полную белизну, еслиBравно0, в противном случае оба значенияWиBнормализуются. B-
<percentage>, представляющее чернину цвета, или ключевое словоnone(эквивалентное0%в данном случае) для смешивания.0%означает отсутствие чернины.100%означает полную чернину, еслиWравно0, в противном случае оба значенияWиBнормализуются. -
AНеобязательно -
<alpha-value>, представляющий значение канала alpha выходного цвета, где число0соответствует0%(полностью прозрачный), а1соответствует100%(полностью непрозрачный). Дополнительно, ключевое словоnoneможет быть использовано для явного указания отсутствия канала alpha. Если значение каналаAне указано явно, оно по умолчанию равно значению канала alpha исходного цвета. Если указано, значение предшествует косой чертой (/).
Примечание: Для полного представления всего спектра видимых цветов вывод функций относительного цвета hwb() сериализуется в color(srgb). Это означает, что получение значения выходного цвета через свойство HTMLElement.style или метод CSSStyleDeclaration.getPropertyValue() возвращает выходной цвет в виде значения color(srgb ...).
Определение относительных компонентов цветового канала вывода
При использовании относительной цветовой синтаксики внутри функции hwb(), браузер преобразует исходный цвет в эквивалентный цвет HWB (если он не задан как таковой). Цвет определяется как три отдельных значения цветовых каналов — h (оттенок), w (белого) и b (черного) — плюс значение канала альфа (alpha). Эти значения каналов доступны внутри функции для использования при определении значений цветовых каналов вывода:
- Значение канала
hразрешается в значение<number>в пределах от0до360, включительно. - Значения каналов
wиbкаждый разрешается в значение<number>в пределах от0до100, включительно. - Значение канала
alphaразрешается в значение<number>в пределах от0до1, включительно.
При определении относительного цвета различные каналы выходного цвета могут быть выражены несколькими различными способами. Ниже мы рассмотрим несколько примеров, чтобы проиллюстрировать эти способы.
В первых двух примерах ниже используется относительный цветовой синтаксис. Однако первый пример выводит тот же цвет, что и исходный цвет, а второй — цвет, вообще не связанный с исходным цветом. Они фактически не создают относительные цвета! Вероятность их использования в реальном коде невелика, и вы, вероятно, просто воспользуетесь абсолютным значением цвета вместо этого. Мы включили эти примеры в качестве отправной точки для изучения относительного синтаксиса hwb().
Начнем с исходного цвета hsl(0 100% 50%) (эквивалентного hwb(0 0% 0%)). Следующая функция выводит тот же цвет, что и исходный цвет — она использует значения каналов h, w и b исходного цвета (0, 0% и 0%) в качестве значений каналов вывода:
hwb(from hsl(0 100% 50%) h w b)
Цвет вывода этой функции — эквивалент sRGB color() цвета hwb(0 0% 0%): color(srgb 1 0 0).
Следующая функция использует абсолютные значения для значений каналов выходного цвета, выводит совершенно другой цвет, не связанный с исходным цветом:
hwb(from hsl(0 100% 50%) 240 52% 12%)
В этом случае выходной цвет — эквивалент sRGB color() цвета hwb(240 52% 12%): color(srgb 0.52 0.52 0.88).
Следующая функция создает относительный цвет, основанный на исходном цвете:
hwb(from hsl(0 100% 50%) h 30% b)
Этот пример:
- Преобразует исходный цвет (
hsl(0 100% 50%)) в эквивалентhwb()(hwb(0 0% 0%)). - Устанавливает значения каналов
HиBдля выходного цвета на значения каналовHиBэквивалента исходного цветаhwb()— эти значения составляют соответственно0и0%. - Устанавливает значение канала
Wвыходного цвета на новое значение, не зависящее от исходного цвета:30%.
Конечный выходной цвет эквивалентен hwb(0 30% 0%) в цветовом пространстве sRGB — color(srgb 1 0.3 0.3).
Примечание: Как упоминалось выше, если выходной цвет использует другую цветовую модель, чем исходный цвет, исходный цвет преобразуется в ту же модель или пространство, что и выходной цвет, для обеспечения совместимости (т. е. используя те же каналы).
В примерах, которые мы видели в этом разделе, значения канала альфа для исходного и выходного цветов не были явно указаны. Если значение канала альфа выходного цвета не указано, оно по умолчанию принимает значение, совпадающее со значением канала альфа исходного цвета. Если значение канала альфа исходного цвета не указано (и это не относительный цвет), оно по умолчанию равно 1. Следовательно, значения каналов альфа исходного и выходного цвета составляют 1 для вышеприведенных примеров.
Давайте рассмотрим примеры, в которых указаны значения каналов альфа исходного и выходного цветов. В первом примере значение канала альфа выходного цвета совпадает со значением канала альфа исходного цвета, а во втором примере указано другое значение канала альфа выходного цвета, не связанное со значением канала альфа исходного цвета.
hwb(from hsl(0 100% 50% / 0.8) h w b / alpha) /* Computed output color: color(srgb 1 0 0 / 0.8) */ hwb(from hsl(0 100% 50% / 0.8) h w b / 0.5) /* Computed output color: color(srgb 1 0 0 / 0.5) */
В следующем примере исходный цвет hsl() снова преобразуется в представление hwb() — hwb(0 0% 0%). Вычисления calc() применяются к значениям H, W, B и A, и конечный выходной цвет эквивалентен hwb(120 25% 10% / 0.9 в цветовом пространстве sRGB: color(srgb 0.25 0.9 0.25 / 0.9).
hwb(from hsl(0 100% 50%) calc(h + 120) calc(w + 25) calc(b + 10) / calc(alpha - 0.1))
Примечание: Поскольку значения каналов исходного цвета разрешаются в <number> значения, вам необходимо их добавлять, когда вы используете их в расчетах, даже в тех случаях, когда канал обычно принимает <percentage>, <angle> или другие типы значений. Например, добавление <percentage> к <number> не работает.
Формальный синтаксис
Примеры
Использование относительных цветов с hwb()
В этом примере стилизуются три элемента <div> с разными цветами фона. Средний элемент получает исходный --base-color, а левый и правый элементы получают осветленные и затемненные варианты этого --base-color.
Эти варианты определяются с помощью относительных цветов — пользовательская переменная --base-color передаётся в функцию hwb(), а выходные цвета изменяются в каналах белый и чёрный для достижения желаемого эффекта с помощью функции calc(). В осветлённом цвете к белому каналу добавлено 30%, а в затемнённом — 30% к чёрному каналу.
CSS
:root {
--base-color: orange;
}
/* As per the spec, w and b values should resolve to a number between 0-100
However, Chrome 121+ incorrectly resolves them to numbers between 0-1
hence currently using calculations like w + 0.3 instead of w + 30 */
#one {
background-color: hwb(from var(--base-color) h calc(w + 0.3) b);
}
#two {
background-color: var(--base-color);
}
#three {
background-color: hwb(from var(--base-color) h w calc(b + 0.3));
}
/* Use @supports to add in support for old syntax that requires % units to
be specified in w and b calculations. This is required for Safari 16.4+. */
@supports (color: hwb(from red h w calc(b + 30%))) {
#one {
background-color: hwb(from var(--base-color) h calc(w + 30%) b);
}
#three {
background-color: hwb(from var(--base-color) h w calc(b + 30%));
}
}
Результат
Вывод выглядит следующим образом:
Спецификации
Совместимость браузеров
| Рабочий стол | Мобильный | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
hwb |
101 | 101 | 96 | 87 | 15 | 101 | 96 | 70 | 15 | 19.0 | 101 |
mixed_type_parameters |
121 | 121 | 122 | 107 | Нет | 121 | 122 | 81 | Нет | 25.0 | 121 |
relative_syntax |
119w и b значения каналов некорректно интерпретируются как числа от 0 до 1 вместо 0-100. В результате, для расчётов значений каналов необходимо задавать w и b значения в виде десятичных эквивалентов процентов (например, 0,2 для 20%). |
119w и b значения каналов некорректно интерпретируются как числа от 0 до 1 вместо 0-100. В результате, для расчётов значений каналов необходимо задавать w и b значения в виде десятичных эквивалентов процентов (например, 0,2 для 20%). |
128 | 105w и b значения каналов некорректно интерпретируются как числа от 0 до 1 вместо 0-100. В результате, для расчётов значений каналов необходимо задавать w и b значения в виде десятичных эквивалентов процентов (например, 0,2 для 20%). |
16.4Реализация основана на более старой версии спецификации. В результате, вычисления со значениями каналов не работают правильно, требуя задания значений с единицами измерения (deg для h, % для w и b). |
119w и b значения каналов некорректно интерпретируются как числа от 0 до 1 вместо 0-100. В результате, для расчётов значений каналов необходимо задавать w и b значения в виде десятичных эквивалентов процентов (например, 0,2 для 20%). |
128 | 79w и b значения каналов некорректно интерпретируются как числа от 0 до 1 вместо 0-100. В результате, для расчётов значений каналов необходимо задавать w и b значения в виде десятичных эквивалентов процентов (например, 0,2 для 20%). |
16.4Реализация основана на более старой версии спецификации. В результате, вычисления со значениями каналов не работают правильно, требуя задания значений с единицами измерения (deg для h, % для w и b). |
25.0w и b значения каналов некорректно интерпретируются как числа от 0 до 1 вместо 0-100. В результате, для расчётов значений каналов необходимо задавать w и b значения в виде десятичных эквивалентов процентов (например, 0,2 для 20%). |
119w и b значения каналов некорректно интерпретируются как числа от 0 до 1 вместо 0-100. В результате, для расчётов значений каналов необходимо задавать w и b значения в виде десятичных эквивалентов процентов (например, 0,2 для 20%). |
См. также
-
<color>: Список всех обозначений цвета - Инструмент выбора и преобразования цвета
- Использование относительных цветов
- Модуль CSS colors
-
<hue>: тип данных, представляющий угол оттенка цвета
© 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/hwb