Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten. Erfahre mehr über dieses Experiment.

View in English Always switch to English

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

css
/* 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üsselwort none (äquivalent zu 0deg in diesem Fall), das den Farbtonwinkel der Farbe repräsentiert.

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. Weitere Details und Beispiele finden Sie auf der Referenzseite für <hue>.

S

Ein <percentage> oder das Schlüsselwort none (äquivalent zu 0% in diesem Fall). Dieser Wert repräsentiert die Sättigung der Farbe. Hierbei ist 100% vollständig gesättigt, während 0% vollständig ungesättigt (grau) ist.

L

Ein <percentage> oder das Schlüsselwort none (äquivalent zu 0% in diesem Fall). Dieser Wert repräsentiert die Helligkeit der Farbe. Hierbei ist 100% weiß, 0% ist schwarz, und 50% ist "normal".

A Optional

Ein <alpha-value>, das den Alpha-Kanal-Wert der Farbe repräsentiert, wobei die Zahl 0 0% (vollständig transparent) und 1 100% (vollständig undurchsichtig) entspricht. Zusätzlich kann das Schlüsselwort none verwendet werden, um explizit keinen Alpha-Kanal anzugeben. Wenn der A-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 from wird 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üsselwort none (äquivalent zu 0deg in diesem Fall), das den Farbtonwinkel der Ausgabefarbe repräsentiert.

S

Ein <percentage> oder das Schlüsselwort none (äquivalent zu 0% in diesem Fall). Dies repräsentiert die Sättigung der Ausgabefarbe. Hierbei ist 100% vollständig gesättigt, während 0% vollständig ungesättigt (grau) ist.

L

Ein <percentage> oder das Schlüsselwort none (äquivalent zu 0% in diesem Fall). Dies repräsentiert die Helligkeit der Ausgabefarbe. Hierbei ist 100% weiß, 0% ist schwarz, und 50% ist "normal".

A Optional

Ein <alpha-value>, das den Alpha-Kanal-Wert der Ausgabefarbe repräsentiert, wobei die Zahl 0 0% (vollständig transparent) und 1 100% (vollständig undurchsichtig) entspricht. Zusätzlich kann das Schlüsselwort none verwendet werden, um explizit keinen Alpha-Kanal anzugeben. Wenn der A-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> zwischen 0 und 360 aufgelöst, einschließlich, die den Farbtonwert in Grad der Ursprungsfarbe darstellt.
  • Die Werte s und l werden jeweils in eine <number> zwischen 0 und 100 aufgelöst, einschließlich, wobei 100 gleichbedeutend mit 100% ist.
  • Der alpha-Wert wird in eine <number> zwischen 0 und 1 aufgelö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:

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

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

css
hsl(from rgb(255 0 0) h 30% 60%)

Dieses Beispiel:

  • Konvertiert die Ursprungsfarbe (rgb(255 0 0)) in ein hsl()-Äquivalent (hsl(0 100% 50%)).
  • Setzt den H-Kanalwert für die Ausgabefarbe auf den H-Kanalwert des hsl()-Äquivalents der Ursprungsfarbe — 0.
  • Setzt die S- und L-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.

css
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).

css
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

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

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

html
<div class="space-separated"></div>
<div class="comma-separated"></div>

CSS

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

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

css
div {
  width: 100px;
  min-height: 50px;
  font-family: sans-serif;
  display: flex;
  align-items: center;
  justify-content: center;
}
body {
  display: flex;
  gap: 20px;
}
css
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