hsl()
Baseline
Widely available
*
This feature is well established and works across many devices and browser versions. It’s been available across browsers since Juli 2015.
* Some parts of this feature may have varying levels of support.
Hinweis:
Die hsla()
Funktionsnotation ist ein Alias für hsl()
. Sie sind genau gleichwertig. Es wird empfohlen, hsl()
zu verwenden.
Die hsl()
Funktionsnotation drückt eine Farbe im sRGB Farbraum aus, basierend auf den Komponenten Farbton, Sättigung und Helligkeit. Eine optionale Alpha-Komponente repräsentiert die Transparenz der Farbe.
Probieren Sie es aus
background: hsl(50 80% 40%);
background: hsl(150deg 30% 60%);
background: hsl(0.3turn 60% 45% / 0.7);
background: hsl(0 80% 50% / 25%);
<section id="default-example">
<div class="transition-all" id="example-element"></div>
</section>
#example-element {
min-width: 100%;
min-height: 100%;
padding: 10%;
}
Die Definition von komplementären Farben mit hsl()
kann durch Addition oder Subtraktion von 180 Grad vom Farbtonwert erfolgen, da sie auf demselben Durchmesser des Farbkreises positioniert sind. Beispielsweise, wenn der Farbtonwinkel einer Farbe 10deg
beträgt, hat ihre komplementäre Farbe 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 #123456 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 älteren Form geschrieben werden, in der alle Werte durch Kommas getrennt sind, beispielsweise hsl(120, 75%, 25%)
oder hsla(120deg, 75%, 25%, 0.8)
. Der Wert none
ist in der durch Kommas getrennten älteren Syntax nicht erlaubt, das deg
für den Farbtonwert ist optional, und die %
-Einheiten sind für die Sättigungs- und Helligkeitswerte erforderlich.
Werte
Im Folgenden 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
(gleichwertig mit0deg
in diesem Fall), das den Farbtonwinkel der Farbe darstellt<hue>
. S
-
Eine
<percentage>
oder das Schlüsselwortnone
(gleichwertig mit0%
in diesem Fall). Dieser Wert repräsentiert die Sättigung der Farbe. Hier ist100%
vollständig gesättigt, während0%
völlig ungesättigt (grau) ist. L
-
Eine
<percentage>
oder das Schlüsselwortnone
(gleichwertig mit0%
in diesem Fall). Dieser Wert repräsentiert die Helligkeit der Farbe. Hier ist100%
weiß,0%
ist schwarz und50%
ist "normal". A
Optional-
Ein
<alpha-value>
, das den Alphakanalwert der Farbe repräsentiert, wobei die Zahl0
0%
(vollständig transparent) 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, wird er standardmäßig auf 100% gesetzt. Wenn enthalten, wird der Wert durch einen Schrägstrich (/
) vorangestellt.
Hinweis:
Weitere Informationen zur Wirkung von none
finden Sie unter Fehlende Farbkomponenten.
Hinweis:
Absolute hsl()
Farben werden zu rgb()
Werten serialisiert. Die Werte der roten, grünen und blauen Komponenten können bei der Serialisierung gerundet werden.
Relative Wertsyntax
hsl(from <color> H S L[ / A])
Die Parameter sind wie folgt:
from <color>
-
Das Schlüsselwort
from
wird immer verwendet, wenn eine relative Farbe definiert wird, gefolgt von einem<color>
Wert, der die Ursprungsfarbe darstellt. Dies ist die Originalfarbe, auf der die relative Farbe basiert. Die Ursprungsfarbe kann jede gültige<color>
-Syntax sein, einschließlich einer anderen relativen Farbe. H
-
Eine
<number>
, ein<angle>
oder das Schlüsselwortnone
(gleichwertig mit0deg
in diesem Fall), das den Farbtonwinkel der Ausgabefarbe darstellt<hue>
. S
-
Eine
<percentage>
oder das Schlüsselwortnone
(gleichwertig mit0%
in diesem Fall). Dies repräsentiert die Sättigung der Ausgabefarbe. Hier ist100%
vollständig gesättigt, während0%
völlig ungesättigt (grau) ist. L
-
Eine
<percentage>
oder das Schlüsselwortnone
(gleichwertig mit0%
in diesem Fall). Dies repräsentiert die Helligkeit der Ausgabefarbe. Hier ist100%
weiß,0%
ist schwarz und50%
ist "normal". A
Optional-
Ein
<alpha-value>
, der den Alphakanalwert der Ausgabefarbe repräsentiert, wobei die Zahl0
0%
(vollständig transparent) 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, entspricht er standardmäßig dem Alphakanalwert der Ursprungsfarbe. Wird er einbezogen, wird der Wert durch einen Schrägstrich (/
) vorangestellt.
Hinweis:
Das Relative hsl()
-Farbfunktionen werden serialisiert zu color(srgb)
, um die Darstellung des gesamten Spektrums sichtbarer Farben vollständig zu ermöglichen. Das bedeutet, dass das Abfragen des Ausgabefarbenwerts über die HTMLElement.style
Eigenschaft oder die CSSStyleDeclaration.getPropertyValue()
Methode den Ausgabefarbenwert als color(srgb ...)
zurückgibt.
Definition der Ausgabekanalkomponenten von relativen Farben
Wenn relative Farbsyntax in einer hsl()
-Funktion verwendet wird, konvertiert der Browser die Ursprungsfarbe in eine äquivalente HSL-Farbe (falls dies nicht bereits als solche angegeben ist). Die Farbe wird als drei verschiedene Farbe-kanalwerte definiert — h
(Farbton), s
(Sättigung) und l
(Helligkeit) — plus ein Alphakanalwert (alpha
). Diese Kanäle-Werte sind innerhalb der Funktion verfügbar, um bei der Definition der Ausgabefarben-Kanalwerte verwendet zu werden:
- Der
h
-Wert wird zu einem<number>
zwischen0
und360
aufgelöst, einschließlich, der den Farbton-Gradwert der Ursprungsfarbe repräsentiert. - Die
s
- undl
-Werte werden jeweils zu einem<number>
zwischen0
und100
aufgelöst, einschließlich, wobei100
100%
entspricht. - Der
alpha
-Wert wird zu einem<number>
zwischen0
und1
aufgelöst, einschließlich.
Bei der Definition einer relativen Farbe können die verschiedenen Kanäle der Ausgabefarbe auf unterschiedliche Weise ausgedrückt werden. Unten werden wir einige Beispiele studieren, um dies zu veranschaulichen.
In den ersten beiden Beispielen unten verwenden wir relative Farbsyntax. Allerdings gibt das erste das gleiche Farbergebnis wie die Ursprungsfarbe aus und das zweite gibt eine Farbe aus, die überhaupt nicht auf der Ursprungsfarbe basiert. Sie erzeugen eigentlich keine relativen Farben! Es ist unwahrscheinlich, dass Sie diese jemals in einem echten Code verwenden, und Sie würden wahrscheinlich stattdessen einfach einen absoluten Farbwert verwenden. Wir haben diese Beispiele als Ausgangspunkt zum Lernen über relative hsl()
-Syntax aufgenommen.
Beginnen wir mit einer Ursprungsfarbe von rgb(255 0 0)
(entspricht hsl(0 100% 50%)
). Die folgende Funktion gibt die gleiche Farbe wie die Ursprungsfarbe aus — sie verwendet die h
, s
und l
Kanalwerte der Ursprungsfarbe (0
, 100%
und 50%
) als Ausgabekanalwerte:
hsl(from rgb(255 0 0) h s l)
Die Ausgabe dieser Funktion ist das 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 Ursprungsfarbe basiert:
hsl(from rgb(255 0 0) 240 60% 70%)
In dem obigen Fall ist die Ausgabefarbe das color()
-Äquivalent von hsl(240 60% 70%)
: color(srgb 0.52 0.52 0.88)
.
Die folgende Funktion erstellt eine relative Farbe auf der Grundlage der Ursprungsfarbe:
hsl(from rgb(255 0 0) h 30% 60%)
Dieses Beispiel:
- Konvertiert die Ursprungsfarbe (
rgb(255 0 0)
) in einhsl()
-Äquivalent (hsl(0 100% 50%)
). - Setzt den
H
-Kanalwert der Ausgabefarbe auf denH
-Kanalwert deshsl()
-Äquivalents der Ursprungsfarbe —0
. - Setzt die
S
- undL
-Kanalwerte der Austrittsfarbe auf neue Werte, die nicht auf der Ursprungsfarbe basieren:30%
und60%
.
Die endgültige Ausgabe 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 Ursprungsfarbe verwendet, wird die Ursprungsfarbe im Hintergrund in das gleiche Modell wie die Ausgabefarbe konvertiert, damit sie auf kompatible Weise dargestellt werden kann (d.h. mit denselben Kanälen).
In den Beispielen, die wir bisher in diesem Abschnitt gesehen haben, wurden für die Ursprungs- oder Ausgabefarben keine Alphakanäle explizit angegeben. Wenn der Ausgabefarb-Alphakanal nicht spezifiziert ist, übernimmt er standardmäßig denselben Wert wie der Ursprungsfarben-Alphakanal. Wenn der Ursprungsfarben-Alphakanal nicht spezifiziert ist (und es sich nicht um eine relative Farbe handelt), übernimmt er standardmäßig 1
. Daher sind die Ursprungs- und Austritts-Alphakanalwerte in den obigen Beispielen 1
.
Schauen wir uns einige Beispiele an, die Ursprungs- und Ausgabefarb-Alphakanalwerte spezifizieren. Das erste spezifiziert den Ausgabefarb-Alphakanal als den gleichen wie den der Ursprungsfarbe, während das zweite einen anderen Ausgabefarb-Alphakanalwert spezifiziert, der nicht mit dem Alphakanalwert der Ursprungsfarbe verwandt ist.
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 Ursprungsfarbkanalwerte zu <number>
-Werten 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. Das Hinzufügen eines <percentage>
zu einem <number>
funktioniert beispielsweise nicht.
Formale 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 Funktion hsl()
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 verschiedenen Hintergrundfarben. Das mittlere Element erhält die unveränderte --base-color
, während die linken und rechten Elemente aufgehellte und abgedunkelte Varianten dieser --base-color
erhalten.
Diese Varianten werden unter Verwendung relativer Farben definiert — die benutzerdefinierte Eigenschaft --base-color
wird in eine hsl()
-Funktion übergeben, und die Ausgabefarbe hat ihren Helligkeitskanal modifiziert, um den gewünschten Effekt über eine calc()
-Funktion zu erzielen, 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 abgezogen.
CSS
:root {
--base-color: orange;
}
#one {
background-color: hsl(from var(--base-color) h s calc(l + 20));
}
#two {
background-color: var(--base-color);
}
#three {
background-color: hsl(from var(--base-color) h s calc(l - 20));
}
/* Use @supports to add in support for old syntax that requires % units to
be specified in lightness calculations */
@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
Die Ausgabe ist wie folgt:
Veraltete Syntax: durch Kommas getrennte Werte
Aus veralteten Gründen akzeptiert die hsl()
Funktion eine Form, in der alle Werte mit Kommas getrennt werden.
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
Veraltete versus moderne Syntax
Das Beispiel demonstriert, wie die hsla()
-Syntax ein Alias für hsl()
ist; beide werden sowohl in modernen als auch in veralteten (durch Kommas getrennten) Syntaxen 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
Loading…
Siehe auch
<hue>
Datentyplch()
undhwb()
Farbfunktions- Farbtoninterpolation in
color-mix()
- Liste aller Farbnennungen
- sRGB-Farbauswahl und Umwandlungswerkzeug
- Verwendung relativer Farben
- CSS-Farben Modul
- Farbwähler-Werkzeug von Lea Verou