lch()
Baseline 2023
Newly 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()
funktionale Notation drückt eine gegebene Farbe mit dem LCH-Farbraum aus, der Helligkeit, Chroma und Farbton darstellt. Sie verwendet dieselbe L
-Achse wie die lab()
-Farbfunktion 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 sind Beschreibungen der erlaubten Werte für sowohl absolute als auch relative Farben aufgeführt.
Hinweis: In der Regel gilt, wenn Prozentwerte einen numerischen Äquivalent in CSS haben, dass 100%
der Zahl 1
entspricht.
Das ist bei lch()
nicht der Fall. 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 bestimmt die Helligkeit der Farbe im CIELab-Farbraum.Hinweis: Das
L
inlch()
ist die wahrgenommene Helligkeit, die sich auf die "Helligkeit" bezieht, die wir visuell mit unseren Augen wahrnehmen. Dies unterscheidet sich von demL
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 die "Menge der Farbe"). Sein minimal nützlicher Wert ist0%
, oder0
, während sein Maximum theoretisch unbegrenzt ist (praktisch jedoch nicht über230
hinausgeht), wobei100%
150
entspricht. H
-
Eine
<number>
, eine<angle>
, oder das Schlüsselwortnone
(entspricht0deg
), das den Farbtonwinkel der Farbe darstellt.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 das Beispiel zu Farbtönen in LCH unten und die<hue>
-Referenzseite für mehr Details und Beispiele. A
Optional-
Ein
<alpha-value>
, der den Alpha-Kanal-Wert der Farbe darstellt, wobei die Zahl0
0%
(vollständig transparent) und1
100%
(vollständig undurchsichtig) entspricht. Zusätzlich kann das Schlüsselwortnone
verwendet werden, um keinen Alpha-Kanal explizit anzugeben. Wenn derA
-Kanal-Wert nicht explizit angegeben wird, wird er auf 100% gesetzt. Wenn er enthalten ist, wird der Wert durch einen Schrägstrich (/
) vorangestellt.
Hinweis: Weitere Informationen zu den Auswirkungen von none
finden Sie unter Fehlende Farbkomponenten.
Relative Wertsyntax
lch(from <color> L C H[ / A])
Die Parameter sind wie folgt:
from <color>
-
Das Schlüsselwort
from
ist immer enthalten, wenn eine relative Farbe definiert wird, gefolgt von einem<color>
-Wert, der die Ursprungsfarbe darstellt. Dies ist die ursprüngliche Farbe, auf der die relative Farbe basiert. Die Ursprungsfarbe kann jede gültige<color>
-Syntax sein, einschließlich einer anderen relativen Farbe. 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 bestimmt die Helligkeit der Farbe im CIELab-Farbraum. 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 der Farbe"). Sein minimal nützlicher Wert ist0%
, oder0
, während sein Maximum theoretisch unbegrenzt ist (praktisch jedoch nicht über230
hinausgeht), wobei100%
150
entspricht. H
-
Eine
<number>
, eine<angle>
, oder das Schlüsselwortnone
(entspricht0deg
), das den Farbtonwinkel der Ausgabefarbe darstellt. Sehen Sie das Farbtonbeispiel unten. A
Optional-
Ein
<alpha-value>
, der den Alpha-Kanal-Wert der Ausgabefarbe darstellt, wobei die Zahl0
0%
(vollständig transparent) und1
100%
(vollständig undurchsichtig) entspricht. Zusätzlich kann das Schlüsselwortnone
verwendet werden, um keinen Alpha-Kanal explizit anzugeben. Wenn derA
-Kanal-Wert nicht explizit angegeben wird, wird er auf den Alpha-Kanal-Wert der Ursprungsfarbe gesetzt. Wenn er enthalten ist, wird der Wert durch einen Schrägstrich (/
) vorangestellt.
Definition von Ausgabekanalkomponenten für relative Farben
Bei der Verwendung der relativen Farbsyntax innerhalb einer lch()
-Funktion wandelt der Browser die Ursprungsfarbe in eine äquivalente Lch-Farbe um (wenn sie nicht bereits als solche angegeben ist). Die Farbe wird als drei verschiedene Farbkanalwerte definiert — l
(Helligkeit), c
(Chroma) und h
(Farbton) — plus einem Alpha-Kanal-Wert (alpha
). Diese Kanalwerte stehen innerhalb der Funktion zur Verfügung, um bei der Definition der Ausgabe-Farbkanalwerte verwendet zu werden:
- Der
l
-Kanalwert wird in einen<number>
zwischen0
und100
aufgelöst. - Der
c
-Kanalwert wird in einen<number>
zwischen0
und150
aufgelöst. - Der
h
-Kanalwert wird in einen<number>
zwischen0
und360
aufgelöst. - Der
alpha
-Kanal wird in einen<number>
zwischen0
und1
aufgelöst.
Bei der Definition einer relativen Farbe können die verschiedenen Kanäle der Ausgabefarbe auf verschiedene Weise ausgedrückt werden. Unten werden einige Beispiele untersucht, um diese zu verdeutlichen.
In den ersten beiden Beispielen unten verwenden wir die relative Farbsyntax. Das erste Beispiel gibt allerdings dieselbe Farbe aus wie die Ursprungfarbe, und das zweite Beispiel gibt eine Farbe aus, die überhaupt nicht auf der Ursprungfarbe basiert. Sie erzeugen im Grunde keine relativen Farben! Solche Fälle würden in einem echten Code wahrscheinlich nie verwendet werden, und es würden vermutlich einfach absolute Farbwerte genutzt werden. Wir haben diese Beispiele als Ausgangspunkt präsentiert, um die relative lch()
-Syntax zu verstehen.
Beginnen wir mit einer Ursprungsfarbe von hsl(0 100% 50%)
(entspricht rot
). Die folgende Funktion gibt dieselbe Farbe wie die Ursprungfarbe aus — sie verwendet die l
-, c
- und h
-Kanalwerte (54.29
, 106.854
und 40.856
) der Ursprungfarbe auch als Ausgabekanalwerte:
lch(from hsl(0 100% 50%) l c h)
Die Ausgabefarbe dieser Funktion ist lch(54.29 106.854 40.856)
.
Die nächste Funktion verwendet absolute Werte für die Ausgabefarbkanalwerte und gibt eine völlig andere Farbe aus, die nicht auf der Ursprungfarbe basiert:
lch(from hsl(0 100% 50%) 29.6871% 66.83 327.109)
In diesem Fall ist die Ausgabefarbe lch(29.6871 66.83 327.109)
.
Die folgende Funktion erzeugt eine relative Farbe basierend auf der Ursprungfarbe:
lch(from hsl(0 100% 50%) 70 150 h)
Dieses Beispiel:
- Wandelt die
hsl()
-Ursprungsfarbe in eine äquivalentelch()
-Farbe um —lch(54.29 106.854 40.856)
. - Setzt den
H
-Kanalwert für die Ausgabefarbe auf denH
-Kanalwert der äquivalenten Ursprungslchfarbe —40.856
. - Setzt die
L
- undC
-Kanalwerte der Ausgabefarbe auf neue Werte, die nicht auf der Ursprungfarbe basieren:70
und150
respektive.
Die finale Ausgabefarbe ist lch(70 150 40.856)
.
Hinweis: Wie oben beschrieben, wird, wenn die Ausgabefarbe ein anderes Farbmodell als die Ursprungfarbe verwendet, die Ursprungfarbe im Hintergrund in dasselbe Modell wie die Ausgabefarbe umgewandelt, so dass sie kompatibel dargestellt werden kann (d. h. mit denselben Kanälen).
In den bisher in diesem Abschnitt gezeigten Beispielen wurden die Alpha-Kanäle weder für die Ursprungs- noch für die Ausgabefarben explizit angegeben. Wenn der Alpha-Kanal der Ausgabefarbe nicht angegeben ist, übernimmt er den gleichen Wert wie der Alpha-Kanal der Ursprungfarbe. Wenn der Alpha-Kanal der Ursprungfarbe nicht angegeben ist (und es sich nicht um eine relative Farbe handelt), ist der Standardwert 1
. Daher sind die Ursprungs- und Ausgabe-Alpha-Kanalwerte in den obigen Beispielen 1
.
Schauen wir uns einige Beispiele an, die die Ursprungs- und Ausgabefarben-Alpha-Kanalwerte angeben. Das erste Beispiel gibt an, dass der Ausgabefarben-Alpha-Kanalwert dem Alpha-Kanalwert der Ursprung entspricht, während das zweite Beispiel einen anderen Ausgabefarben-Alpha-Kanalwert angibt, der nicht mit dem Ursprung-Alpha-Kanalwert in Verbindung steht.
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 Sie diesen Zahlen hinzufügen, wenn Sie sie in Berechnungen verwenden, selbst in Fällen, in denen ein Kanal normalerweise <percentage>
, <angle>
oder andere Werttypen akzeptieren würde. Zum Beispiel funktioniert das Hinzufügen eines <percentage>
zu einem <number>
nicht.
Formale Syntax
Beispiele
Die Helligkeit einer Farbe anpassen
Dieses Beispiel zeigt die Auswirkung einer Variierung des L
- (Helligkeit) Wertes der lch()
-Funktionsnotation.
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
Farbeintensität über Chroma anpassen
Das folgende Beispiel zeigt die Auswirkung einer Variierung des C
- (Chroma) Wertes der lch()
-Funktionsnotation, wobei Farben in ihrer Intensität abnehmen, während der C
-Wert von vollständig 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 definieren wir progressiv kleinere Werte für Chroma: Beginnend bei voller Farbsättigung mit dem höchsten Wert von 150
(entspricht 100%
) bis hin zu 3
(entspricht 2%
), was 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
Wenn wir 0
anstelle von 3
und 2%
verwendet hätten, mit 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 unterschiedlichen H
- (Farbton) Werten der lch()
-Funktionsnotation.
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()
. Weitere Informationen finden Sie unter <hue>
. In hsl()
bedeutet der sRGB-Farbton 0deg
rot. Im CIELab-Farbraum entspricht 0deg
jedoch Magenta, während rot ungefähr 41deg
ist.
Opazität mit lch() anpassen
Das folgende Beispiel zeigt die Auswirkung einer Variierung des A
- (Alpha) Wertes der lch()
-Funktionsnotation.
Die red
- und red-alpha
-Elemente überlappen sich mit dem #background-div
-Element, um die Auswirkung der Opazität zu demonstrieren.
Wenn A
den Wert 0.4
erhält, wird die Farbe zu 40% opak.
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
Verwenden von relativen Farben mit lch()
Dieses Beispiel stylt drei <div>
-Elemente mit unterschiedlichen Hintergrundfarben und zeigt die Verwendung von relativen Farben zur Änderung der Helligkeit einer Farbe mit der lch()
-Farbfunktion. Das mittlere <div>
behält die ursprüngliche --base-color
, während die linken und rechten <div>
s aufgehellte und verdunkelte Varianten von 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 Ausgabefarben haben ihren Helligkeitskanal modifiziert, um den gewünschten Effekt über eine calc()
-Funktion zu erreichen. Die aufgehellte Farbe hat 15% zum Helligkeitskanal hinzugefügt, und die verdunkelte Farbe hat 15% vom Helligkeitskanal 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
Das Ergebnis ist wie folgt:
Spezifikationen
Specification |
---|
CSS Color Module Level 5 # relative-LCH |
CSS Color Module Level 4 # lab-colors |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Liste aller Farbnotationen
- Verwendung von relativen Farben
- CSS-Farben Modul
<hue>
Datentyp- LCH-Farben in CSS: was, warum und wie? von Lea Verou (2020)