hsl() CSS-Funktion
Baseline
Weitgehend verfügbar
*
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
* Einige Teile dieser Funktion werden möglicherweise unterschiedlich gut unterstützt.
Hinweis:
Die hsla()-Funktionalnotation ist ein Alias für hsl(). Sie sind exakt äquivalent. Es wird empfohlen, hsl() zu verwenden.
Die hsl()-Funktionalnotation beschreibt eine Farbe im sRGB-Farbraum anhand ihrer Komponenten Farbton (Hue), Sättigung (Saturation) und Helligkeit (Lightness). 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%;
}
Komplementärfarben mit hsl() können definiert werden, indem 180 Grad zum Farbtonwert hinzugefügt oder von ihm subtrahiert werden, da sie sich auf demselben Durchmesser des Farbkreises befinden. Wenn der Farbtonwinkel einer Farbe z.B. 10deg beträgt, hat die 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 #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, bei der alle Werte durch Kommas getrennt sind, zum Beispiel hsl(120, 75%, 25%) oder hsla(120deg, 75%, 25%, 0.8). Der Wert none ist in der komma-separierten alten Syntax nicht erlaubt, das deg beim Farbtonwert ist optional, und die %-Einheiten sind für die Sättigungs- und Helligkeitswerte erforderlich.
Werte
Nachfolgend finden Sie Beschreibungen der zulässigen Werte sowohl für absolute als auch für relative Farben.
Syntax für absolute Werte
hsl(H S L[ / A])
Die Parameter sind wie folgt:
H-
Eine
<number>, ein<angle>oder das Schlüsselwortnone(äquivalent zu0degin diesem Fall), das den Farbtonwinkel der Farbe repräsentiert. S-
Ein
<percentage>oder das Schlüsselwortnone(äquivalent zu0%in diesem Fall). 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(äquivalent zu0%in diesem Fall). Dieser Wert repräsentiert die Helligkeit der Farbe. Hierbei ist100%weiß,0%ist schwarz, und50%ist "normal". AOptional-
Ein
<alpha-value>, das den Alpha-Kanal-Wert der Farbe repräsentiert, wobei die Zahl00%(vollständig transparent) und1100%(vollständig undurchsichtig) entspricht. Zusätzlich kann das Schlüsselwortnoneverwendet werden, um explizit keinen Alpha-Kanal anzugeben. Wenn derA-Kanalwert nicht explizit angegeben ist, wird er standardmäßig auf 100% gesetzt. Wenn er enthalten ist, wird der Wert von einem Schrägstrich (/) vorangestellt.
Hinweis:
Weitere Informationen über die Auswirkung von none finden Sie unter Fehlende Farbkomponenten.
Hinweis:
Absolute hsl()-Farben werden in rgb()-Werte serialisiert. Die Werte der Komponenten für Rot, Grün und Blau können bei der Serialisierung gerundet werden.
Syntax für relative Werte
hsl(from <color> H S L[ / A])
Die Parameter sind wie folgt:
from <color>-
Das Schlüsselwort
fromwird immer verwendet, 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. H-
Eine
<number>, ein<angle>oder das Schlüsselwortnone(äquivalent zu0degin diesem Fall), das den Farbtonwinkel der Ausgabefarbe repräsentiert. S-
Ein
<percentage>oder das Schlüsselwortnone(äquivalent zu0%in diesem Fall). 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(äquivalent zu0%in diesem Fall). Dies repräsentiert die Helligkeit der Ausgabefarbe. Hierbei ist100%weiß,0%ist schwarz, und50%ist "normal". AOptional-
Ein
<alpha-value>, das den Alpha-Kanal-Wert der Ausgabefarbe repräsentiert, wobei die Zahl00%(vollständig transparent) und1100%(vollständig undurchsichtig) entspricht. Zusätzlich kann das Schlüsselwortnoneverwendet werden, um explizit keinen Alpha-Kanal anzugeben. Wenn derA-Kanalwert nicht explizit angegeben ist, wird er standardmäßig auf den Alpha-Kanalwert der Ursprungsfarbe gesetzt. Wenn er enthalten ist, wird der Wert von einem Schrägstrich (/) vorangestellt.
Hinweis:
Um die Darstellung des vollständigen Spektrums der sichtbaren Farben vollständig zu ermöglichen, wird die Ausgabe der relativen hsl()-Farbfunktionen in color(srgb) serialisiert. Das bedeutet, dass das Abrufen des Ausgabefarbenwertes über die HTMLElement.style-Eigenschaft oder die CSSStyleDeclaration.getPropertyValue()-Methode den Ausgabefarbenwert als color(srgb ...)-Wert zurückgibt.
Definieren der Ausgabekanalkomponenten für relative Farben
Wenn die relative Farbsyntax innerhalb einer hsl()-Funktion verwendet wird, konvertiert der Browser die Ursprungsfarbe in eine äquivalente HSL-Farbe (falls sie nicht bereits als solche angegeben ist). Die Farbe wird als drei separate Farbschallwerte definiert — h (Farbton), s (Sättigung) und l (Helligkeit) — plus einem Alpha-Kanalswert (alpha). Diese Kanalwerte werden innerhalb der Funktion verfügbar gemacht, um bei der Definition der Ausgabefarbschallwerte verwendet zu werden:
- Der
h-Wert wird in eine<number>zwischen0und360aufgelöst, einschließlich, die den Farbtonwert in Grad der Ursprungsfarbe darstellt. - Die Werte
sundlwerden jeweils in eine<number>zwischen0und100aufgelöst, einschließlich, wobei100gleichbedeutend mit100%ist. - Der
alpha-Wert wird in eine<number>zwischen0und1aufgelöst, einschließlich.
Bei der Definition einer relativen Farbe können die verschiedenen Kanäle der Ausgabefarbe auf mehrere verschiedene Arten ausgedrückt werden. Nachfolgend werden wir einige Beispiele studieren, um diese zu veranschaulichen.
In den ersten zwei Beispielen unten verwenden wir die relative Farbsyntax. Das erste Beispiel gibt jedoch dieselbe Farbe wie die Ursprungsfarbe aus, und das zweite Beispiel gibt eine Farbe aus, die überhaupt nicht auf der Ursprungsfarbe basiert. Sie erstellen nicht wirklich relative Farben! Diese würden Sie wahrscheinlich nie in einem echten Code verwenden und würden stattdessen wahrscheinlich einfach einen absoluten Farbwert verwenden. Wir haben diese Beispiele als Ausgangspunkt für das Lernen über die relative hsl()-Syntax aufgenommen.
Lassen Sie uns mit einer Ursprungsfarbe von rgb(255 0 0) beginnen (äquivalent zu hsl(0 100% 50%)). Die folgende Funktion gibt dieselbe Farbe wie die Ursprungsfarbe aus — sie verwendet die h-, s- und l-Kanalwerte (0, 100% und 50%) der Ursprungsfarbe als die Ausgabekanalwerte:
hsl(from rgb(255 0 0) h s l)
Die Ausgabe dieser Funktion ist color(srgb 1 0 0), das color()-Äquivalent zur sRGB von hsl(0 100% 50%).
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 diesem Fall ist die Ausgabefarbe color(srgb 0.52 0.52 0.88), das sRGB-Äquivalent von hsl(240 60% 70%).
Die folgende Funktion erstellt eine relative Farbe basierend auf 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 für die Ausgabefarbe auf denH-Kanalwert deshsl()-Äquivalents der Ursprungsfarbe —0. - Setzt die
S- undL-Kanalwerte der Ausgabefarbe auf neue Werte, die nicht auf der Ursprungsfarbe basieren:30%bzw.60%.
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 Ursprungsfarbe verwendet, wird die Ursprungsfarbe im Hintergrund in dasselbe Modell wie die Ausgabefarbe konvertiert, damit sie in einer Weise dargestellt werden kann, die kompatibel ist (d.h. mit denselben Kanälen).
In den bisher in diesem Abschnitt gesehenen Beispielen wurden die Alpha-Kanäle weder für die Ursprungs- noch für die Ausgabefarben explizit angegeben. Wenn der Ausgabefarbe-Alpha-Kanal nicht angegeben wird, wird er standardmäßig auf denselben Wert wie der Alpha-Kanal der Ursprungsfarbe gesetzt. Wenn der Alpha-Kanal der Ursprungsfarbe nicht angegeben wird (und es sich nicht um eine relative Farbe handelt), wird er standardmäßig auf 1 gesetzt. Daher sind die Alpha-Kanalwerte der Ursprungs- und Ausgabefarben für die oben genannten Beispiele 1.
Lassen Sie uns einige Beispiele betrachten, die die Alpha-Kanalwerte der Ursprungs- und Ausgabefarben spezifizieren. Das erste Beispiel gibt an, dass der Alpha-Kanalwert der Ausgabe dieselbe wie der der Ursprungsfarbe sein soll, während im zweiten Beispiel ein anderer Alpha-Kanalwert der Ausgabe spezifiziert wird, der mit dem Alpha-Kanal der Ursprungsfarbe nicht 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 Ursprungsfarbe rgb() erneut in eine hsl()-Darstellung umgewandelt — 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 in <number>-Werte aufgelöst werden, müssen Sie Zahlen hinzuzufü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( [ from <color> ]? [ <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 umgehen.
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 von relativen Farben mit hsl()
Dieses Beispiel gestaltet drei <div>-Elemente mit verschiedenen Hintergrundfarben. Das mittlere erhält die unveränderte --base-color, während die linke und rechte Varianten dieser --base-color erhellt und verdunkelt werden.
Diese Varianten werden unter Verwendung relativer Farben definiert – die --base-color benutzerdefinierte Eigenschaft wird in eine hsl()-Funktion übergeben, und die Ausgabefarbe hat ihren Helligkeitskanal modifiziert, um den gewünschten Effekt mit einer calc()-Funktion zu erreichen, während Farbton und Sättigung unverändert bleiben. Die aufgehellte Farbe hat 20% zum Helligkeitskanal hinzugefügt, und die verdunkelte Farbe hat 20% davon subtrahiert.
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:
Alte Syntax: kommagetrennte Werte
Aus Gründen der Kompatibilität akzeptiert die hsl()-Funktion eine Form, in der alle Werte durch 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 (kommagetrennten) 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
| Spezifikation |
|---|
| CSS Color Module Level 5> # relative-HSL> |
| CSS Color Module Level 4> # the-hsl-notation> |
Browser-Kompatibilität
Siehe auch
<hue>Datentyplch()undhwb()Farbmethoden- Farbtoninterpolation in
color-mix() - Liste aller Farbnotationen
- Farbformatkonverter-Werkzeug
- Verwendung von relativen Farben
- CSS-Farben Modul
- Farbwähler-Tool von Lea Verou