hwb()
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since April 2022.
* Some parts of this feature may have varying levels of support.
Die hwb()-Funktionsnotation drückt eine Farbe im sRGB Farbraum aus, basierend auf ihrem Farbton, der Weißheit und der Schwärze. Eine optionale Alpha-Komponente repräsentiert die Transparenz der Farbe.
Probieren Sie es aus
background: hwb(12 50% 0%);
background: hwb(50deg 30% 40%);
background: hwb(0.5turn 10% 0% / 0.5);
background: hwb(0 100% 0% / 50%);
<section id="default-example">
<div class="transition-all" id="example-element"></div>
</section>
#example-element {
min-width: 100%;
min-height: 100%;
padding: 10%;
}
Syntax
/* Absolute values */
hwb(194 0% 0%)
hwb(194 0% 0% / .5)
/* Relative values */
hwb(from green h w b / 0.5)
hwb(from #123456 h calc(w + 30) b)
hwb(from lch(40% 70 240deg) h w calc(b - 30))
Beschreibung
Diese Farb-Funktion im `sRGB`-Farbraum wird durch einen <hue>-Winkelwert, einen Weißheitswert, einen Schwärzewert und optional einen Alpha-Wert, der die Transparenz der Farbe repräsentiert, definiert.
Die Winkel, die bestimmten Farbtönen entsprechen, unterscheiden sich zwischen den Farbräumen sRGB (verwendet von hsl() und hwb()), CIELAB (verwendet von lch()) und Oklab (verwendet von oklch()). hwb() befindet sich im gleichen Farbraum wie hsl() und hat daher die gleichen Farbton-Winkel. Weitere Details und Beispiele finden Sie auf der <hue> Referenzseite oder probieren Sie den Farbwähler, um es in Aktion zu sehen.
Eine hwb()-Farbe ist vollständig gesättigt, wenn sowohl der Weißheits- (W) als auch der Schwärzewert (B) 0 sind. Für jeden Farbtonwert H ist hwb(H 0% 0%) die gleiche Farbe wie hsl(H 100% 50%). Eine Erhöhung des Weißheitswertes hellt die Farbe auf. Eine Erhöhung der Schwärzung verdunkelt die Farbe.
Wenn sowohl die Schwärze als auch die Weißheit größer als 0 sind, wird die Farbe gedämpft und neigt sich in Richtung Grau. Wenn die Menge der hinzugefügten Weißheit und Schwärze gleich oder größer als 100% ist — mit anderen Worten, wenn W + B >= 100%, definiert die Farb-Funktion einen Grauton. Wenn die Summe beider Werte größer als 100% ist (W + B > 100%), werden die Weißheit- und Schwärzewerte der grauen Farbe effektiv als W / (W + B) und B / (W + B) normiert.
Werte
Nachfolgend sind die zugelassenen Werte sowohl für absolute als auch für relative Farben beschrieben.
Absolute Wert-Syntax
hwb(H W B[ / A])
Die Parameter sind wie folgt:
H-
Eine
<number>, ein<angle>, oder das Schlüsselwortnone(entspricht in diesem Fall0deg), das den<hue>-Winkel der Farbe repräsentiert. W-
Ein
<percentage>, das die Weißheit der Farbe repräsentiert, oder das Schlüsselwortnone(entspricht in diesem Fall0%) zum Mischen.0%bedeutet keine Weißheit.100%bedeutet volle Weißheit, wennB0ist, ansonsten werden sowohlWals auchBnormiert. B-
Ein
<percentage>, das die Schwärze der Farbe repräsentiert, oder das Schlüsselwortnone(entspricht in diesem Fall0%) zum Mischen.0%bedeutet keine Schwärze.100%bedeutet volle Schwärze, wennW0ist, ansonsten werden sowohlWals auchBnormiert. AOptional-
Ein
<alpha-value>, der den Alpha-Kanalwert der Farbe repräsentiert, wobei die Zahl00%(vollständig transparent) und1100%(vollständig opak) entspricht. Zusätzlich kann das Schlüsselwortnoneverwendet werden, um explizit keinen Alpha-Kanal anzugeben. Wenn derA-Kanalwert nicht explizit angegeben wird, wird er standardmäßig auf 100% gesetzt. Wenn enthalten, wird der Wert durch einen Schrägstrich (/) vorangestellt.
Hinweis:
Siehe Fehlende Farbkomponenten für weitere Informationen über die Wirkung von none.
Hinweis:
Absolute hwb()-Farben werden als rgb()-Werte serialisiert. Die Werte der roten, grünen und blauen Komponenten können bei der Serialisierung gerundet werden.
Relative Wert-Syntax
hwb(from <color> H W B[ / A])
Die Parameter sind wie folgt:
from <color>-
Das Schlüsselwort
fromwird immer verwendet, wenn eine relative Farbe definiert wird, gefolgt von einem<color>-Wert, der die Ursprungsfarbe darstellt. Dies ist die originale Farbe, auf der die relative Farbe basiert. Die Ursprungsfarbe kann jede gültige<color>-Syntax sein, einschließlich einer anderen relativen Farbe. H-
Eine
<number>, ein<angle>, oder das Schlüsselwortnone(entspricht in diesem Fall0deg), das den<hue>-Winkel der Ausgabefarbe repräsentiert. W-
Ein
<percentage>, das die Weißheit der Farbe repräsentiert, oder das Schlüsselwortnone(entspricht in diesem Fall0%) zum Mischen.0%bedeutet keine Weißheit.100%bedeutet volle Weißheit, wennB0ist, ansonsten werden sowohlWals auchBnormiert. B-
Ein
<percentage>, das die Schwärze der Farbe repräsentiert, oder das Schlüsselwortnone(entspricht in diesem Fall0%) zum Mischen.0%bedeutet keine Schwärze.100%bedeutet volle Schwärze, wennW0ist, ansonsten werden sowohlWals auchBnormiert. AOptional-
Ein
<alpha-value>, der den Alpha-Kanalwert der Ausgabefarbe repräsentiert, wobei die Zahl00%(vollständig transparent) und1100%(vollständig opak) entspricht. Zusätzlich kann das Schlüsselwortnoneverwendet werden, um explizit keinen Alpha-Kanal anzugeben. Wenn derA-Kanalwert nicht explizit angegeben wird, entspricht er standardmäßig dem Alpha-Kanalwert der Ursprungsfarbe. Wenn enthalten, wird der Wert durch einen Schrägstrich (/) vorangestellt.
Hinweis:
Um die Repräsentation des vollen Spektrums sichtbarer Farben vollständig zu ermöglichen, wird die Ausgabe der relativen hwb()-Farb-Funktionen als color(srgb) serialisiert. Das bedeutet, dass das Abfragen des Ausgabefarbwertes über die HTMLElement.style-Eigenschaft oder die Methode CSSStyleDeclaration.getPropertyValue() die Ausgabefarbe als color(srgb ...)-Wert zurückgibt.
Definition der Ausgabekanäle relativ zur Farbe
Wenn die relative Farbsyntax innerhalb einer hwb()-Funktion verwendet wird, wandelt der Browser die Ursprungsfarbe in eine äquivalente HWB-Farbe um (wenn sie nicht bereits so spezifiziert ist). Die Farbe wird als drei getrennte Farbkanalwerte definiert — h (Hue), w (White), und b (Black) — plus einen Alphakanalwert (alpha). Diese Kanalwerte sind innerhalb der Funktion verfügbar, um beim Definieren der Ausgabefarbkanalwerte verwendet zu werden:
- Der
h-Kanalwert wird auf einen<number>zwischen0und360, einschließlich, aufgelöst. - Die
w- undb-Kanäle werden jeweils auf einen<number>zwischen0und100, einschließlich, aufgelöst. - Der
alpha-Kanal wird auf einen<number>zwischen0und1, einschließlich, aufgelöst.
Beim Definieren einer relativen Farbe können die unterschiedlichen Kanäle der Ausgabefarbe auf mehrere verschiedene Weisen ausgedrückt werden. Im Folgenden werden wir einige Beispiele studieren, um diese zu veranschaulichen.
In den ersten beiden Beispielen unten verwenden wir die relative Farbsyntax. Allerdings gibt das erste die gleiche Farbe wie die Ursprungsfarbe aus, und das zweite gibt eine Farbe aus, die überhaupt nicht auf der Ursprungsfarbe basiert. Sie erzeugen wirklich keine relativen Farben! Es wäre unwahrscheinlich, dass Sie diese jemals in einer echten Codebasis verwenden würden, und würden wahrscheinlich einfach einen absoluten Farbwert stattdessen verwenden. Wir haben diese Beispiele als Ausgangspunkt zum Lernen der relativen hwb()-Syntax aufgenommen.
Beginnen wir mit einer Ursprungsfarbe von hsl(0 100% 50%) (entspricht hwb(0 0% 0%)). Die folgende Funktion gibt die gleiche Farbe wie die Ursprungsfarbe aus — sie verwendet die h, w und b Kanalwerte (0, 0%, und 0%) der Ursprungsfarbe als Ausgabekanalwerte:
hwb(from hsl(0 100% 50%) h w b)
Diese Funktion gibt die sRGB-color()-Entsprechung von hwb(0 0% 0%) aus: color(srgb 1 0 0).
Die nächste Funktion verwendet absolute Werte für die Ausgabefarbkanalwerte und gibt eine völlig andere Farbe aus, die nicht auf der Ursprungsfarbe basiert:
hwb(from hsl(0 100% 50%) 240 52% 12%)
Im obigen Fall ist die Ausgabefarbe die sRGB-color()-Entsprechung von hwb(240 52% 12%): color(srgb 0.52 0.52 0.88).
Die folgende Funktion erstellt eine relative Farbe basierend auf der Ursprungsfarbe:
hwb(from hsl(0 100% 50%) h 30% b)
Dieses Beispiel:
- Konvertiert die Ursprungsfarbe (
hsl(0 100% 50%)) in einehwb()-Äquivalente (hwb(0 0% 0%)). - Setzt die
H- undB-Kanalwerte für die Ausgabefarbe auf dieH- undB-Kanalwerte derhwb()-Äquivalenten der Ursprungsfarbe — diese Werte sind0und0%. - Setzt den
W-Kanalwert der Ausgabefarbe auf einen neuen Wert, der nicht auf der Ursprungsfarbe basiert:30%.
Die endgültige Ausgabefarbe ist die Entsprechung von hwb(0 30% 0%) im sRGB-Farbraum — color(srgb 1 0.3 0.3).
Hinweis: Wie oben erwähnt, wenn die Ausgabefarbe ein anderes Farbmodell als die Ursprungsfarbe verwendet, wird die Ursprungsfarbe im Hintergrund in dasselbe Modell oder den gleichen Raum wie die Ausgabefarbe konvertiert, sodass sie in einer kompatiblen Weise dargestellt werden kann (d.h. unter Verwendung der gleichen Kanäle).
In den Beispielen, die wir bisher in diesem Abschnitt gesehen haben, wurden die Alphakanäle weder für die Ursprungs- noch für die Ausgabefarben explizit angegeben. Wenn der Alphakanal der Ausgabefarbe nicht angegeben wird, entspricht er standardmäßig dem Wert des Alphakanals der Ursprungsfarbe. Wenn der Alphakanal der Ursprungsfarbe nicht angegeben wird (und es sich nicht um eine relative Farbe handelt), entspricht er per Standard 1. Daher sind die Ursprungs- und Ausgabe-Alphakanalwerte für die obigen Beispiele 1.
Betrachten wir nun einige Beispiele, die originelle und Ausgabe-Alphakanalwerte spezifizieren. Das erste spezifiziert den Ausgabekanalswert als den gleichen wie den originellen Alphakanalwert, während das zweite einen anderen Ausgabekanalswert spezifiziert, der nichts mit dem originellen Alphakanalwert zu tun hat.
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) */
Im folgenden Beispiel wird die hsl()-Ursprungsfarbe erneut in eine hwb()-Darstellung konvertiert — hwb(0 0% 0%). calc()-Berechnungen werden auf die H-, W-, B- und A-Werte angewendet und die endgültige Ausgabefarbe ist die Entsprechung von hwb(120 25% 10% / 0.9 im sRGB-Farbraum: 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))
Hinweis:
Da die Ursprungsfarbenkanalwerte auf <number>-Werte aufgelöst werden, müssen Sie Zahlen zu ihnen addieren, wenn Sie sie in Berechnungen verwenden, auch in Fällen, in denen ein Kanal normalerweise <percentage>, <angle> oder andere Werttypen akzeptieren würde. Das Hinzufügen eines <percentage> zu einem <number>, funktioniert zum Beispiel nicht.
Formale Syntax
<hwb()> =
hwb( [ from <color> ]? [ <hue> | none ] [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ / [ <alpha-value> | none ] ]? )
<hue> =
<number> |
<angle>
<alpha-value> =
<number> |
<percentage>
Beispiele
>Verwendung relativer Farben mit hwb()
Dieses Beispiel gestaltet drei <div>-Elemente mit unterschiedlichen Hintergrundfarben. Das mittlere erhält die unveränderte --base-color, während die linken und rechten Varianten dieser --base-color-Variante aufgehellt bzw. abgedunkelt werden.
Diese Varianten werden unter Verwendung relativer Farben definiert — die benutzerdefinierte Eigenschaft --base-color custom property wird in eine hwb()-Funktion übergeben, und die Ausgabefarben haben ihre Weiß- und Schwarzkanäle modifiziert, um den gewünschten Effekt über eine calc()-Funktion zu erzielen. Die aufgehellte Farbe hat 30% zum Weißkanal hinzugefügt und die verdunkelte Farbe hat 30% zum Schwarzkanal hinzugefügt.
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%));
}
}
Ergebnis
Die Ausgabe ist wie folgt:
Spezifikationen
| Specification |
|---|
| CSS Color Module Level 5> # relative-HWB> |
| CSS Color Module Level 4> # the-hwb-notation> |
Browser-Kompatibilität
Siehe auch
<color>: Für eine Liste aller Farbnationen- Color format converter tool
- Using relative colors
- CSS colors Modul
<hue>: der Datentyp, der einen Farbtonwinkel einer Farbe repräsentiert