hsl()
Zapisuje kolor przez odcień na kole barw, nasycenie i jasność. Łatwo w nim rozjaśnić, przyciemnić albo stonować kolor.
Przykład
#:root {
--hue: 262;
}
.btn {
background: hsl(var(--hue) 83% 58%);
color: #fff;
}
.btn:hover {
background: hsl(var(--hue) 83% 46%);
}
.btn.soft {
background: hsl(var(--hue) 83% 58% / 0.15);
color: hsl(var(--hue) 90% 80%);
}<div style="display: flex; flex-wrap: wrap; gap: 12px;">
<button class="btn" type="button" style="padding: 10px 18px; border: 0; border-radius: 10px; font: 600 15px system-ui, sans-serif; cursor: pointer; transition: background-color 0.2s;">Zapisz zmiany</button>
<button class="btn soft" type="button" style="padding: 10px 18px; border: 0; border-radius: 10px; font: 600 15px system-ui, sans-serif;">Podgląd</button>
</div>Najedź na pierwszy przycisk. Potem kliknij „Edytuj” i zmień --hue np. na 160 albo 20: wszystkie odcienie przestawią się naraz.
Definicja i zastosowanie
#Funkcja hsl() opisuje kolor tak, jak myśli o nim człowiek. Pierwsza wartość to odcień (hue), czyli kąt na kole barw: 0 to czerwień, 120 zieleń, 240 niebieski, a 360 znów czerwień. Druga to nasycenie (saturation): 0% daje szarość, 100% najżywszy kolor. Trzecia to jasność (lightness): 0% to zawsze czerń, 100% zawsze biel, a 50% to czysty kolor.
Przewagę nad rgb() widać przy palecie. Ten sam odcień z inną jasnością daje jaśniejszy lub ciemniejszy wariant, np. hsl(262 83% 58%) na przycisk i hsl(262 83% 45%) na jego stan po najechaniu. Przezroczystość dopisujesz po ukośniku: hsl(262 83% 58% / 0.4).
Starsza składnia z przecinkami, hsl(262, 83%, 58%), oraz funkcja hsla() nadal działają. Odcień może mieć jednostkę kąta, np. 262deg albo 0.73turn, a liczba bez jednostki oznacza stopnie.
Słabość HSL: jasność 50% nie wygląda tak samo jasno w każdym odcieniu. Żółty hsl(60 100% 50%) jest dla oka dużo jaśniejszy niż niebieski hsl(240 100% 50%). Jeśli kolory w palecie mają wyglądać na równie jasne, lepiej sprawdzi się oklch().
Składnia
#hsl(<odcień> <nasycenie> <jasność> [/ <alfa>]?)Warianty koloru
#kolor bazowy
Fiolet marki: odcień 262, mocne nasycenie i średnia jasność. W zapisie szesnastkowym to prawie dokładnie#7c3aed.jasność 35%
Ten sam odcień i nasycenie, niższa jasność. Wychodzi ciemniejsza wersja tego samego koloru, dobra na stan po najechaniu.jasność 82%
Wyższa jasność daje pastelowy odcień, np. na tło etykiety albo delikatne podświetlenie.nasycenie 25%
Mniejsze nasycenie przygasza kolor w stronę szarości. Przydaje się do teł i obramowań, które nie mają przyciągać uwagi.odcień 160
Zmiana samego odcienia przesuwa kolor po kole barw, tu do morskiej zieleni.alfa 0.4
Po ukośniku przezroczystość. Przez fiolet prześwituje szachownica tła.
Warianty koloru w praktyce
#hsl(262 83% 58%)
#7c3aed..demo { background: hsl(262 83% 58%); }hsl(262 83% 35%)
.demo { background: hsl(262 83% 35%); }hsl(262 83% 82%)
.demo { background: hsl(262 83% 82%); }hsl(262 25% 58%)
.demo { background: hsl(262 25% 58%); }hsl(160 83% 40%)
.demo { background: hsl(160 83% 40%); }hsl(262 83% 58% / 0.4)
.demo { background: hsl(262 83% 58% / 0.4); }Obsługa przeglądarek
#Szeroko dostępne
Działa we wszystkich nowoczesnych przeglądarkach, także na telefonach. Możesz używać bez obaw.
- Chrome
- Edge
- Firefox
- Safari
Dobre praktyki
#- Warianty jednego koloru (stan po najechaniu, obramowanie, tło) twórz, zmieniając tylko jasność. Paleta będzie spójna.
- Trzymaj odcień w zmiennej, np.
--hue: 262. Nowy motyw kolorystyczny to wtedy zmiana jednej liczby. - Nie porównuj jasności różnych odcieni po samej wartości L. Do palet o równej jasności użyj
oklch().
Powiązane hasła
#- rgb()Zapisuje kolor jako mieszankę światła czerwonego, zielonego i niebieskiego, z opcjonalną przezroczystością. Obejmuje też zapis hex.
- oklch()Zapisuje kolor przez jasność, chromę i odcień w przestrzeni dopasowanej do oka. Kolory o tej samej jasności wyglądają równie jasno.
- color-mix()Miesza dwa kolory w podanych proporcjach i wybranej przestrzeni barw. Tworzy jaśniejsze, ciemniejsze i półprzezroczyste warianty.
- colorUstawia kolor tekstu i domyślny kolor obramowań, dekoracji oraz ikon SVG z currentcolor.
- var()Wstawia wartość zmiennej CSS, czyli właściwości niestandardowej zapisanej jako --nazwa. Pozwala też podać wartość zapasową.
Widzisz błąd albo brakuje przykładu? Napisz do nas.