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() 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

css
/* 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> zwischen 0 und 100, ein <percentage> zwischen 0% und 100%, oder das Schlüsselwort none (entspricht 0%). Die Zahl 0 entspricht 0% (schwarz), und die Zahl 100 entspricht 100% (weiß). Dieser Wert gibt die Helligkeit der Farbe im CIELab-Farbraum an.

Hinweis: Das L in lch() ist die wahrgenommene Helligkeit, die sich auf die "Helligkeit" bezieht, die wir mit unseren Augen visuell wahrnehmen. Dies unterscheidet sich vom L in hsl(), wo es die Helligkeit im Vergleich zu anderen Farben darstellt.

C

Eine <number>, ein <percentage>, oder das Schlüsselwort none (entspricht in diesem Fall 0%). Dieser Wert ist ein Maß für das Chroma der Farbe (in etwa der "Menge an Farbe"). Sein minimaler nützlicher Wert ist 0%, oder 0, während sein maximaler Wert theoretisch unbegrenzt ist (aber in der Praxis 230 nicht überschreitet), wobei 100% äquivalent zu 150 ist.

H

Eine <number>, ein <angle>, oder das Schlüsselwort none (entspricht 0deg) repräsentierend die Farbton-Winkel der Farbe.

Hinweis: Die Winkel, die bestimmten Farbtönen entsprechen, unterscheiden sich zwischen den sRGB (verwendet von hsl() und hwb()), CIELAB (verwendet von lch()), und Oklab (verwendet von oklch()) 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 Zahl 0 0% (vollständig transparent) und 1 100% (vollständig deckend) entspricht. Zusätzlich kann das Schlüsselwort none verwendet werden, um explizit keinen Alphakanal festzulegen. Wenn der A-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> zwischen 0 und 100, eine <percentage> zwischen 0% und 100%, oder das Schlüsselwort none (entspricht 0%). Die Zahl 0 entspricht 0% (schwarz), und die Zahl 100 entspricht 100% (weiß). Dieser Wert gibt die Helligkeit der Farbe im CIELab-Farbraum an.

C

Eine <number>, ein <percentage>, oder das Schlüsselwort none (entspricht in diesem Fall 0%). Dieser Wert stellt den Chroma-Wert der Ausgabefarbe dar (ungefähr die "Menge an Farbe"). Sein minimaler nützlicher Wert ist 0%, oder 0, während der maximale Wert theoretisch unbegrenzt ist (aber in der Praxis 230 nicht überschreitet), wobei 100% äquivalent zu 150 ist.

H

Eine <number>, ein <angle>, oder das Schlüsselwort none (entspricht 0deg) 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 Zahl 0 0% (vollständig transparent) und 1 100% (vollständig deckend) entspricht. Zusätzlich kann das Schlüsselwort none verwendet werden, um explizit keinen Alphakanal festzulegen. Wenn der A-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> zwischen 0 und 100 aufgelöst, einschließlich.
  • Der c-Kanalwert wird auf einen <number> zwischen 0 und 150 aufgelöst, einschließlich.
  • Der h-Kanalwert wird auf einen <number> zwischen 0 und 360 aufgelöst, einschließlich.
  • Der alpha-Kanal wird auf einen <number> zwischen 0 und 1 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:

css
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:

css
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:

css
lch(from hsl(0 100% 50%) 70 150 h)

In diesem Beispiel:

  • Die hsl()-Ursprungsfarbe wird in eine äquivalente lch()-Farbe konvertiert — lch(54.29 106.854 40.856).
  • Der H-Kanalwert der Ausgabefarbe wird auf den des äquivalenten H-Kanalwerts der lch()-Ursprungsfarbe gesetzt — 40.856.
  • Die L- und C-Kanalwerte der Ausgabefarbe werden auf neue Werte gesetzt, die nicht auf der Ursprungsfarbe basieren: 70 und 150 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.

css
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:

css
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

<lch()> = 
lch( [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ <hue> | none ] [ / [ <alpha-value> | none ] ]? )

<hue> =
<number> |
<angle>

<alpha-value> =
<number> |
<percentage>

Beispiele

Anpassen der Helligkeit einer Farbe

Dieses Beispiel zeigt die Wirkung der Variation des L (Helligkeit) Werts der lch()-Funktionalnotation.

HTML

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

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

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.

css
[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

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

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

html
<div id="background-div">
  <div data-color="red"></div>
  <div data-color="red-alpha"></div>
</div>

CSS

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

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