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 funktionale Notation lch()
drückt eine gegebene Farbe mit dem LCH-Farbraum aus, der Helligkeit, Chroma und Farbton repräsentiert. Es verwendet die gleiche L
-Achse wie die lab()
-Farbfunktion des CIELab-Farbraums, jedoch mit den 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
Nachfolgend sind die Beschreibungen der zulässigen Werte für sowohl absolute als auch relative Farben aufgeführt.
Hinweis:
Normalerweise gilt in CSS, wenn Prozentwerte ein numerisches Äquivalent haben, dass 100%
der Zahl 1
entspricht. Dies ist bei lch()
nicht der Fall. Hier entspricht 100%
der Zahl 100
für den L
-Wert und 150
für den C
-Wert.
Syntax für absolute Werte
lch(L C H[ / A])
Die Parameter sind wie folgt:
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.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>
, eine<percentage>
oder das Schlüsselwortnone
(entspricht in diesem Fall0%
). Dieser Wert misst das Chroma der Farbe (ungefähr die "Menge an Farbe"). Sein minimaler nützlicher Wert ist0%
oder0
, während sein Maximum theoretisch unbegrenzt ist (in der Praxis jedoch nicht mehr als230
), wobei100%
150
entspricht. H
-
Eine
<number>
, eine<angle>
oder das Schlüsselwortnone
(entspricht0deg
), das den Farbtonwinkel der Farbe repräsentiert.Hinweis: Die Winkel, die bestimmten Farbtönen entsprechen, unterscheiden sich je nach sRGB (verwendet von
hsl()
undhwb()
), CIELAB (verwendet vonlch()
) und Oklab (verwendet vonoklch()
) Farbräumen. Siehe das Beispiel für Farbtöne in LCH unten und die<hue>
-Referenzseite für weitere Details und Beispiele. A
Optional-
Ein
<alpha-value>
, das den Alphakanalwert der Farbe repräsentiert, wobei die Zahl0
0%
(vollständig transparent) entspricht und1
100%
(vollständig undurchsichtig) entspricht. Zusätzlich kann das Schlüsselwortnone
verwendet werden, um explizit keinen Alphakanal anzugeben. Wenn derA
-Kanalwert nicht explizit angegeben wird, beträgt der Standardwert 100%. Falls enthalten, wird der Wert durch einen Schrägstrich (/
) vorangestellt.
Hinweis:
Siehe Fehlende Farbkomponenten für weitere Informationen über die Auswirkung von none
.
Syntax für relative Werte
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 ursprüngliche Farbe repräsentiert. Dies ist die ursprüngliche Farbe, auf der die relative Farbe basiert. Die ursprüngliche Farbe kann in jeder gültigen<color>
-Syntax angegeben werden, 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>
, eine<percentage>
oder das Schlüsselwortnone
(entspricht in diesem Fall0%
). Dieser Wert repräsentiert den Chroma-Wert der Ausgabefarbe (ungefähr die "Menge an Farbe"). Sein minimaler nützlicher Wert ist0%
oder0
, sein Maximum ist theoretisch unbegrenzt (in der Praxis jedoch nicht mehr als230
), wobei100%
150
entspricht. H
-
Eine
<number>
, eine<angle>
oder das Schlüsselwortnone
(entspricht0deg
), die den<hue>
-Winkel der Ausgabefarbe repräsentiert. Siehe das Farbbsp. unten. A
Optional-
Ein
<alpha-value>
, das den Alphakanalwert der Ausgabefarbe repräsentiert, wobei die Zahl0
0%
(vollständig transparent) entspricht und1
100%
(vollständig undurchsichtig) entspricht. Zusätzlich kann das Schlüsselwortnone
verwendet werden, um explizit keinen Alphakanal anzugeben. Wenn derA
-Kanalwert nicht explizit angegeben wird, ist der Standardwert der Alphakanalwert der ursprünglichen Farbe. Falls enthalten, wird der Wert durch einen Schrägstrich (/
) vorangestellt.
Definieren von relativen Farbausgabekanal-Komponenten
Bei der Verwendung der relativen Farbsyntax innerhalb einer lch()
-Funktion konvertiert der Browser die ursprüngliche Farbe in eine äquivalente Lch-Farbe (falls diese nicht bereits so angegeben ist). Die Farbe wird als drei separate Farbkanal-Werte definiert - l
(Helligkeit), c
(Chroma) und h
(Farbton) - plus ein Alphakanal-Wert (alpha
). Diese Kanal-Werte stehen innerhalb der Funktion zur Verfügung, um bei der Definition der Ausgabefarbkanal-Werte verwendet zu 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 betrachten wir einige Beispiele, um dies zu veranschaulichen.
In den ersten beiden Beispielen unten verwenden wir die relative Farbsyntax. Allerdings liefert das erste das gleiche Ergebnis wie die ursprüngliche Farbe und das zweite ergibt eine Farbe, die nicht auf der ursprünglichen Farbe basiert. Sie erzeugen eigentlich keine relativen Farben! Diese würden Sie wahrscheinlich nie in einem realen Code verwenden, und stattdessen einfach einen absoluten Farbwert verwenden. Wir haben diese Beispiele als Ausgangspunkt für das Lernen über die relative lch()
-Syntax aufgenommen.
Beginnen wir mit einer ursprünglichen Farbe von hsl(0 100% 50%)
(entspricht rot
). Die folgende Funktion gibt die gleiche Farbe wie die ursprüngliche Farbe aus — sie verwendet die l
, c
und h
Kanalwerte der ursprünglichen Farbe als Ausgabekanalwerte:
lch(from hsl(0 100% 50%) l c h)
Die Ausgabe der Funktion ist die Farbe lch(54.29 106.854 40.856)
.
Die nächste Funktion verwendet absolute Werte für die Kanalwerte der Ausgabefarbe und gibt eine komplett andere Farbe aus, die nicht auf der ursprünglichen Farbe basiert:
lch(from hsl(0 100% 50%) 29.6871% 66.83 327.109)
In dem obigen Fall ist die Ausgabefarbe lch(29.6871 66.83 327.109)
.
Die folgende Funktion erstellt eine relative Farbe basierend auf der ursprünglichen Farbe:
lch(from hsl(0 100% 50%) 70 150 h)
Dieses Beispiel:
- Konvertiert die
hsl()
-Ursprungsfarbe in eine äquivalentelch()
-Farbe —lch(54.29 106.854 40.856)
. - Setzt den
H
-Kanalwert für die Ausgabefarbe auf denH
-Kanalwert der äquivalenten Ursprunglch()
-Farbe —40.856
. - Setzt die
L
- undC
-Kanalwerte der Ausgabefarbe auf neue Werte, die nicht auf der ursprünglichen Farbe basieren:70
und150
jeweils.
Die endgültige Ausgabefarbe ist lch(70 150 40.856)
.
Hinweis: Wie oben erwähnt, wenn die Ausgabefarbe ein anderes Farbmodell als die ursprüngliche Farbe verwendet, wird die ursprüngliche Farbe im Hintergrund in das gleiche Modell wie die Ausgabefarbe konvertiert, sodass sie in einer kompatiblen Weise dargestellt werden kann (d.h. mit den gleichen Kanälen).
In den Beispielen, die wir bisher in diesem Abschnitt gesehen haben, wurden die Alphakanäle weder für die ursprünglichen noch für die Ausgabefarben ausdrücklich angegeben. Wenn der Alphakanal der Ausgabefarbe nicht angegeben ist, nimmt er standardmäßig denselben Wert wie der Alphakanal der ursprünglichen Farbe an. Wenn der Alphakanal der ursprünglichen Farbe nicht angegeben ist (und es sich nicht um eine relative Farbe handelt), beträgt sein Standardwert 1
. Daher betragen die Ursprung- und Ausgabefarbkanalwerte 1
für die oben genannten Beispiele.
Schauen wir uns einige Beispiele an, die Ursprung- und Ausgabefarbkanalwerte spezifisch angeben. Das erste gibt den Alphakanalwert der Ausgabe an, der dem Alphakanalwert der ursprünglichen Farbe entspricht, während das zweite einen anderen, nicht mit dem Ursprung-Alphakanalwert zusammenhängenden Ausgangs-Alphakanalwert spezifiziert.
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 wieder 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 Ursprung-Farbkanalwerte in <number>
-Werte aufgelöst werden, müssen Sie Zahlen zu ihnen 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
Anpassen der Helligkeit einer Farbe
Dieses Beispiel zeigt die Auswirkung von variierenden L
(Helligkeit)-Werten 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 von variierenden C
(Chroma)-Werten der lch()
-Funktionalnotation, wobei die Farben an Intensität abnehmen, wenn der C
-Wert von vollständig gesättigt zu 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
Bei den anfänglichen Ausgangsfarben Blau, Rot und Grün deklarieren wir sukzessiv kleinere Chromawerte: beginnend mit voller Farbsättigung bei dem höchsten Wert von 150
(entsprechend 100%
) bis hin zu 3
(entsprechend 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%
mit denselben Helligkeitswerten verwendet hätten, wären alle Farben in diesem Beispiel derselbe 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()
. Siehe <hue>
für weitere Informationen. In hsl()
repräsentiert der sRGB-Farbton 0deg
Rot. Jedoch entspricht im CIELab-Farbraum 0deg
Magenta, während Rot ungefähr 41deg
ist.
Anpassung der Deckkraft mit lch()
Das folgende Beispiel zeigt den Effekt des variierens des A
(Alpha)-Wertes der lch()
-Funktionalnotation.
Die red
- und red-alpha
-Elemente überlagern das #background-div
-Element, um die Wirkung der Deckkraft zu demonstrieren.
Geben Sie A
einen Wert von 0.4
, um die Farbe 40% deckend zu machen.
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 relativer Farben mit lch()
Dieses Beispiel stylt drei <div>
-Elemente mit unterschiedlichen Hintergrundfarben, um die Verwendung von relativen Farben zu demonstrieren, um die Helligkeit einer Farbe mit der lch()
-Farb-Funktion zu ändern. 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 von relativen Farben definiert — die --base-color
benutzerdefinierte Eigenschaft wird in eine lch()
-Funktion übergeben, und die Ausgabefarben haben ihren Helligkeitskanal modifiziert, um den gewünschten Effekt über eine calc()
-Funktion zu erzielen. Die aufgehellte Farbe hat 15% zum Helligkeitskanal hinzugefügt, und die abgedunkelte Farbe hat 15% vom Helligkeitskanal subtrahiert.
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
Siehe auch
- Liste aller Farbnotationen
- Verwendung relativer Farben
- CSS-Farben-Modul
<hue>
Datentyp- LCH-Farben in CSS: was, warum und wie? von Lea Verou (2020)