hsl()
Baseline
Widely available
*
Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.
* Certaines parties de cette fonctionnalité peuvent bénéficier de prise en charge variables.
Note :
La notation fonctionnelle hsla() est un alias de hsl(). Elles sont exactement équivalentes. Il est recommandé d'utiliser hsl().
La fonction de type <color> CSS hsl() exprime un espace de couleur sRGB selon ses composantes de teinte (hue en anglais), saturation, et luminosité. Une composante alpha optionnelle représente l'opacité de la couleur.
Exemple interactif
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%;
}
Il est facile d'utiliser des couleurs complémentaires avec hsl(), car celles-ci sont positionnées à l'opposé du cercle de couleur utilisé par la teinte. Ainsi, si theta est l'angle de la teinte d'une couleur, on pourra obtenir la couleur complémentaire avec l'angle 180deg-theta.
Syntaxe
/* Valeurs absolues */
hsl(120deg 75% 25%)
hsl(120 75 25) /* les unités deg et % sont optionnelles */
hsl(120deg 75% 25% / 60%)
hsl(none 75% 25%)
/* Valeurs relatives */
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))
/* Alias historique 'hsla()' */
hsla(120deg 75% 25% / 60%)
/* Format historique */
hsl(120, 75%, 25%)
hsl(120deg, 75%, 25%, 0.8)
Note :
hsl()/hsla() peuvent aussi s'écrire dans une forme historique où toutes les valeurs sont séparées par des virgules, par exemple hsl(120, 75%, 25%) ou hsla(120deg, 75%, 25%, 0.8). La valeur none n'est pas autorisée dans la syntaxe historique séparée par des virgules ; le deg sur la valeur de teinte est optionnel, et les unités % sont obligatoires pour la saturation et la luminosité.
Valeurs
Ci‑dessous se trouvent les descriptions des valeurs autorisées pour les couleurs à la fois absolues et relatives.
Syntaxe des valeurs absolues
hsl(H S L[ / A])
Les paramètres sont les suivants :
H-
Un
<number>, un<angle>ou le mot‑clénone(équivalent à0degdans ce cas) : représentant l'angle de<hue>de la couleur. S-
Un pourcentage (
<percentage>) ou le mot‑clénone(équivalent à0%dans ce cas). Cette valeur représente la saturation de la couleur.100%est complètement saturé, tandis que0%est complètement désaturé (gris). L-
Un pourcentage (
<percentage>) ou le mot‑clénone(équivalent à0%dans ce cas). Cette valeur représente la luminosité de la couleur.100%correspond au blanc,0%au noir, et50%à la valeur « normale ». AFacultatif-
Un
<alpha-value>représentant la valeur du canal alpha de la couleur, où0correspond à0%(entièrement transparent) et1correspond à100%(entièrement opaque). Le mot‑clénonepeut également être utilisé pour indiquer explicitement l'absence de canal alpha. Si la valeur du canalAn'est pas précisée, elle vaut par défaut100%. Si elle est incluse, elle est précédée d'un slash (/).
Note :
Voir les Composants de couleur manquants pour plus d'informations sur l'effet de none.
Note :
Les couleurs absolues hsl() sont sérialisées en valeurs rgb(). Les valeurs des composantes rouge, verte et bleue peuvent être arrondies lors de la sérialisation.
Syntaxe des valeurs relatives
hsl(from <color> H S L[ / A])
Les paramètres sont les suivants :
from <color>-
Le mot‑clé
fromest toujours présent pour définir une couleur relative, suivi d'une valeur<color>représentant la couleur d'origine. Il s'agit de la couleur de départ sur laquelle se base la couleur relative. La couleur d'origine peut être n'importe quelle syntaxe<color>valide, y compris une autre couleur relative. H-
Un nombre (
<number>), un<angle>ou le mot‑clénone(équivalent à0degdans ce cas) représentant l'angle de<hue>de la couleur de sortie. S-
Un pourcentage (
<percentage>) ou le mot‑clénone(équivalent à0%dans ce cas). Ceci représente la saturation de la couleur de sortie.100%est complètement saturé, tandis que0%est complètement désaturé (gris). L-
Un pourcentage (
<percentage>) ou le mot‑clénone(équivalent à0%dans ce cas). Ceci représente la luminosité de la couleur de sortie.100%correspond au blanc,0%au noir, et50%à la valeur « normale ». AFacultatif-
Une valeur
<alpha-value>représentant la valeur du canal alpha de la couleur de sortie, où0correspond à0%(entièrement transparent) et1correspond à100%(entièrement opaque). Le mot‑clénonepeut également être utilisé pour indiquer explicitement l'absence de canal alpha. Si la valeur du canalAn'est pas précisée, elle prend par défaut la valeur du canal alpha de la couleur d'origine. Si elle est incluse, elle est précédée d'un slash (/).
Note :
Pour permettre la représentation de l'ensemble du spectre des couleurs visibles, la sortie des fonctions de couleur relative hsl() est sérialisée en color(srgb). Ainsi, l'obtention de la valeur de couleur via la propriété HTMLElement.style ou la méthode CSSStyleDeclaration.getPropertyValue() renvoie la couleur de sortie sous la forme d'une valeur color(srgb ...).
Définition des composantes de canal de sortie pour les couleurs relatives
Lorsqu'on utilise la syntaxe de couleur relative à l'intérieur d'une fonction hsl(), le navigateur convertit la couleur d'origine en une couleur HSL équivalente (si elle n'est pas déjà spécifiée ainsi). La couleur est définie par trois valeurs de canal distinctes — h (teinte), s (saturation) et l (luminosité) — plus une valeur de canal alpha (alpha). Ces valeurs de canal sont mises à disposition à l'intérieur de la fonction pour être utilisées lors de la définition des valeurs des canaux de la couleur de sortie :
- La valeur
hest résolue en un nombre<number>compris entre0et360, qui représente la valeur en degrés de la<hue>de la couleur d'origine. - Les valeurs
setlsont chacune résolues en un<number>entre0et100, inclus, où100équivaut à100%. - La valeur
alphaest résolue en un<number>entre0et1, inclus.
Lors de la définition d'une couleur relative, les différents canaux de la couleur de sortie peuvent être exprimés de plusieurs façons. Ci‑dessous, nous étudions quelques exemples pour illustrer ces cas.
Dans les deux premiers exemples ci‑dessous, nous utilisons la syntaxe de couleur relative. Toutefois, le premier renvoie la même couleur que la couleur d'origine et le second renvoie une couleur qui n'est pas du tout basée sur la couleur d'origine. Ils ne créent pas vraiment de couleurs relatives ! Il est peu probable que vous utilisiez ces exemples dans un vrai projet, et vous utiliseriez vraisemblablement une valeur de couleur absolue à la place. Nous avons inclus ces exemples comme point de départ pour apprendre la syntaxe relative de hsl().
Prenons comme couleur d'origine rgb(255 0 0) (équivalent à hsl(0 100% 50%)). La fonction suivante renvoie la même couleur que la couleur d'origine — elle utilise les valeurs de canal h, s et l de la couleur d'origine (0, 100% et 50%) comme valeurs de canal de sortie :
hsl(from rgb(255 0 0) h s l)
La couleur de sortie de cette fonction est l'équivalent sRGB color() de hsl(0 100% 50%) : color(srgb 1 0 0).
La fonction suivante utilise des valeurs absolues pour les valeurs des canaux de la couleur de sortie, produisant une couleur complètement différente, non basée sur la couleur d'origine :
hsl(from rgb(255 0 0) 240 60% 70%)
Dans ce cas, la couleur de sortie est l'équivalent sRGB color() de hsl(240 60% 70%) : color(srgb 0.52 0.52 0.88).
La fonction suivante crée une couleur relative basée sur la couleur d'origine :
hsl(from rgb(255 0 0) h 30% 60%)
Cet exemple :
- Convertit la couleur d'origine (
rgb(255 0 0)) en un équivalenthsl()(hsl(0 100% 50%)). - Définit la valeur du canal
Hde la couleur de sortie sur la valeur du canalHde l'équivalenthsl()de la couleur d'origine —0. - Définit les valeurs des canaux
SetLde la couleur de sortie sur de nouvelles valeurs non basées sur la couleur d'origine :30%et60%, respectivement.
La couleur de sortie finale est l'équivalent de hsl(0 30% 60%) dans l'espace colorimétrique sRGB — color(srgb 0.72 0.48 0.48).
Note : Comme indiqué ci‑dessous, si la couleur de sortie utilise un modèle colorimétrique différent de la couleur d'origine, la couleur d'origine est convertie en arrière‑plan vers le même modèle que la couleur de sortie afin qu'elle puisse être représentée de manière compatible (c'est‑à‑dire en utilisant les mêmes canaux).
Dans les exemples vus jusqu'à présent dans cette section, les canaux alpha n'ont pas été explicitement définis pour la couleur d'origine ni pour la couleur de sortie. Lorsque le canal alpha de la couleur de sortie n'est pas précisé, il prend par défaut la même valeur que le canal alpha de la couleur d'origine. Lorsque le canal alpha de la couleur d'origine n'est pas précisé (et qu'il ne s'agit pas d'une couleur relative), il prend la valeur 1. Par conséquent, les valeurs de canal alpha d'origine et de sortie valent 1 pour les exemples ci‑dessus.
Examinons maintenant des exemples qui précisent les valeurs des canaux alpha d'origine et de sortie. Le premier précise la valeur alpha de sortie comme étant la même que la valeur alpha de la couleur d'origine, tandis que le second précise une valeur alpha de sortie différente, non liée à la valeur alpha de la couleur d'origine.
hsl(from rgb(255 0 0 / 0.8) h s l / alpha)
/* Couleur de sortie calculée : color(srgb 1 0 0 / 0.8) */
hsl(from rgb(255 0 0 / 0.8) h s l / 0.5)
/* Couleur de sortie calculée : color(srgb 1 0 0 / 0.5) */
Dans l'exemple suivant, la couleur d'origine rgb() est à nouveau convertie en une représentation hsl() — hsl(0 100% 50% / 0.8). Des calculs calc() sont appliqués aux valeurs H, S, L et A, et la couleur de sortie finale est l'équivalent de hsl(60 80% 30% / 0.7) dans l'espace colorimétrique sRGB : 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))
Note :
Parce que les valeurs des canaux de la couleur d'origine sont résolues en valeurs <number>, vous devez ajouter des nombres lorsque vous les utilisez dans des calculs, même dans des cas où un canal accepterait normalement <percentage>, <angle> ou d'autres types de valeurs. Par exemple, ajouter un <percentage> à un <number> ne fonctionne pas.
Syntaxe formelle
<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>
Exemples
>Utiliser hsl() avec conic-gradient()
La fonction hsl() fonctionne bien avec la fonction conic-gradient(), les deux travaillant avec des angles.
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);
}
Résultat
Utiliser les couleurs relatives avec hsl()
Cet exemple met en forme trois éléments <div> avec des couleurs d'arrière-plan différentes. Celui du milieu reçoit la variable --base-color non modifiée, tandis que ceux de gauche et de droite reçoivent des variantes éclaircies et assombries de cette --base-color.
Ces variantes sont définies à l'aide de couleurs relatives — la propriété personnalisée --base-color est transmise à une fonction hsl(), et la couleur de sortie a son canal de luminosité modifié pour obtenir l'effet souhaité via une fonction calc(), tandis que la teinte et la saturation restent inchangées. La couleur éclaircie ajoute 20% au canal de luminosité, et la couleur assombrie soustrait 20% à ce canal.
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));
}
/* Utiliser @supports pour ajouter la prise en charge de l'ancienne syntaxe qui exige que les unités %
soient définies dans les calculs de luminosité */
@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%));
}
}
Résultat
Le résultat est le suivant :
Syntaxe historique : valeurs séparées par des virgules
Pour des raisons de compatibilité, la fonction hsl() accepte une forme où toutes les valeurs sont séparées par des virgules.
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);
}
Résultat
Syntaxe historique versus syntaxe moderne
Cet exemple montre que la syntaxe hsla() est un alias de hsl() : les deux sont prises en charge avec la syntaxe moderne et l'ancienne syntaxe (séparée par des virgules).
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);
}
Résultat
Spécifications
| Specification |
|---|
| CSS Color Module Level 5> # relative-HSL> |
| CSS Color Module Level 4> # the-hsl-notation> |
Compatibilité des navigateurs
Chargement…
Voir aussi
- Le type de donnée
<hue> - Les fonctions de couleur
lch()ethwb() - Interpolation de la teinte dans
color-mix() - Liste de toutes les notations de couleur
- Outil de conversion de format de couleur
- Utiliser les couleurs relatives
- Le module des couleurs CSS
- Outil de sélection de couleur (angl.) par Lea Verou