lch()
Baseline 2023Newly available
Since May 2023, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.
Die lch()
Funktionalnotation drückt eine gegebene Farbe mithilfe des LCH-Farbraums aus, der Helligkeit, Chroma und Farbton darstellt. Sie verwendet dieselbe L
-Achse wie die lab()
-Farb-Funktion des CIELab-Farbraums, nutzt jedoch die Polarkoordinaten C
(Chroma) und H
(Farbton).
Syntax
/* 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))
Werte
Unten finden Sie Beschreibungen der zulässigen Werte für sowohl absolute als auch relativen Farben.
Hinweis:
Wenn Prozentwerte normalerweise ein numerisches Äquivalent in CSS haben, entspricht 100%
der Zahl 1
.
Dies ist nicht der Fall für lch()
. Hier entspricht 100%
der Zahl 100
für den L
-Wert und 150
für den C
-Wert.
Absolute Wertsyntax
lch(L C H[ / A])
Die Parameter sind wie folgt:
L
-
Eine
<number>
zwischen0
und100
, ein<percentage>
zwischen0%
und100%
, oder das Schlüsselwortnone
(entspricht0%
). Die Zahl0
entspricht0%
(schwarz), und die Zahl100
entspricht100%
(weiß). Dieser Wert gibt die Helligkeit der Farbe im CIELab-Farbraum an.Hinweis: Das
L
inlch()
ist die wahrgenommene Helligkeit, die sich auf die "Helligkeit" bezieht, die wir mit unseren Augen visuell wahrnehmen. Dies unterscheidet sich vomL
inhsl()
, wo es die Helligkeit im Vergleich zu anderen Farben darstellt. C
-
Eine
<number>
, ein<percentage>
, oder das Schlüsselwortnone
(entspricht in diesem Fall0%
). Dieser Wert ist ein Maß für das Chroma der Farbe (in etwa der "Menge an Farbe"). Sein minimaler nützlicher Wert ist0%
, oder0
, während sein maximaler Wert theoretisch unbegrenzt ist (aber in der Praxis230
nicht überschreitet), wobei100%
äquivalent zu150
ist. H
-
Eine
<number>
, ein<angle>
, oder das Schlüsselwortnone
(entspricht0deg
) repräsentierend die Farbton-Winkel der Farbe.Hinweis: Die Winkel, die bestimmten Farbtönen entsprechen, unterscheiden sich zwischen den sRGB (verwendet von
hsl()
undhwb()
), CIELAB (verwendet vonlch()
), und Oklab (verwendet vonoklch()
) Farbräumen. Sehen Sie sich das Farbtöne in LCH-Beispiel unten und die<hue>
Referenzseite für mehr Details und Beispiele an. A
Optional-
Ein
<alpha-value>
repräsentiert den Alphakanal-Wert der Farbe, wobei die Zahl0
0%
(vollständig transparent) und1
100%
(vollständig deckend) entspricht. Zusätzlich kann das Schlüsselwortnone
verwendet werden, um explizit keinen Alphakanal festzulegen. Wenn derA
-Kanalwert nicht explizit angegeben ist, wird standardmäßig ein Wert von 100% angenommen. Wenn er enthalten ist, wird der Wert durch einen Schrägstrich (/
) vorangestellt.
Hinweis:
Siehe Fehlende Farbkomponenten für mehr Informationen über die Wirkung von none
.
Relative Wertsyntax
lch(from <color> L C H[ / A])
Die Parameter sind wie folgt:
from <color>
-
Das Schlüsselwort
from
ist immer enthalten, wenn man eine relative Farbe definiert, gefolgt von einem<color>
-Wert, der die Ursprungsfarbe darstellt. Dies ist die ursprüngliche Farbe, auf die die relative Farbe basiert. Die Ursprungsfarbe kann eine beliebige gültige<color>
-Syntax sein, einschließlich einer anderen relativen Farbe. L
-
Eine
<number>
zwischen0
und100
, eine<percentage>
zwischen0%
und100%
, oder das Schlüsselwortnone
(entspricht0%
). Die Zahl0
entspricht0%
(schwarz), und die Zahl100
entspricht100%
(weiß). Dieser Wert gibt die Helligkeit der Farbe im CIELab-Farbraum an. C
-
Eine
<number>
, ein<percentage>
, oder das Schlüsselwortnone
(entspricht in diesem Fall0%
). Dieser Wert stellt den Chroma-Wert der Ausgabefarbe dar (ungefähr die "Menge an Farbe"). Sein minimaler nützlicher Wert ist0%
, oder0
, während der maximale Wert theoretisch unbegrenzt ist (aber in der Praxis230
nicht überschreitet), wobei100%
äquivalent zu150
ist. H
-
Eine
<number>
, ein<angle>
, oder das Schlüsselwortnone
(entspricht0deg
) repräsentiert den Farbton-Winkel der Ausgabefarbe. Siehe das Beispiel Farbton unten. A
Optional-
Ein
<alpha-value>
repräsentiert den Alphakanal-Wert der Ausgabefarbe, wobei die Zahl0
0%
(vollständig transparent) und1
100%
(vollständig deckend) entspricht. Zusätzlich kann das Schlüsselwortnone
verwendet werden, um explizit keinen Alphakanal festzulegen. Wenn derA
-Kanalwert nicht explizit angegeben ist, wird standardmäßig der Alphakanal-Wert der Ursprungsfarbe genommen. Wenn er enthalten ist, wird der Wert durch einen Schrägstrich (/
) vorangestellt.
Definieren der Ausgangskanalkomponenten der relativen Farbe
Bei der Verwendung der relativen Farbsyntax innerhalb einer lch()
-Funktion konvertiert der Browser die Ursprungsfarbe in eine äquivalente Lch-Farbe (wenn sie nicht bereits als solche angegeben ist). Die Farbe ist als drei einzelne Farbkanalwerte definiert — l
(Helligkeit), c
(Chroma) und h
(Farbton) — plus ein Alphakanalwert (alpha
). Diese Kanalwerte sind innerhalb der Funktion verfügbar, um sie zu verwenden, wenn die Ausgangsfarbkanalwerte definiert werden:
- Der
l
-Kanalwert wird auf einen<number>
zwischen0
und100
aufgelöst, einschließlich. - Der
c
-Kanalwert wird auf einen<number>
zwischen0
und150
aufgelöst, einschließlich. - Der
h
-Kanalwert wird auf einen<number>
zwischen0
und360
aufgelöst, einschließlich. - Der
alpha
-Kanal wird auf einen<number>
zwischen0
und1
aufgelöst, einschließlich.
Beim Definieren einer relativen Farbe können die verschiedenen Kanäle der Ausgabefarbe auf verschiedene Arten ausgedrückt werden. Im Folgenden werden wir einige Beispiele untersuchen, um diese zu veranschaulichen.
In den ersten beiden Beispielen unten verwenden wir die relative Farbsyntax. Das erste gibt jedoch dieselbe Farbe wie die Ursprungsfarbe aus und das zweite gibt eine Farbe aus, die überhaupt nicht auf der Ursprungsfarbe basiert. Sie erzeugen eigentlich keine relativen Farben! Sie würden diese wahrscheinlich nicht in einem realen Codebase verwenden und stattdessen einfach einen absoluten Farbwert verwenden. Wir haben diese Beispiele als Ausgangspunkt für das Erlernen der relativen lch()
-Syntax aufgenommen.
Beginnen wir mit einer Ursprungsfarbe von hsl(0 100% 50%)
(entspricht rot
). Die folgende Funktion gibt dieselbe Farbe wie die Ursprungsfarbe aus — sie verwendet die l
, c
und h
Kanalwerte der Ursprungsfarbe (54.29
, 106.854
und 40.856
) als Ausgangskanalwerte:
lch(from hsl(0 100% 50%) l c h)
Diese Funktion gibt die Farbe lch(54.29 106.854 40.856)
aus.
Die nächste Funktion verwendet absolute Werte für die Ausgangsfarbkanalwerte und gibt eine völlig andere Farbe aus, die nicht auf der Ursprungsfarbe basiert:
lch(from hsl(0 100% 50%) 29.6871% 66.83 327.109)
In diesem Fall ist die ausgegebene Farbe lch(29.6871 66.83 327.109)
.
Die folgende Funktion erstellt eine relative Farbe, die auf der Ursprungsfarbe basiert:
lch(from hsl(0 100% 50%) 70 150 h)
In diesem Beispiel:
- Die
hsl()
-Ursprungsfarbe wird in eine äquivalentelch()
-Farbe konvertiert —lch(54.29 106.854 40.856)
. - Der
H
-Kanalwert der Ausgabefarbe wird auf den des äquivalentenH
-Kanalwerts derlch()
-Ursprungsfarbe gesetzt —40.856
. - Die
L
- undC
-Kanalwerte der Ausgabefarbe werden auf neue Werte gesetzt, die nicht auf der Ursprungsfarbe basieren:70
und150
jeweils.
Die endgültige ausgegebene Farbe ist lch(70 150 40.856)
.
Hinweis: Wie oben erwähnt, wird, wenn die Ausgabefarbe ein anderes Farbmodell als die Ursprungsfarbe verwendet, die Ursprungsfarbe im Hintergrund in dasselbe Modell wie die Ausgabefarbe konvertiert, sodass sie in einer kompatiblen Weise dargestellt werden kann (d.h. mit denselben Kanälen).
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 Ausgabefarben-Alphakanal nicht angegeben ist, wird standardmäßig der gleiche Wert wie der Alphakanalwert der Ursprungsfarbe angenommen. Wenn der Alphakanal der Ursprungsfarbe nicht angegeben ist (und es sich nicht um eine relative Farbe handelt), wird standardmäßig 1
angenommen. Daher sind die Ursprungs- und die Ausgabefarben-Alphakanalwerte in den obigen Beispielen 1
.
Sehen wir uns einige Beispiele an, die Ursprungs- und Ausgabefarben-Alphakanalwerte angeben. Das erste gibt den Ausgabefarben-Alphakanalwert als den gleichen wie den Ursprung-Alphakanalwert an, während das zweite einen anderen Ausgabefarben-Alphakanalwert angibt, der nichts mit dem Ursprung-Alphakanalwert zu tun hat.
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) */
Im folgenden Beispiel wird die hsl()
-Ursprungsfarbe erneut in das lch()
-Äquivalent konvertiert — lch(54.29 106.854 40.856)
. calc()
-Berechnungen werden auf die L
-, C
-, H
- und A
-Werte angewendet, was zu einer Ausgabefarbe von lch(74.29 86.8541 0.856018 / 0.9)
führt:
lch(from hsl(0 100% 50%) calc(l + 20) calc(c - 20) calc(h - 40) / calc(alpha - 0.1))
Hinweis:
Da die Ursprungsfarbkanalwerte auf <number>
-Werte aufgelöst werden, müssen Zahlen hinzugefügt werden, wenn sie in Berechnungen verwendet werden, 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>
, zum Beispiel, funktioniert nicht.
Formale Syntax
Beispiele
Anpassen der Helligkeit einer Farbe
Dieses Beispiel zeigt die Wirkung der Variation des L
(Helligkeit) Werts der lch()
-Funktionalnotation.
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);
}
Ergebnis
Anpassung der Farbintensität über Chroma
Das folgende Beispiel zeigt die Wirkung der Variation des C
(Chroma) Werts der lch()
-Funktionalnotation, mit Farben, die in der Intensität abnehmen, während der C
Wert von voll gesättigt bis fast grau abnimmt.
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
Mit den anfänglichen Ausgangsfarben Blau, Rot und Grün, deklarieren wir schrittweise kleinere Werte für Chroma an ihnen: ausgehend von der vollen Farbsättigung am höchsten Wert von 150
(äquivalent zu 100%
) bis 3
(äquivalent zu 2%
), das für alle Farben fast grau ist.
[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);
}
Ergebnis
Hätten wir 0
statt 3
und 2%
verwendet, bei denselben Helligkeitswerten, wären die Farben alle der gleiche Grauton gewesen. In diesem Beispiel sind sie fast grau.
Farbtöne in LCH
Das folgende Beispiel zeigt Farbfelder mit verschiedenen H
(Farbton) Werten der lch()
-Funktionalnotation.
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>
und so weiter.
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);
}
und so weiter.
Ergebnis
Die Farbtonwinkel in lch()
unterscheiden sich von denen in hsl()
. Sehen Sie <hue>
für mehr Informationen. In hsl()
repräsentiert die sRGB-Farbe 0deg
Rot. Im CIELab-Farbraum entspricht 0deg
jedoch Magenta, während Rot ungefähr 41deg
ist.
Einstellung der Deckkraft mit lch()
Das folgende Beispiel zeigt die Wirkung der Variation des A
(Alpha) Werts der lch()
-Funktionalnotation.
Die red
und red-alpha
Elemente überlappen das #background-div
Element, um den Effekt der Deckkraft zu demonstrieren.
Ein A
-Wert von 0.4
macht die Farbe zu 40% deckend.
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);
}
Ergebnis
Verwendung relativer Farben mit lch()
Dieses Beispiel stylt drei <div>
-Elemente mit verschiedenen Hintergrundfarben, um die Verwendung relativer Farben zur Änderung der Helligkeit einer Farbe mit der lch()
-Farb-Funktion zu demonstrieren. Das mittlere <div>
behält die ursprüngliche --base-color
bei, während die linken und rechten <div>
s aufgehellte und abgedunkelte Varianten der --base-color
erhalten.
Diese Varianten werden unter Verwendung relativer Farben definiert — die benutzerdefinierte Eigenschaft --base-color
wird in eine lch()
-Funktion übergeben, und die Ausgangsfarben haben ihren Helligkeitskanal angepasst, um den gewünschten Effekt über eine calc()
-Funktion zu erzielen. Die aufgehellte Farbe hat 15% zur Helligkeit hinzugefügt, und die abgedunkelte Farbe hat 15% von der Helligkeit abgezogen.
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);
}
Ergebnis
Die Ausgabe ist wie folgt:
Spezifikationen
Specification |
---|
CSS Color Module Level 5 # relative-LCH |
CSS Color Module Level 4 # lab-colors |
Browser-Kompatibilität
Siehe auch
- Liste aller Farbnationen
- Verwendung relativer Farben
- CSS-Farben Modul
<hue>
Datentyp- LCH colors in CSS: what, why, and how? von Lea Verou (2020)