hsl()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
Hinweis: Die funktionale Notation hsla()
ist ein Alias für hsl()
. Sie sind exakt gleichwertig. Es wird empfohlen, hsl()
zu verwenden.
Die hsl()
-funktionale Notation drückt eine Farbe im sRGB-Farbraum aus, gemäß ihren Komponenten Farbton, Sättigung und Helligkeit. Eine optionale Alpha-Komponente repräsentiert die Transparenz der Farbe.
Probieren Sie es aus
Komplementärfarben mit hsl()
können definiert werden, indem 180 Grad zum Farbtonwert addiert oder davon subtrahiert werden, da sie auf dem gleichen Durchmesser des Farbkreises positioniert sind. Zum Beispiel, wenn der Farbtonwinkel einer Farbe 10deg
beträgt, hat ihre Komplementärfarbe 190deg
als Farbtonwinkel.
Syntax
/* Absolute values */
hsl(120deg 75% 25%)
hsl(120 75 25) /* deg and % units are optional */
hsl(120deg 75% 25% / 60%)
hsl(none 75% 25%)
/* Relative values */
hsl(from green h s l / 0.5)
hsl(from #0000FF h s calc(l + 20))
hsl(from rgb(200 0 0) calc(h + 30) s calc(l + 30))
/* Legacy 'hsla()' alias */
hsla(120deg 75% 25% / 60%)
/* Legacy format */
hsl(120, 75%, 25%)
hsl(120deg, 75%, 25%, 0.8)
Hinweis: hsl()
/hsla()
kann auch in einer alten Form geschrieben werden, bei der alle Werte mit Kommas getrennt sind, zum Beispiel hsl(120, 75%, 25%)
oder hsla(120deg, 75%, 25%, 0.8)
. Der Wert none
ist in der mit Komma getrennten Syntax der alten Schreibweise nicht erlaubt, das deg
beim Farbtonwert ist optional und die %
-Einheiten sind für die Werte der Sättigung und Helligkeit erforderlich.
Werte
Nachfolgend sind Beschreibungen der zulässigen Werte sowohl für absolute als auch für relative Farben aufgeführt.
Absolute Wertsyntax
hsl(H S L[ / A])
Die Parameter sind wie folgt:
H
-
Eine
<number>
, ein<angle>
oder das Schlüsselwortnone
(entspricht in diesem Fall0deg
) repräsentiert den<hue>
-Winkel der Farbe. S
-
Ein
<percentage>
oder das Schlüsselwortnone
(entspricht in diesem Fall0%
). Dieser Wert repräsentiert die Sättigung der Farbe. Hierbei ist100%
vollständig gesättigt, während0%
vollständig ungesättigt (grau) ist. L
-
Ein
<percentage>
oder das Schlüsselwortnone
(entspricht in diesem Fall0%
). Dieser Wert repräsentiert die Helligkeit der Farbe. Hierbei ist100%
weiß,0%
ist schwarz und50%
ist "normal". A
Optional-
Ein
<alpha-value>
, das den Alphakanal-Wert der Farbe repräsentiert, wobei die Zahl0
0%
entspricht (vollständig transparent) und1
100%
entspricht (vollständig undurchsichtig). Zusätzlich kann das Schlüsselwortnone
verwendet werden, um explizit keinen Alphakanal anzugeben. Wenn derA
-Kanalwert nicht explizit angegeben wird, liegt er standardmäßig bei 100%. Falls inkludiert, wird der Wert von einem Schrägstrich (/
) eingeleitet.
Hinweis: Weitere Informationen über die Wirkung von none
finden Sie unter Fehlende Farbkomponenten.
Hinweis: Absolute hsl()
-Farben werden in rgb()
-Werten serialisiert. Die Werte der roten, grünen und blauen Komponenten können beim Serialisieren gerundet werden.
Relative Wertsyntax
hsl(from <color> H S L[ / A])
Die Parameter sind wie folgt:
from <color>
-
Das Schlüsselwort
from
wird immer eingefügt, 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 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
) repräsentiert den Ausgabefarben-<hue>
-Winkel. S
-
Ein
<percentage>
oder das Schlüsselwortnone
(entspricht in diesem Fall0%
). Dies repräsentiert die Sättigung der Ausgabefarbe. Hierbei ist100%
vollständig gesättigt, während0%
vollständig ungesättigt (grau) ist. L
-
Ein
<percentage>
oder das Schlüsselwortnone
(entspricht in diesem Fall0%
). Dies repräsentiert die Helligkeit der Ausgabefarbe. Hierbei ist100%
weiß,0%
ist schwarz und50%
ist "normal". A
Optional-
Ein
<alpha-value>
, das den Alphakanal-Wert der Ausgabefarbe repräsentiert, wobei die Zahl0
0%
entspricht (vollständig transparent) und1
100%
entspricht (vollständig undurchsichtig). Zusätzlich kann das Schlüsselwortnone
verwendet werden, um explizit keinen Alphakanal anzugeben. Wenn derA
-Kanalwert nicht explizit angegeben wird, liegt er standardmäßig beim Alphakanalwert der ursprünglichen Farbe. Falls inkludiert, wird der Wert von einem Schrägstrich (/
) eingeleitet.
Hinweis: Um die Darstellung des gesamten Spektrums der sichtbaren Farben vollständig zu ermöglichen, wird die Ausgabe von relativen hsl()
-Farb-Funktionen zu color(srgb)
serialisiert. Das bedeutet, dass das Abfragen des Ausgabefarbenwerts über die HTMLElement.style
-Eigenschaft oder die CSSStyleDeclaration.getPropertyValue()
-Methode die Ausgabefarbe als color(srgb ...)
-Wert zurückgibt.
Definition der Ausgabekanal-Komponenten relativer Farbausgaben
Wenn die relative Farbsyntax innerhalb einer hsl()
-Funktion verwendet wird, konvertiert der Browser die ursprüngliche Farbe in eine gleichwertige HSL-Farbe (falls sie nicht bereits so spezifiziert wurde). Die Farbe wird als drei separate Farbkanalwerte definiert — h
(Farbton), s
(Sättigung) und l
(Helligkeit) — plus einen Alphakanalwert (alpha
). Diese Kanalwerte stehen innerhalb der Funktion zur Verfügung, um bei der Definition der Ausgabefarbenkanalwerte verwendet zu werden:
- Der
h
-Wert wird auf einen<number>
zwischen0
und360
, inklusiv, aufgelöst, der den Farbtonwert der ursprünglichen Farbe repräsentiert. - Die
s
- undl
-Werte werden jeweils auf einen<number>
zwischen0
und100
, inklusiv, aufgelöst, wobei100
gleichbedeutend mit100%
ist. - Der
alpha
-Wert wird auf einen<number>
zwischen0
und1
, inklusiv, aufgelöst.
Beim Definieren einer relativen Farbe können die verschiedenen Kanäle der Ausgabefarbe auf mehrere verschiedene Arten ausgedrückt werden. Im Folgenden werden einige Beispiele untersucht, um diese zu veranschaulichen.
In den ersten beiden Beispielen unten verwenden wir die relative Farbsyntax. Allerdings gibt das erste Beispiel die gleiche Farbe wie die ursprüngliche Farbe zurück und das zweite gibt eine Farbe aus, die überhaupt nicht auf der ursprünglichen Farbe basiert. Sie erstellen eigentlich keine relativen Farben! Sie würden diese wahrscheinlich nie in einem echten Codebase verwenden und stattdessen einfach einen absoluten Farbwert verwenden. Wir haben diese Beispiele als Ausgangspunkt für das Lernen über die relative hsl()
-Syntax aufgenommen.
Beginnen wir mit einer ursprünglichen Farbe von rgb(255 0 0)
(entspricht hsl(0 100% 50%)
). Die folgende Funktion gibt die gleiche Farbe wie die ursprüngliche Farbe aus — sie verwendet die h
-, s
- und l
-Kanalwerte (0
, 100%
und 50%
) der ursprünglichen Farbe als Ausgabekanalwerte:
hsl(from rgb(255 0 0) h s l)
Die Ausgabe dieser Funktion ist das sRGB-color()
-Äquivalent von hsl(0 100% 50%)
: 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 ursprünglichen Farbe basiert:
hsl(from rgb(255 0 0) 240 60% 70%)
Im obigen Fall ist die Ausgabefarbe das sRGB-color()
-Äquivalent von hsl(240 60% 70%)
: color(srgb 0.52 0.52 0.88)
.
Die folgende Funktion erstellt eine relative Farbe basierend auf der ursprünglichen Farbe:
hsl(from rgb(255 0 0) h 30% 60%)
Dieses Beispiel:
- Konvertiert die ursprüngliche Farbe (
rgb(255 0 0)
) in einhsl()
-Äquivalent (hsl(0 100% 50%)
). - Setzt den
H
-Kanalwert für die Ausgabefarbe auf denH
-Kanalwert der ursprünglichenhsl()
-Äquivalentfarbe —0
. - Setzt die
S
- undL
-Kanalwerte der Ausgabefarbe auf neue Werte, die nicht auf der ursprünglichen Farbe basieren:30%
und60%
.
Die endgültige Ausgabefarbe ist das Äquivalent von hsl(0 30% 60%)
im sRGB-Farbraum — color(srgb 0.72 0.48 0.48)
.
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 dasselbe Modell wie die Ausgabefarbe konvertiert, sodass sie auf eine Weise dargestellt werden kann, die kompatibel ist (d.h. mit denselben Kanälen).
In den bisher gesehenen Beispielen in diesem Abschnitt wurden die Alphakanäle weder für die ursprünglichen noch für die Ausgabefarben explizit angegeben. Wenn der Alphakanal der Ausgabefarbe nicht spezifiziert ist, übernimmt er standardmäßig denselben Wert wie der Alphakanal der ursprünglichen Farbe. Wenn der Alphakanal der ursprünglichen Farbe nicht spezifiziert ist (und es sich um keine relative Farbe handelt), liegt der Standardwert bei 1
. Daher sind die Werte der Ursprung- und Ausgabekanäle in den obigen Beispielen 1
.
Schauen wir uns einige Beispiele an, die Ursprung- und Ausgabekanäle spezifizieren. Das erste Beispiel spezifiziert den Ausgabekanalwert als den gleichen wie den Ursprungskanalwert, wohingegen das zweite Beispiel einen anderen Ausgabekanalwert spezifiziert, der nicht mit dem Ursprungskanalwert zusammenhängt.
hsl(from rgb(255 0 0 / 0.8) h s l / alpha)
/* Computed output color: color(srgb 1 0 0 / 0.8) */
hsl(from rgb(255 0 0 / 0.8) h s l / 0.5)
/* Computed output color: color(srgb 1 0 0 / 0.5) */
Im folgenden Beispiel wird die rgb()
-Ursprungsfarbe erneut in eine hsl()
-Repräsentation konvertiert — hsl(0 100% 50% / 0.8)
. calc()
-Berechnungen werden auf die H
-, S
-, L
- und A
-Werte angewendet, und die endgültige Ausgabefarbe ist das Äquivalent von hsl(60 80% 30% / 0.7)
im sRGB-Farbraum: color(srgb 0.72 0.72 0.08 / 0.7)
.
hsl(from rgb(255 0 0 / 0.8) calc(h + 60) calc(s - 20) calc(l - 10) / calc(alpha - 0.1))
Hinweis: Da die Ursprungskanalwerte zu <number>
-Werten aufgelöst werden, müssen Sie beim Durchführen von Berechnungen Zahlen hinzufügen, 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.
Formaler Syntax
<hsl()> =
<legacy-hsl-syntax> |
<modern-hsl-syntax>
<legacy-hsl-syntax> =
hsl( <hue> , <percentage> , <percentage> , <alpha-value>? )
<modern-hsl-syntax> =
hsl( [ <hue> | none ] [ <percentage> | <number> | none ] [ <percentage> | <number> | none ] [ / [ <alpha-value> | none ] ]? )
<hue> =
<number> |
<angle>
<alpha-value> =
<number> |
<percentage>
Beispiele
Verwendung von hsl() mit conic-gradient()
Die hsl()
-Funktion funktioniert gut mit conic-gradient()
, da beide mit Winkeln arbeiten.
CSS
div {
width: 100px;
height: 100px;
background: conic-gradient(
hsl(360 100% 50%),
hsl(315 100% 50%),
hsl(270 100% 50%),
hsl(225 100% 50%),
hsl(180 100% 50%),
hsl(135 100% 50%),
hsl(90 100% 50%),
hsl(45 100% 50%),
hsl(0 100% 50%)
);
clip-path: circle(closest-side);
}
Ergebnis
Verwendung relativer Farben mit hsl()
Dieses Beispiel stylt drei <div>
-Elemente mit unterschiedlichen Hintergrundfarben. Das mittlere erhält die unveränderte --base-color
, während die linken und rechten aufgehellte und abgedunkelte Varianten dieser --base-color
erhalten.
Diese Varianten werden mithilfe relativer Farben definiert — die --base-color
benutzerdefinierte Eigenschaft wird in eine hsl()
-Funktion eingespeist, und die Ausgabefarbe hat ihren Helligkeitskanal modifiziert, um den gewünschten Effekt über eine calc()
-Funktion zu erreichen, während der Farbton und die Sättigung unverändert bleiben. Die aufgehellte Farbe hat 20% zum Helligkeitskanal hinzugefügt, und die abgedunkelte Farbe hat 20% davon subtrahiert.
CSS
:root {
--base-color: orange;
}
/* As per the spec, s and l 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 l + 0.2 instead of l + 20 */
#one {
background-color: hsl(from var(--base-color) h s calc(l + 0.2));
}
#two {
background-color: var(--base-color);
}
#three {
background-color: hsl(from var(--base-color) h s calc(l - 0.2));
}
/* Use @supports to add in support for old syntax that requires % units to
be specified in lightness calculations. This is required for
Safari 16.4+ */
@supports (color: hsl(from red h s calc(l - 20%))) {
#one {
background-color: hsl(from var(--base-color) h s calc(l + 20%));
}
#three {
background-color: hsl(from var(--base-color) h s calc(l - 20%));
}
}
Ergebnis
Das Ergebnis ist wie folgt:
Alte Syntax: Komma-getrennte Werte
Aus Kompatibilitätsgründen akzeptiert die hsl()
-Funktion eine Form, in der alle Werte unter Verwendung von Kommas getrennt sind.
HTML
<div class="space-separated"></div>
<div class="comma-separated"></div>
CSS
div {
width: 100px;
height: 50px;
margin: 1rem;
}
div.space-separated {
background-color: hsl(0 100% 50% / 50%);
}
div.comma-separated {
background-color: hsl(0, 100%, 50%, 0.5);
}
Ergebnis
Alte gegenüber moderner Syntax
Das Beispiel zeigt, wie die hsla()
-Syntax ein Alias für hsl()
ist; beide werden sowohl in der modernen als auch in der alten (Komma-getrennten) Syntax unterstützt.
HTML
<div class="modern">HSL</div>
<div class="legacy">HSL</div>
<div class="modernWithAlpha">HSL</div>
<div class="modernHSLA">HSLA</div>
<div class="legacyHSLA">HSLA</div>
CSS
div {
width: 100px;
min-height: 50px;
font-family: sans-serif;
display: flex;
align-items: center;
justify-content: center;
}
body {
display: flex;
gap: 20px;
}
div.modern {
background-color: hsl(90 80% 50%);
}
div.legacy {
background-color: hsl(90, 80%, 50%);
}
div.modernWithAlpha {
background-color: hsl(90 80% 50% / 50%);
}
div.modernHSLA {
background-color: hsla(90 80% 50% / 50%);
}
div.legacyHSLA {
background-color: hsla(90, 80%, 50%, 0.5);
}
Ergebnis
Spezifikationen
Specification |
---|
CSS Color Module Level 5 # relative-HSL |
CSS Color Module Level 4 # the-hsl-notation |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
<hue>
Datentyplch()
undhwb()
Farbfunktionen- Farbtoninterpolation in
color-mix()
- Liste aller Farbnotationen
- sRGB-Farbauswahl und Konvertierungstool
- Verwendung relativer Farben
- CSS Farben Modul
- Farbwähler-Tool von Lea Verou