Skip to content

Konwerter HEX na HSL

Konwertuj dowolny kolor HEX na HSL w przeglądarce — obsługa 3-, 6- i 8-cyfrowego HEX z kanałem alfa. Bezpłatny, natychmiastowy, bez rejestracji, kolory nigdy nie opuszczają strony.

Bez śledzenia Działa w przeglądarce Bezpłatne
Cała konwersja kolorów odbywa się lokalnie w przeglądarce. Żadne dane nie są wysyłane na serwer.
Gamut: sRGB Display P3 Rec2020
Kontrast względem:
AA AA-Lg AAA AAA-Lg · APCA Lc
Symulacja ślepoty barw (8 typów)
Protanopia (ślepota na czerwień)
Deuteranopia (ślepota na zieleń)
Tritanopia (ślepota na niebieski)
Achromatopsja (całkowita)
Protanomalia (osłabiona czerwień)
Deuteranomalia (osłabiona zieleń)
Tritanomalia (osłabiony niebieski)
Achromatomalia (częściowa)
Jaśniejsze odcienie / Ciemniejsze odcienie / Tony / Harmonie

Jaśniejsze odcienie

Ciemniejsze odcienie

Tony

Harmonie

Skopiuj jako kod
Najczęstsze kolory — słownik
Zrecenzowane pod kątem zgodności z CSS Color 4 §6.4, wsparcia kształtów HEX 3/4/6/8-cyfrowych, poprawności dekodowania par alfa oraz stabilności w obie strony między HEX a HSL w zakresach 0–360° barwy i 0–100% S/L. — Zespół inżynierów Go Tools · May 27, 2026

Czym jest konwerter HEX na HSL?

Konwerter HEX na HSL to małe narzędzie, które zamienia kod koloru HEX (`#3b82f6`) na cylindryczną trójkę barwa / nasycenie / jasność kodującą ten sam kolor sRGB (`hsl(217 91% 60%)`). Kody HEX to zwięzły, sześciocyfrowy ciąg w systemie szesnastkowym, który projektanci i deweloperzy wklejają między Figmą, Sketchem, Photoshopem, brand-guideline PDF-ami i arkuszami stylów CSS — trzy 8-bitowe kanały spakowane w 6-znakową formę `#RRGGBB`, zakotwiczone w przestrzeni barw sRGB zdefiniowanej w IEC 61966-2-1 w 1996. HSL to cylindryczne przekształcenie tej samej przestrzeni barw na trzy bardziej przyjazne projektantom osie: kąt barwy na kole kolorów, chromatyczny procent nasycenia oraz procent jasności. Deweloperzy konwertują HEX → HSL nieustannie: aby zdefiniować kolor marki jako zmienną CSS i potem komponować jaśniejsze lub ciemniejsze odcienie, korygując tylko L; aby zasilić interfejs selektora kolorów, który wyświetla Hue i SL jako osobne kontrolki; aby wygenerować rampy jaśniejszych i ciemniejszych odcieni dla systemu designu; albo aby wykonać matematykę zmiennych CSS w czasie wykonania przez `hsl(from var(--primary) h s calc(l + 10%))` dla wyprowadzonych tokenów motywu. To narzędzie uruchamia konwersję na żywo w trakcie pisania, bez przycisku „Konwertuj”, który trzeba klikać, i pokazuje każdy inny popularny format koloru (RGB, OKLCH, OKLAB, HSV, HWB, CMYK plus 148 nazwanych kolorów CSS) obok wyjścia HSL i bezpłatnie.

**Sam format HSL zasługuje na bliższe spojrzenie.** HSL = Hue (0–360°), Saturation (0–100%), Lightness (0–100%). Hue to kątowa pozycja na kole kolorów — 0° to czerwony, 60° to żółty, 120° to zielony, 180° to cyjan, 240° to niebieski, 300° to magenta, a 360° zawija się z powrotem do czerwonego. Saturation to intensywność chromatyczna od 0% (achromatyczna szarość) do 100% (w pełni chromatyczna, bez domieszki szarości). Lightness to jasność od 0% (czysta czerń, niezależnie od barwy lub nasycenia) przez 50% (czysta barwa przy pełnej chromie) do 100% (czysta biel, niezależnie od barwy lub nasycenia). Alvy Ray Smith opublikował pierwotne wyprowadzenie w 1978 jako część wczesnego rozwoju grafiki komputerowej, aby dać projektantom układy współrzędnych bliższe ich kognitywnemu modelowi koloru niż surowe adresowanie kanałów RGB. Model jest w CSS od CSS3 (2010) i działa w każdej przeglądarce wstecz do IE 9. Pierwotna składnia CSS używała przecinków: `hsl(217, 91%, 60%)` dla nieprzezroczystego, `hsla(217, 91%, 60%, 0.5)` dla wersji z kanałem alfa. CSS Color 4 (W3C Candidate Recommendation od 2022) dodał nowoczesną formę z rozdziałem spacjami: `hsl(217 91% 60%)` i `hsl(217 91% 60% / 0.5)` z kanałem alfa po ukośniku — ten sam kształt składni co inne funkcyjne notacje z CSS Color 4 (`rgb()`, `lab()`, `oklch()`, `color()`). Barwę można też wyrażać w obrotach (`hsl(0.6turn 91% 60%)`) lub radianach (`hsl(3.787rad 91% 60%)`), wszystkie równoważne kanonicznej formie w stopniach. Każda aktualnie aktualizowana przeglądarka parsuje każdy syntaktyczny wariant; narzędzie domyślnie emituje nowoczesną formę z rozdziałem spacjami.

Matematyka konwersji działa czysto w obu kierunkach. **HEX → HSL** to dwuetapowy potok. Najpierw sparsuj 6-cyfrowy HEX `#RRGGBB` jako trzy 2-cyfrowe liczby w systemie szesnastkowym przez `parseInt(hex.slice(1, 3), 16)` itd., aby uzyskać liczby całkowite kanałów RGB w 0–255. Następnie znormalizuj każdy kanał do 0–1, dzieląc przez 255, potem wylicz `max = Math.max(r, g, b)`, `min = Math.min(r, g, b)`, `delta = max - min`. Jasność to średnia max i min: `L = (max + min) / 2`. Nasycenie zależy od jasności: gdy L ≤ 0.5, `S = delta / (max + min)`; gdy L > 0.5, `S = delta / (2 - max - min)`. Równoważnie w formie z CSS Color 4 §6.4, `S = delta / (1 - |2L - 1|)` (z S = 0, gdy delta = 0). Barwa jest fragmentaryczna w zależności od tego, który kanał jest maksymalny: gdy R jest maksymalne, `H = ((G - B) / delta) % 6`; gdy G jest maksymalne, `H = (B - R) / delta + 2`; gdy B jest maksymalne, `H = (R - G) / delta + 4`; pomnóż przez 60, aby przeskalować do stopni, dodaj 360, jeśli ujemne. Odwrotność (HSL → HEX, przez RGB) używa pomocnika `f(n) = L - a * max(-1, min(k-3, 9-k, 1))`, gdzie `a = S * min(L, 1-L)` i `k = (n + H/30) mod 12`, zastosowanego z n = 0, 8, 4, aby wyprodukować R, G, B, a następnie przeskalowanego do 0–255 i zakodowanego w HEX.

**Dlaczego HSL nadal jest użyteczne.** Intuicyjne suwaki — korygowanie L przewidywalnie rozjaśnia lub przyciemnia bez naruszania tożsamości barwy, podczas gdy korygowanie kanału RGB daje mniej przewidywalne przesunięcie koloru. Matematyka CSS w czasie wykonania — nowoczesne przeglądarki wspierają `hsl(from var(--primary) h s calc(l + 10%))`, aby wyprowadzać tokeny motywu w czasie renderowania. Kognicja projektanta — projektanci wychowani na selektorach kolorów HSV myślą o kolorze w kategoriach barwy + chromy, nawet gdy plik wypisuje HEX. **Problem HSL** polega na tym, że jego oś Lightness nie jest percepcyjnie jednorodna — zielony przy L=50% wygląda widocznie jaśniej niż niebieski przy L=50%, ponieważ HSL dziedziczy dziwactwa gamma sRGB i traktuje każdą barwę jako równoważną na skali L. Gdy potrzebujesz percepcyjnej jednorodności (generowanie palet, w którym każdy krok powinien wyglądać równie jasno; obliczenia tokenów trybu ciemnego, które nie sprawiają przypadkiem, że niebieski tekst jest trudniejszy do czytania niż zielony), sięgnij po OKLCH — to samo narzędzie pokazuje oba, więc wybór jest jednym spojrzeniem oddalony.

Przepływ HEX → HSL tego narzędzia to jeden kierunek z pięciu w rodzinie odgałęzień, które wszystkie współdzielą ten sam podstawowy zunifikowany konwerter kolorów. Dedykowany zunifikowany konwerter kolorów to hub — pokazuje wszystkie 9 formatów jednocześnie edytowalnych i jest właściwym narzędziem, gdy twój przepływ wymaga więcej niż tylko HEX i HSL. Jednokierunkowe odgałęzienia celują w konkretne intencje wyszukiwania w Google: konwerter HEX na RGB dla kierunku pod canvas i sprzęt, konwerter RGB na HEX dla kierunku odwrotnego, konwerter HEX na OKLCH dla nowoczesnych percepcyjnie jednorodnych systemów designu (Tailwind v4 i shadcn obecnie domyślnie używają OKLCH) oraz konwerter HEX na CMYK dla przybliżeń pod przygotowanie druku. Wszystkie pięć odgałęzień i hub współdzielą ten sam silnik parsowania i tę samą matematykę konwersji, więc wyniki są gwarantowane identyczne w całej rodzinie. Każda konwersja działa lokalnie w przeglądarce — twoje kody HEX nigdy nie są wysyłane, nigdy logowane, a w trakcie pisania nie wysyłane są żadne zapytania sieciowe. Sprawdź w DevTools.

// Convert a hex color string to {h, s, l, alpha} per CSS Color 4 §6.4
// h in 0-360, s and l in 0-1, alpha in 0-1.
function hexToHsl(input) {
  let h = input.trim().replace(/^#/, '');
  if (h.length === 3 || h.length === 4) h = h.split('').map(c => c + c).join('');
  const r = parseInt(h.slice(0, 2), 16) / 255;
  const g = parseInt(h.slice(2, 4), 16) / 255;
  const b = parseInt(h.slice(4, 6), 16) / 255;
  const alpha = h.length === 8 ? parseInt(h.slice(6, 8), 16) / 255 : 1;
  const max = Math.max(r, g, b), min = Math.min(r, g, b), delta = max - min;
  const L = (max + min) / 2;
  const S = delta === 0 ? 0 : delta / (1 - Math.abs(2 * L - 1));
  let H = 0;
  if (delta !== 0) {
    if (max === r) H = ((g - b) / delta) % 6;
    else if (max === g) H = (b - r) / delta + 2;
    else H = (r - g) / delta + 4;
    H = (H * 60 + 360) % 360;
  }
  return { h: H, s: S, l: L, alpha };
}

console.log(hexToHsl('#3b82f6')); // { h: 217, s: 0.91, l: 0.60, alpha: 1 }

Kluczowe funkcje

Wszystkie pięć kształtów HEX parsowanych identycznie

3-cyfrowy `#F73`, 4-cyfrowy z kanałem alfa `#F738`, 6-cyfrowy `#3b82f6`, 8-cyfrowy z kanałem alfa `#FF573380`, plus wariant bez `#` dla każdego. Parser normalizuje je wszystkie do tego samego wewnętrznego koloru przed wyprowadzeniem HSL, więc możesz wkleić dowolny kształt używany w źródle bez ręcznego rozwijania skrótu. Wielkość liter jest też normalizowana — `#3b82f6` i `#3B82F6` dają identyczne wyjście HSL.

Wyjście HSL w nowoczesnej składni z rozdziałem spacjami

Pole HSL pokazuje wartość w nowoczesnej formie CSS Color 4: `hsl(217 91% 60%)` dla kolorów nieprzezroczystych, `hsl(217 91% 60% / 0.5)` dla kolorów z kanałem alfa. Oba kształty działają w każdej aktualnie aktualizowanej przeglądarce (Chrome 65+, Safari 13+, Firefox 52+). Starsza forma z przecinkami `hsl(217, 91%, 60%)` jest oddalona o jedną mechaniczną zamianę, jeśli tego wymaga twój cel; nowoczesna składnia jest preferowana w nowym kodzie, bo pasuje do innych funkcyjnych składni z CSS Color 4.

OKLCH jako źródło prawdy, nie HSL jako pivot

Mimo że to odgałęzienie celuje konkretnie w HEX → HSL, współdzielony bazowy konwerter trzyma kanoniczny kolor jako trójkę OKLCH wewnętrznie. Oznacza to, że konwersja w obie strony HEX → HSL → RGB → OKLAB → HEX odbywa się bez dryfu zmiennoprzecinkowego między krokami; starsze konwertery, które trasują przez HSL jako pivot, akumulują błąd zaokrąglenia i potrafią przesunąć barwę o kilka stopni na przestrzeni kilku konwersji. Pivot w OKLCH utrzymuje każdy inny format matematycznie zakotwiczony do tego samego punktu źródłowego.

Kanał alfa dekodowany czysto

8- i 4-cyfrowy HEX z kanałem alfa (`#RRGGBBAA` i `#RGBA`) są parsowane poprawnie. Końcowa para mapuje się na liczbę zmiennoprzecinkową alfa 0–1: `00` → 0, `80` → 0,502, `FF` → 1. Wyjście domyślnie używa ukośnikowej składni CSS Color 4 (`hsl(217 91% 60% / 0.5)`); starsza forma `hsla(217, 91%, 60%, 0.5)` jest oddalona o jedną zamianę. Przydatne przy migracji tokenów designu, gdzie wartości alfa mogły być pochowane w 8-cyfrowych kodach HEX.

Osiem innych formatów widocznych jednocześnie

Ten sam HEX, który wklejasz, napędza też RGB, HSV, HWB, OKLCH, OKLAB, CMYK oraz najbliższy nazwany kolor CSS — wszystko widoczne na pierwszy rzut oka na tej samej stronie. Nigdy nie jesteś zamknięty tylko w HEX → HSL. Jeśli ktoś z zespołu potrzebuje trójki OKLCH na token Tailwind v4 (gdzie percepcyjna jednorodność ma większe znaczenie niż gammowo-dziwaczne L w HSL), najbliższego nazwanego koloru do tekstu dokumentacji albo krotki RGB do wywołania canvasu, wartości są już tam ze swoimi przyciskami Kopiuj.

Wbudowany kontrast WCAG + APCA

Przepuść HEX, a wiersz kontrastu od razu oceni go względem bieli i czerni za pomocą WCAG 2.1 (próg regulacyjny: 4,5:1 dla tekstu treści, 7:1 dla AAA) oraz APCA Lc (proponowany następca w WCAG 3: cel `|Lc| ≥ 75` dla tekstu treści). Przydatne, gdy właśnie skonwertowałeś HEX marki na HSL i chcesz zweryfikować, czy wynikowy kolor (albo wariant o skorygowanej jasności) faktycznie czyta się jako kolor tekstu treści, zanim go wdrożysz.

Skopiuj jako CSS / Tailwind v4 / SwiftUI / Compose / Flutter

Pod selektorem sekcja Skopiuj jako kod zamienia bieżący kolor w gotowe do wklejenia fragmenty dla pięciu platform: niestandardowa właściwość CSS (`--color-brand: hsl(217 91% 60%)`), token `@theme` Tailwind v4, literał SwiftUI `Color(hue:saturation:brightness:)`, stała Jetpack Compose `Color.hsl(217f, 0.91f, 0.60f)`, Flutter `HSLColor.fromAHSL(...)`. Dokładna składnia, której oczekuje każda platforma, gotowa do wrzucenia w katalog assetów iOS, plik motywu Androida albo `ThemeData` Fluttera.

100% w przeglądarce — bez wysyłki, bez śledzenia

Całe parsowanie HEX, konwersja HSL, ocena kontrastu i generowanie palet działa lokalnie w przeglądarce. Twoje kody HEX nigdy nie są przesyłane, nigdy logowane na żadnym serwerze, nigdy analizowane. Zero zapytań sieciowych w trakcie pisania — sprawdź w DevTools. Bezpieczne dla niezapowiedzianych palet marki, wewnętrznych tokenów designu, szkiców makiet pod NDA i każdej innej poufnej pracy z kolorem.

Hash adresu URL z udostępnianiem dokładnego koloru

Bieżący kolor koduje się w hashu adresu URL jako `#hex=3b82f6` automatycznie przy każdej zmianie. Skopiuj URL, wklej do wątku na Slacku albo do zgłoszenia na GitHubie, a każdy, kto go otworzy, ląduje na tym samym HEX-ie z tą samą trójką HSL. Hash żyje wyłącznie w pasku adresu i nigdy nie jest przesyłany na serwer (przeglądarki nie dołączają fragmentów URL do zapytań HTTP), więc nawet udostępniony link nie wycieka koloru do żadnej strony trzeciej.

Alternatywy dla konwertera HEX na HSL

RapidTables Hex to HSL

narzędzie webowe

Domyślny wynik Google dla „hex to hsl” — pojedynczy jednokierunkowy formularz z HEX-em na wejściu i HSL na wyjściu, bez innych formatów widocznych. Przydatne do jednorazowych wyszukiwań, gdy ktoś przychodzi z wyszukiwarki. Brakuje OKLCH, sprawdzania kontrastu, wykrywania gamutu, obsługi kanału alfa i widoku wielu formatów jednocześnie. To narzędzie wygrywa w każdym aspekcie, z wyjątkiem najprostszego przypadku pojedynczej konwersji.

ColorHexa

narzędzie webowe

Długo działające strony per-kolor z głębokimi metadanymi SEO: konwersje, palety, harmonie, gradienty dla każdego pytanego HEX-a. Interfejs jest przestarzały (początek lat 2010), brak wsparcia OKLCH, brak kontrastu APCA, brak obsługi szerokiego gamutu. Mocne na potrzeby odkrywania konkretnego HEX-a przez Google; słabsze do aktywnych przepływów konwersji, gdzie pisanie w zunifikowanym UX pól jest szybsze.

Kalkulator HSL W3Schools

narzędzie webowe

Przyjazny początkującym przełącznik HEX/RGB/HSL na stronie nastawionej na nauczanie, wszechobecny w wynikach wyszukiwania. Brak OKLCH, brak obsługi kanału alfa poza hsla, brak zaawansowanych funkcji. Przydatny jako referencja obok treści edukacyjnych W3Schools. To narzędzie wygrywa w każdym innym aspekcie: więcej formatów, matematyka percepcyjna, funkcje gamut + kontrast + CVD, nowoczesny eksport kodu dla Tailwind v4 / SwiftUI / Compose / Flutter.

Selektor kolorów w DevTools przeglądarki

wbudowana funkcja przeglądarki

Chrome, Firefox i Safari DevTools dostarczają selektor kolorów, który przełącza się między HEX, RGB i HSL inline, gdy klikniesz próbkę koloru w panelu CSS. Bezpłatny, bez instalacji, zawsze dostępny. Brakuje OKLCH, brakuje udostępnialnych adresów URL, brakuje eksportu kodu dla platform spoza weba (SwiftUI, Compose). Sięgaj po DevTools, gdy i tak debugujesz CSS; sięgaj po to narzędzie, gdy potrzebujesz wyjścia cross-platform.

HSL Color Picker by Mothereff

narzędzie webowe

Skupiony selektor HSL z suwakami barwy/nasycenia/jasności na żywo i wyjściem HEX. Minimalny interfejs, dobry do szybkiej eksploracji HSL. Brakuje OKLCH i szerszej siatki formatów; bez funkcji kontrastu ani gamutu. Przydatny jako skupione narzędzie tylko-HSL; to narzędzie pokrywa ten sam przepływ plus 8 innych widoków formatów i kontroli percepcyjnych.

ConvertingColors

narzędzie webowe

Strony per-kolor z metadanymi SEO obejmujące wiele przestrzeni (HEX, RGB, HSL, HSV, CMYK, XYZ, CIELAB). Brakuje nowoczesnego wsparcia OKLCH i UX edycji w zunifikowanych polach. Strony z automatycznie generowaną treścią dają wrażenie content-farmy, ale dane konwersji są poprawne. Dobre do grzebania w metadanych pojedynczego koloru przez Google; to narzędzie jest szybsze do aktywnych przepływów pracy.

Przykłady konwersji HEX na HSL

Definicja zmiennej CSS dla koloru marki

#3b82f6

Wynik HSL: `hsl(217 91% 60%)`. Kanoniczny przepływ pracy dla systemu designu zbudowanego na HSL: zdefiniuj markę jako `--primary: hsl(217 91% 60%)` raz, a następnie komponuj jaśniejsze odcienie, korygując tylko procent L — `hsl(217 91% 70%)` dla stanu hover, `hsl(217 91% 80%)` dla stanu disabled, `hsl(217 91% 90%)` dla subtelnego wypełnienia tła. Barwa i nasycenie pozostają zablokowane, więc rodzina czyta się jako spójna rampa. Arkusze stylów oparte na RGB wymagają trzech skoordynowanych edycji kanałów na krok; HSL potrzebuje jednej.

Projektant tłumaczący kolor z Figmy na selektor HSL

#FF5733

Wynik HSL: `hsl(11 100% 60%)`. Projektanci myślący o kolorze w kategoriach barwy + nasycenia + jasności (model kognitywny, który Munsell sformalizował w 1905) często chcą trójki HSL nawet wtedy, gdy plik źródłowy wypisuje HEX. Barwa = 11° umieszcza ten kolor po czerwonej stronie pomarańczowego klina; nasycenie = 100% oznacza, że kanał jest w pełni chromatyczny; jasność = 60% leży o stopień powyżej punktu środkowego. Wklejenie HEX-a z Figmy raz daje odpowiadające HSL, gotowe do umieszczenia w mentalnym selektorze projektanta bez ręcznego zgadywania na kole kolorów.

Szybkie zmiatanie jasnością dla palety

#3b82f6

Wynik HSL: `hsl(217 91% 60%)`. Z trójką HSL w ręku, wygenerowanie rampy jaśniejszych odcieni to jednowymiarowe zmiatanie: ustaw L na 70% dla `hsl(217 91% 70%)`, 80% dla `hsl(217 91% 80%)`, 90% dla `hsl(217 91% 90%)`, aby wspinać się ku bieli; spadnij do 50%, 40%, 30% dla ciemniejszych odcieni. Cała 9-stopniowa rampa wyłania się ze zmiany jednej liczby. Jaśniejsze i ciemniejsze odcienie pozostają tonalnie powiązane, ponieważ barwa i nasycenie pozostają stałe — sztuczka, której używały starsze systemy designu, zanim OKLCH potaniło percepcyjnie jednorodne rampy.

8-cyfrowy HEX z kanałem alfa → hsla()

#FF573380

Wynik HSL: `hsl(11 100% 60% / 0.5)`. Ostatnia para (`80`) dekoduje się jako `128/255 ≈ 0,502` i pojawia się jako kanał alfa przez ukośnikową składnię CSS Color 4. Równoważna starsza forma to `hsla(11, 100%, 60%, 0.5)`, która jest wspierana w każdej przeglądarce od IE 9 i której oczekują starsze preprocesory. 8-cyfrowy HEX z kanałem alfa wszedł natywnie do wszystkich aktualnie aktualizowanych przeglądarek w 2018 roku; wcześniej alfa musiała być wyrażana przez funkcję `hsla()`.

Najczęstsze konwersje HEX → HSL

Tabela referencyjna 10 najczęściej konwertowanych kodów HEX i ich odpowiedników HSL — czyste podstawowe, czyste wtórne oraz dwa rzeczywiste kolory marki z palety Tailwind.

Czarny

#000000 hsl(0 0% 0%)

Czysta czerń. Jasność na 0% — brak emitowanego światła. Barwa i nasycenie są umownie 0 dla szarości.

#000000 hsl(0 0% 0%)

Czysta czerń na ekranie rzadko jest właściwym wyborem projektowym — wypróbuj `hsl(0 0% 7%)` albo jasność OKLCH 0,1–0,15 dla łagodniejszego tekstu treści.

Potrzebujesz zamiast tego percepcyjnie jednorodnego wyjścia? Wypróbuj dedykowany konwerter HEX na OKLCH — każdy krok L wygląda równie jasno między barwami, w odróżnieniu od HSL.

Biały

#FFFFFF hsl(0 0% 100%)

Czysta biel. Jasność na 100% — najjaśniejszy możliwy kolor sRGB. Barwa i nasycenie są umownie 0 dla szarości.

#FFFFFF hsl(0 0% 100%)

Czyste białe tła mogą powodować zmęczenie oczu w ciemnym otoczeniu — wypróbuj `hsl(0 0% 98%)` albo OKLCH 0,98 jako cieplejszą alternatywę.

Potrzebujesz zamiast tego percepcyjnie jednorodnego wyjścia? Wypróbuj dedykowany konwerter HEX na OKLCH — każdy krok L wygląda równie jasno między barwami, w odróżnieniu od HSL.

Czerwony

#FF0000 hsl(0 100% 50%)

Czysta czerwień. Barwa na 0° (pozycja startowa koła), nasycenie w pełni chromatyczne, jasność w punkcie środkowym, gdzie żyją czyste barwy.

#FF0000 hsl(0 100% 50%)

Czysta czerwień jest mocno nasycona i rzadko pasuje do palety marki — większość „czerwieni” marki leży bliżej `hsl(0 73% 50%)` (#DC2626).

Potrzebujesz zamiast tego percepcyjnie jednorodnego wyjścia? Wypróbuj dedykowany konwerter HEX na OKLCH — każdy krok L wygląda równie jasno między barwami, w odróżnieniu od HSL.

Zielony

#00FF00 hsl(120 100% 50%)

Czysta zieleń. Barwa na 120° (jedna trzecia drogi wokół koła), nasycenie w pełni chromatyczne, jasność na 50%. Nazwany kolor CSS `lime`.

#00FF00 hsl(120 100% 50%)

Słowo kluczowe CSS `green` rozwiązuje się do #008000 (hsl(120 100% 25%)), nie do #00FF00 — częste źródło nieporozumień. Używaj `lime` dla czystej hsl(120 100% 50%).

Potrzebujesz zamiast tego percepcyjnie jednorodnego wyjścia? Wypróbuj dedykowany konwerter HEX na OKLCH — każdy krok L wygląda równie jasno między barwami, w odróżnieniu od HSL.

Niebieski

#0000FF hsl(240 100% 50%)

Czysty niebieski. Barwa na 240° (dwie trzecie drogi wokół koła), nasycenie w pełni chromatyczne, jasność w punkcie środkowym.

#0000FF hsl(240 100% 50%)

Czysty niebieski na białym tle nie zalicza kontrastu WCAG AA (3,7:1) — rozważ `hsl(224 76% 48%)` (Tailwind blue-700) dla tekstu treści.

Potrzebujesz zamiast tego percepcyjnie jednorodnego wyjścia? Wypróbuj dedykowany konwerter HEX na OKLCH — każdy krok L wygląda równie jasno między barwami, w odróżnieniu od HSL.

Cyjan

#00FFFF hsl(180 100% 50%)

Cyjan. Barwa na 180° (punkt środkowy koła, przeciwnie do czerwonego), nasycenie w pełni chromatyczne, jasność w punkcie środkowym czystej barwy. Nazwany kolor CSS `cyan` lub `aqua`.

#00FFFF hsl(180 100% 50%)

Cyjan leży naprzeciw czerwonego na kole (180°/0°), co czyni go naturalnym partnerem harmonii dopełnienia dla każdego koloru marki z rodziny czerwonych.

Potrzebujesz zamiast tego percepcyjnie jednorodnego wyjścia? Wypróbuj dedykowany konwerter HEX na OKLCH — każdy krok L wygląda równie jasno między barwami, w odróżnieniu od HSL.

Magenta

#FF00FF hsl(300 100% 50%)

Magenta. Barwa na 300° (pięć szóstych wokół koła), nasycenie w pełni chromatyczne, jasność w punkcie środkowym czystej barwy. Nazwany kolor CSS `magenta` lub `fuchsia`.

#FF00FF hsl(300 100% 50%)

Magenta leży naprzeciw zielonego na kole (300°/120°), co czyni ją naturalnym partnerem harmonii dopełnienia dla każdego koloru marki z rodziny zielonych.

Potrzebujesz zamiast tego percepcyjnie jednorodnego wyjścia? Wypróbuj dedykowany konwerter HEX na OKLCH — każdy krok L wygląda równie jasno między barwami, w odróżnieniu od HSL.

Żółty

#FFFF00 hsl(60 100% 50%)

Żółty. Barwa na 60° (jedna szósta wokół koła, między czerwonym a zielonym), nasycenie w pełni chromatyczne, jasność w punkcie środkowym czystej barwy.

#FFFF00 hsl(60 100% 50%)

Żółty przy hsl(60 100% 50%) wygląda dużo jaśniej niż czerwony przy hsl(0 100% 50%) — jaskrawy przykład niejednorodności percepcyjnej HSL. OKLCH to normalizuje.

Potrzebujesz zamiast tego percepcyjnie jednorodnego wyjścia? Wypróbuj dedykowany konwerter HEX na OKLCH — każdy krok L wygląda równie jasno między barwami, w odróżnieniu od HSL.

Tailwind blue-500

#3b82f6 hsl(217 91% 60%)

Domyślny kolor marki blue-500 z Tailwind CSS — kanoniczny „webowy niebieski” połowy lat 2020. Używany w niezliczonych dashboardach, stronach marketingowych i narzędziach administracyjnych.

#3b82f6 hsl(217 91% 60%)

Tailwind v4 redefiniuje blue-500 w OKLCH (`oklch(0.629 0.193 263.4)`) dla percepcyjnie jednorodnych ramp — HSL pozostaje fallbackiem z v3.

Potrzebujesz zamiast tego percepcyjnie jednorodnego wyjścia? Wypróbuj dedykowany konwerter HEX na OKLCH — każdy krok L wygląda równie jasno między barwami, w odróżnieniu od HSL.

Tailwind rose-500

#f43f5e hsl(350 89% 60%)

Domyślny rose-500 z Tailwind CSS — mocno nasycony różowo-czerwony, używany powszechnie dla przycisków akcentowych, stanów alertu i kontrastu marki.

#f43f5e hsl(350 89% 60%)

Barwa rose-500 (350°) leży tuż przed czerwonym (0°/360°) na kole — lekkie przesunięcie różowe, które czyta się cieplej niż czysta czerwień.

Potrzebujesz zamiast tego percepcyjnie jednorodnego wyjścia? Wypróbuj dedykowany konwerter HEX na OKLCH — każdy krok L wygląda równie jasno między barwami, w odróżnieniu od HSL.

Jak korzystać z konwertera HEX na HSL

  1. 1

    Wklej kod HEX w pole HEX

    Wrzuć dowolną wartość HEX do pola HEX — z `#` na początku albo bez, w 3-cyfrowym skrócie (`#F73`), 6-cyfrowej formie pełnej (`#3b82f6`), 4-cyfrowym skrócie z kanałem alfa (`#F738`) albo 8-cyfrowej formie pełnej z kanałem alfa (`#FF573380`). Narzędzie normalizuje wszystkie pięć kształtów wejściowych do tego samego kanonicznego koloru wewnętrznie. Wielkość liter nie ma znaczenia (`#3b82f6` i `#3B82F6` parsują się identycznie). Nieprawidłowe znaki lub zła liczba cyfr powodują cichy błąd inline; prawidłowy HEX aktualizuje każde inne pole formatu w czasie rzeczywistym, łącznie z HSL.

  2. 2

    Odczytaj trójkę HSL z pola HSL

    Pole HSL poniżej pola HEX pokazuje odpowiadającą wartość `hsl()` w nowoczesnej składni z rozdziałem spacjami z CSS Color 4: `hsl(217 91% 60%)` dla koloru nieprzezroczystego, `hsl(217 91% 60% / 0.5)` dla koloru z kanałem alfa. Barwa to liczba całkowita stopni od 0 do 360; nasycenie i jasność to liczby całkowite procentów od 0 do 100. Wartości są zaokrąglone dla czytelności wyświetlania — wewnętrzne źródło prawdy w OKLCH oznacza, że bazowa precyzja jest zmiennoprzecinkowa, więc konwersje w obie strony z powrotem do HEX pozostają stabilne.

  3. 3

    Kliknij Kopiuj, aby pobrać ciąg HSL

    Każda karta formatu ma po prawej stronie przycisk Kopiuj. Jedno kliknięcie i wartość ląduje w schowku — etykieta przycisku miga na chwilę „Skopiowano!”, więc wiesz, że się udało. Skopiowany ciąg to kanoniczna składnia CSS Color 4 (`hsl(217 91% 60%)`); jeśli twój cel wymaga starszej formy z przecinkami (`hsl(217, 91%, 60%)`), konwersja jest mechaniczna. Dla wyjścia pod konkretną platformę (Tailwind v4, SwiftUI, Compose, Flutter) użyj sekcji Skopiuj jako kod pod selektorem — te fragmenty emitują format, którego natywnie oczekuje każda platforma.

  4. 4

    Również widoczne: RGB, OKLCH, OKLAB, HSV, HWB, CMYK, nazwany kolor

    Ten sam HEX, który wklejasz, rozświetla też pozostałe pola formatów — RGB dla wywołań canvasu i sprzętu, OKLCH i OKLAB dla percepcyjnie jednorodnych systemów designu, HSV i HWB dla projektantów korzystających z selektorów kolorów, CMYK do oszacowań druku oraz najbliższy nazwany kolor CSS do tekstów dokumentacji. Nigdy nie jesteś zamknięty tylko w HEX → HSL. Jeśli potrzebujesz także trójki OKLCH do bloku `@theme` Tailwind v4 (gdzie jasność percepcyjna ma większe znaczenie niż gammowo-dziwaczne L w HSL), jest ona od razu w polu OKLCH z własnym przyciskiem Kopiuj.

  5. 5

    Użyj selektora, aby wizualnie zmiatać jasnością

    Pod siatką formatów znajduje się kwadrat SL + suwak barwy + suwak kanału alfa do eksploracji wizualnej. Kwadrat SL mapuje się bezpośrednio na płaszczyznę Saturation × Lightness w HSL: przeciągnij pionowo, aby przejść L od 0% do 100%, obserwując, jak pole HSL aktualizuje się w czasie rzeczywistym. Przydatne do wizualnego generowania jaśniejszego lub ciemniejszego odcienia, zanim zablokuje się dokładny procent. W przeglądarkach opartych na Chromium (Chrome, Edge, Brave) przycisk EyeDropper aktywuje natywne API `EyeDropper` do próbkowania dowolnego piksela na ekranie, także poza oknem przeglądarki.

Częste błędy HEX / HSL

Założenie, że jasność HSL jest percepcyjnie jednorodna

Zielony przy `hsl(120 100% 50%)` wygląda widocznie jaśniej niż niebieski przy `hsl(240 100% 50%)`, mimo że oba są przy L=50%. Generowanie ramp jaśniejszych odcieni przez zmiatanie L daje nierównie wyglądające wyniki między barwami — jasny koniec rampy zielonej wspina się szybciej niż jasny koniec rampy niebieskiej. To jest strukturalna własność HSL dziedziczącego dziwactwa gamma sRGB, a nie błąd w twoim kodzie. Dla percepcyjnie jednorodnych ramp przełącz się na OKLCH.

✗ Niepoprawne
Sweep HSL L for a 9-step palette:
hsl(120 100% 50%) and hsl(240 100% 50%) at the same L
Look visibly different in brightness — palette feels uneven.
✓ Poprawne
Sweep OKLCH L instead:
oklch(0.7 0.2 130) and oklch(0.7 0.2 250)
Look equally bright; palette reads coherent across all hues.

Zapomnienie, że barwa zawija się na 360°

Barwa HSL jest kątowa — `hsl(370 91% 60%)` jest interpretowany jako `hsl(10 91% 60%)`, ponieważ 370° mod 360° = 10°. Animowanie barwy od 350° do 380° zawija się czysto przez 360°/0° (cienki pasek czerwonego), ale interpolacja liniowa od H=350 do H=10 w złą stronę idzie *długą* drogą przez cyjan, zielony, żółty — 320° objazdu. Użyj `Math.min(diff, 360 - diff)`, aby wybrać krótką drogę, albo wbudowanej interpolacji barwy w bibliotece kolorów.

✗ Niepoprawne
Linear interpolation from H=350 to H=10:
(350 + 10) / 2 = 180° (cyan midpoint)
Wrong — goes the long way around the wheel.
✓ Poprawne
Short-path hue interpolation:
midpoint = ((350 + 10 + 360) / 2) % 360 = 0° (red midpoint)
Goes through red, the short path around the wheel.

Mylenie HSL z HSV

HSL i HSV współdzielą oś barwy, ale różnią się trzecią osią. Lightness w HSL jest symetryczna — 0% czerń, 50% czysta barwa, 100% biel. Value w HSV jest asymetryczna — 0% czerń, 100% czysta barwa, biel pojawia się dopiero, gdy Saturation spadnie do 0. `hsl(0 100% 100%)` to biel; `hsv(0 100% 100%)` to czysta czerwień. Wiele bibliotek kolorów i narzędzi projektowych (selektor HSB w Photoshopie, panel kolorów w Sketchu) używa HSV — kopiowanie wartości między dwoma systemami bez konwersji daje zupełnie różne kolory.

✗ Niepoprawne
Paste HSV values from Photoshop into a CSS hsl() rule:
Photoshop HSB 0, 100, 100 (pure red)
CSS hsl(0 100% 100%) renders as white — wrong color entirely.
✓ Poprawne
Convert HSV → HSL before pasting into CSS:
HSV 0, 100, 100 → HSL 0, 100%, 50%
CSS hsl(0 100% 50%) renders as pure red — correct.

Pominięcie znaków procenta w HSL

Osie S i L w HSL wymagają sufiksu `%` w CSS — `hsl(217 91 60)` to błąd parsowania w każdej przeglądarce; poprawna forma to `hsl(217 91% 60%)`. Tylko Barwa jest bezwymiarowa (jej jednostką są stopnie, ale sufiks jest opcjonalny). Wiele doraźnych konwerterów zapomina emitować znaki procenta w wyjściu HSL, produkując nieprawidłowy CSS, który po cichu się sypie po wklejeniu. Narzędzie zawsze emituje znaki procenta w polu HSL.

✗ Niepoprawne
Emit HSL without percent signs:
hsl(217 91 60)
CSS parse error — every browser ignores the entire rule.
✓ Poprawne
Emit HSL with percent signs on S and L:
hsl(217 91% 60%)
Valid CSS — works in every evergreen browser and IE 9+.

Kto korzysta z HEX na HSL

Frontendowcy definiujący zmienne CSS w HSL
Zdefiniuj `--primary: hsl(217 91% 60%)` raz z HEX-a w Figmie, a następnie skomponuj `--primary-hover: hsl(217 91% 70%)`, `--primary-active: hsl(217 91% 50%)`, `--primary-bg: hsl(217 91% 95%)`, korygując tylko liczbę L. Wklej HEX raz, odczytaj trójkę HSL, wrzuć w blok właściwości niestandardowej CSS. Wzorzec, którego używały starsze systemy designu, aby utrzymać jaśniejsze i ciemniejsze odcienie tonalnie spójne, zanim przejęły rampy oparte na OKLCH.
Projektanci tłumaczący HEX na selektor HSL
Projektanci wychowani na selektorach barwy + nasycenia + value (Adobe, Sketch, tryb HSB w Figmie) często chcą trójki HSL nawet wtedy, gdy plik źródłowy wypisuje HEX. Wklejenie HEX-a raz daje odpowiadające HSL, gotowe do odczytania w mentalnej pozycji na kole kolorów projektanta bez ręcznego zgadywania. Przydatne przy przeglądaniu specyfikacji koloru marki i chęci poznania, gdzie leży na kole barwy względem innych kolorów marki w rodzinie.
Autorzy systemów motywów obliczający tokeny trybu ciemnego
Tematyzowanie trybu ciemnego często odwraca L, zachowując stałe H i S — primary z trybu jasnego `hsl(217 91% 60%)` mapuje się na primary z trybu ciemnego `hsl(217 91% 40%)` (albo podobnie). Wklej HEX z trybu jasnego, odczytaj HSL, oblicz L dla trybu ciemnego, wpisz nowe HSL z powrotem do tokenu motywu ciemnego. Wzorzec jest mechaniczny, gdy masz trójkę HSL; dużo bardziej żmudne jest wykonanie tego na surowych kanałach RGB.
Autorzy systemów designu generujący rampy jaśniejszych i ciemniejszych odcieni
Wygeneruj 9-stopniową rampę jaśniejszych/ciemniejszych odcieni przez zmiatanie L: `hsl(217 91% 95%)` (najjaśniejszy), 85%, 75%, 65%, 55%, 45%, 35%, 25%, `hsl(217 91% 15%)` (najciemniejszy). Wklej bazowy HEX, odczytaj HSL, zmiataj L w krokach co 10% mentalnie albo w kodzie. (Dla percepcyjnie jednorodnych ramp, w których każdy krok wygląda równie jasno, przełącz się na pole OKLCH obok — rampy HSL wyglądają nierówno między barwami, ponieważ L nie jest percepcyjnie jednorodne.)
Autorzy CSS używający matematyki hsl(from ...) w czasie wykonania
Nowoczesny CSS wspiera składnię `color-function-from`: `hsl(from var(--primary) h s calc(l + 10%))` wyprowadza jaśniejszy wariant `--primary` w czasie renderowania, bez wstępnego obliczania każdego kroku. Wklej HEX marki, potwierdź trójkę HSL, wrzuć bazę do zmiennej CSS i użyj matematyki w czasie wykonania dla wyprowadzonych tokenów. Działa w Chrome 119+, Safari 17.2+, Firefox 128+.
Frontendowcy budujący zestawy tokenów HSL w Tailwind v3
Tailwind v3 przechowywał kolory motywu jako trójki HSL z rozdziałem spacjami w zmiennych CSS (`--primary: 217 91% 60%`), komponowane przez `hsl(var(--primary))` w `tailwind.config.js`. Wklej HEX marki, odczytaj HSL, wrzuć trzy liczby (bez opakowania `hsl(...)`) do definicji zmiennej. Tailwind v4 przeszedł na OKLCH-first, ale starsze projekty na v3 wciąż używają wzorca HSL i będą jeszcze przez lata.
Autorzy interfejsu selektora kolorów mapujący HEX na kontrolki HSL
Budowanie selektora kolorów, który eksponuje barwę / nasycenie / jasność jako trzy oddzielne suwaki (klasyczny interfejs Adobe), oznacza mapowanie przychodzącego HEX-a na trzy kontrolki selektora. Wklej HEX tutaj, odczytaj trójkę HSL, programowo ustaw trzy suwaki. Konwersja jest tą samą, którą selektor uruchamiałby wewnętrznie; to narzędzie pokazuje wartości pośrednie do debugowania.
Inżynierowie dostępności korygujący jasność koloru marki dla kontrastu
Gdy kolor marki nie zalicza kontrastu WCAG względem tła, tani fix to podbicie L, aż współczynnik się oczyści — bez zmiany H i S kolor nadal czyta się jako ta sama tożsamość marki. Wklej HEX marki, obserwuj plakietki kontrastu, mentalnie skoryguj L (albo użyj osi L w selektorze), aż WCAG i APCA się zaliczą. Pole HSL pokazuje nowy procent L do dokumentu specyfikacji; pole HEX pokazuje odpowiadający kod do arkusza stylów.

Matematyka i parsowanie HEX na HSL

HEX → RGB → HSL to dwuetapowy potok
Konwersja przechodzi przez RGB jako etap pośredni. Krok pierwszy: sparsuj HEX na liczby całkowite RGB przez `parseInt(hex.slice(1, 3), 16)` na kanał. Krok drugi: znormalizuj RGB do 0–1, wylicz `max`/`min`/`delta`, zastosuj fragmentaryczną trygonometrię z CSS Color 4 §6.4: `L = (max + min) / 2`, `S = delta / (1 - |2L - 1|)`, `H = fragmentaryczna * 60`. Struktura dwuetapowa to powód, dla którego narzędzie pokazuje też pośrednią krotkę RGB — wyświetlana za darmo i przydatna do debugowania.
CSS Color 4 §6.4 definiuje algorytm referencyjny
Specyfikacja W3C CSS Color 4 §6.4 (algorytm `rgb()` na `hsl()`) definiuje kanoniczną fragmentaryczną matematykę: jasność jako punkt środkowy max i min, nasycenie jako `delta / (1 - |2L - 1|)` (z S = 0, gdy delta = 0, aby uniknąć dzielenia przez zero dla szarości), barwa jako trygonometria 60-stopni-na-krok w zależności od tego, który kanał jest maksymalny. Specyfikacja obsługuje też przypadki brzegowe: czysta czerń (`#000`) daje `hsl(0 0% 0%)` z arbitralną barwą 0°; czysta biel (`#FFF`) daje `hsl(0 0% 100%)` podobnie; czysta szarość daje `hsl(0 0% 50%)`.
Barwa zawija się na 360°, S i L to procenty
Trzy osie HSL mają różne jednostki. Barwa to kątowy stopień od 0 do 360 z zawijaniem — `hsl(370 ...)` jest interpretowany jako `hsl(10 ...)`, ponieważ pozycje kątowe się zawijają. Nasycenie i Jasność to procenty od 0% do 100%, bez zawijania; wartości poza zakresem są przycinane. CSS Color 4 akceptuje też barwę w obrotach (`hsl(0.6turn ...)`) albo radianach (`hsl(3.787rad ...)`); wyjście narzędzia używa stopni, ponieważ to najpopularniejsza forma w interfejsach narzędzi projektowych i dokumentach specyfikacji marki.
Jasność HSL NIE jest percepcyjnie jednorodna
Zielony przy `hsl(120 100% 50%)` wygląda widocznie jaśniej niż niebieski przy `hsl(240 100% 50%)`, mimo że oba mają tę samą nominalną Jasność — ponieważ HSL dziedziczy dziwactwa gamma sRGB i używa tej samej skali L dla każdej barwy. Dlatego rampy oparte na HSL wyglądają nierówno (jasny koniec rampy zielonej wspina się szybciej niż jasny koniec rampy niebieskiej) i dlatego systemy designu w dużej mierze zmigrowały do OKLCH dla generowania ramp. Narzędzie pokazuje zarówno HSL, jak i OKLCH, więc wybór jest jednym spojrzeniem oddalony.
Wewnętrzne źródło prawdy w OKLCH dla stabilności w obie strony
Mimo że to odgałęzienie celuje konkretnie w HEX → HSL, współdzielony bazowy konwerter trzyma kanoniczny kolor jako trójkę OKLCH wewnętrznie. Konwersja w obie strony HEX → HSL → RGB → OKLAB → HEX pozostaje stabilna bitowo; starsze konwertery z pivotem na HSL akumulują błąd zaokrąglenia i potrafią przesunąć barwę o kilka stopni przez kilka konwersji. Pivot w OKLCH zachowuje też barwę jako stabilną oś, więc przeciąganie suwaka barwy nie przechodzi przypadkiem przez szarość. Zgodnie z pracą Björna Ottossona o OKLAB z 2020.
Kodowanie kanału: 8-bitowe bez znaku, sRGB z gammą
Kody HEX kodują 8-bitowe liczby całkowite RGB bez znaku (0–255) w przestrzeni barw sRGB zdefiniowanej w IEC 61966-2-1 (1996). Wartości są *gamma-encoded* — relacja między wartością kanału a postrzeganą jasnością jest nieliniowa, zgodna z fragmentaryczną funkcją transferu sRGB (z grubsza wykładnik 2.4 z małym odcinkiem liniowym blisko zera). HSL jest wyprowadzane bezpośrednio z tych zakodowanych gammą wartości RGB bez żadnego kroku linearyzacji, co jest źródłowym powodem problemu HSL z jednorodnością percepcyjną. OKLCH najpierw linearyzuje, a potem mapuje na percepcyjnie jednorodną przestrzeń; HSL nie.

Najlepsze praktyki dla przepływów HEX / HSL

W nowym kodzie używaj nowoczesnej składni HSL z rozdziałem spacjami
`hsl(217 91% 60%)` (ze spacjami) i `hsl(217 91% 60% / 0.5)` (ukośnik dla kanału alfa) z CSS Color 4 to kanoniczne składnie dla kodu wdrażanego w 2025 i dalej. Starsze formy z przecinkami `hsl(217, 91%, 60%)` i `hsla(217, 91%, 60%, 0.5)` są nadal wspierane wszędzie, ale stylistycznie są przestarzałe w CSS Color 4. Używaj nowoczesnej składni w nowych arkuszach stylów; trzymaj `hsla()` tylko w kontekstach fallback IE 9–11, gdzie naprawdę potrzebujesz starszego wsparcia.
Generuj rampy w OKLCH, nie w HSL
Oś Jasności w HSL nie jest percepcyjnie jednorodna — 9-stopniowe zmiatanie L produkuje rampę, w której kroki zielone wyglądają jaśniej niż kroki niebieskie przy każdej wartości L. Dla ramp, w których każdy krok powinien wyglądać równie jasno (domyślne oczekiwanie systemu designu), generuj w OKLCH: `oklch(0.7 0.15 217)`, `oklch(0.6 0.15 217)` itd. Narzędzie pokazuje zarówno HSL, jak i OKLCH dla tego samego HEX-a, więc przełączanie się między nimi to jedno kliknięcie Kopiuj.
Zablokuj barwę i nasycenie, zmiataj jasnością
Gdy używasz HSL do pracy z jaśniejszymi/ciemniejszymi odcieniami, zmieniaj tylko liczbę L — utrzymuj H i S identyczne w całej rampie. Dryf barwy (nawet o 5°) sprawia, że rampa wygląda chaotycznie. Dryf nasycenia sprawia, że jasny koniec wygląda spranie, a ciemny mętnie. Dyscyplina jednej-osi-naraz to powód, dla którego HSL ma reputację przyjaznej projektantom; porzucenie jej daje najgorsze z obu światów.
Preferuj HEX dla tokenów źródła prawdy, HSL dla wyprowadzonych wariantów
Gdy piszesz specyfikację tokenu designu, preferuj HEX (lub OKLCH) jako kanoniczną formę — są zwięźlejsze i czysto mieszczą się w JSON lub YAML. HSL jest użyteczniejsze dla *wyprowadzonych* tokenów w czasie wykonania (`hsl(from var(--primary) h s calc(l + 10%))`) niż jako format źródła prawdy. Oba formaty opisują ten sam kolor; wybór dotyczy roli, jaką token gra w systemie.
Dokumentuj warianty HSL razem z bazowym HEX-em
Gdy wdrażasz zmienną CSS, taką jak `--primary-light: hsl(217 91% 70%)`, dołącz komentarz wskazujący z powrotem na bazowy HEX: `/* baza: #3b82f6 → hsl(217 91% 60%), wariant jaśniejszy +10% L */`. Sześć miesięcy później, gdy ktoś zechce wyprowadzić `--primary-lighter`, potrzebuje bazowego koloru, z którego ma policzyć — a HSL samo z siebie tego nie pokaże. HEX + HSL razem zachowują pełne pochodzenie.
Używaj hasha URL do udostępniania decyzji o kolorze na żywo
Każda zmiana koloru aktualizuje hash adresu URL jako `#hex=3b82f6` automatycznie. Skopiuj URL do wątku na Slacku albo do zgłoszenia na GitHubie, a każdy, kto otworzy, ląduje na tym samym kolorze z tą samą trójką HSL. To bardziej niezawodne niż wklejanie ciągu HSL w czacie — odbiorcy czasem robią literówki w stopniu albo gubią znak procenta przy ręcznym wpisywaniu wartości — i pozwala wątkowi design review odnieść się do dokładnego koloru zamiast do „niebieskiego, o którym rozmawialiśmy we wtorek”. Hash nigdy nie jest przesyłany na serwer.

Najczęściej zadawane pytania

Jak skonwertować HEX na HSL?
Najpierw skonwertuj HEX na liczby całkowite RGB przez `parseInt(hex, 16)`, potem znormalizuj każdy kanał do 0–1, dzieląc przez 255, następnie wylicz `max`/`min`/`delta` na trzech kanałach i zastosuj fragmentaryczną trygonometrię z CSS Color 4 §6.4: jasność = `(max + min) / 2`, nasycenie = `delta / (1 - |2L - 1|)` (zero, gdy delta jest zerem), barwa = fragmentaryczna w zależności od tego, który kanał jest maksymalny (60° na krok wokół koła). `#3b82f6` parsuje się do `rgb(59 130 246)`, a następnie konwertuje na `hsl(217 91% 60%)`. To narzędzie uruchamia cały potok na żywo w trakcie pisania.
Czym jest kolor HSL?
HSL to cylindryczne przekształcenie przestrzeni barw sRGB na trzy percepcyjnie znaczące osie: Hue (barwa, 0–360°, kątowa pozycja na kole kolorów — 0° czerwony, 120° zielony, 240° niebieski), Saturation (nasycenie, 0–100%, intensywność chromatyczna — 0% szary, 100% w pełni chromatyczny) oraz Lightness (jasność, 0–100%, jasność — 0% czarny, 50% czysta barwa, 100% biały). Alvy Ray Smith opublikował wyprowadzenie w 1978, aby dać projektantom układ współrzędnych bliższy temu, jak myślą o kolorze, niż surowe adresowanie kanałów RGB. HSL jest w CSS od 2010 (CSS3) i działa w każdej przeglądarce.
Jaka jest różnica między HSL a HSV?
Oba to cylindryczne przekształcenia sRGB o identycznych osiach barwy, ale traktują trzecią oś inaczej. Lightness w HSL przechodzi od czerni przy 0% przez czystą barwę przy 50% do bieli przy 100% — symetrycznie, więc `hsl(0 100% 50%)` to czysta czerwień, a `hsl(0 100% 100%)` to biel. Value w HSV przechodzi od czerni przy 0% do czystej barwy przy 100% — asymetrycznie, więc `hsv(0 100% 100%)` to czysta czerwień, a biel pojawia się dopiero, gdy nasycenie spadnie do 0. HSL jest użyteczniejsze do ramp jaśniejszych/ciemniejszych odcieni w systemach designu, ponieważ punkt środkowy 50% wyznacza referencję czystego koloru; HSV jest użyteczniejsze do selektorów kolorów, ponieważ kwadrat saturation/value mapuje się czysto na interfejs selektora SV.
Dlaczego używać HSL zamiast RGB?
Trzy powody. Po pierwsze, intuicyjne suwaki — przesunięcie L z 60% do 70% daje przewidywalnie jaśniejszy odcień tego samego koloru; przesunięcie R z 130 do 150 daje mniej przewidywalne przesunięcie koloru. Po drugie, generowanie palety — `hsl(217 91% 60%)`, `hsl(217 91% 70%)`, `hsl(217 91% 80%)` to tonalnie spójna rampa jaśniejszych odcieni wygenerowana przez zmianę jednej liczby; to samo w RGB wymaga trzech skoordynowanych edycji. Po trzecie, matematyka CSS w czasie wykonania — nowoczesny CSS pozwala obliczyć `hsl(from var(--primary) h s calc(l + 10%))`, aby wyprowadzić jaśniejszy wariant z bazowego tokenu bez wstępnego obliczania każdego kroku. RGB nie ma takiej cylindrycznej wygody.
Jak czytać wartość HSL?
HSL ma trzy części w kolejności: Hue, Saturation, Lightness. `hsl(217 91% 60%)` oznacza barwę = 217° (czysty niebieski, tuż za czystym niebieskim 240° i z powrotem w stronę cyjanu), nasycenie = 91% (mocno chromatyczne, prawie bez szarości), jasność = 60% (o stopień jaśniej niż punkt środkowy czystej barwy). Barwa to jedyna oś bez sufiksu procentowego, ponieważ jest wyrażona w stopniach — wartości zawijają się na 360°, więc `hsl(370 ...)` jest identyczny z `hsl(10 ...)`. Wartość po ukośniku na końcu (jeśli obecna) to alfa w zakresie 0–1: `hsl(217 91% 60% / 0.5)` to ten sam kolor przy 50% krycia.
Czy CSS obsługuje HSL?
Tak — HSL jest w CSS od CSS3 w 2010 i działa w każdej przeglądarce, łącznie z IE 9. Pierwotna składnia używała przecinków: `hsl(217, 91%, 60%)` dla nieprzezroczystego i `hsla(217, 91%, 60%, 0.5)` dla wersji z kanałem alfa. CSS Color 4 (W3C Candidate Recommendation od 2022) dodał nowoczesną formę z rozdziałem spacjami: `hsl(217 91% 60%)` i `hsl(217 91% 60% / 0.5)` z kanałem alfa po ukośniku. Barwę można też wyrażać w obrotach lub radianach (`hsl(0.6turn 91% 60%)` jest identyczne z `hsl(217 91% 60%)`). Obie składnie — starsza i nowoczesna — są wymienne w każdej aktualnie aktualizowanej przeglądarce.
Co oznacza L w HSL?
Lightness, czyli jasność. Oś 0–100%, która kontroluje, jak jasno kolor wygląda, gdzie 0% mapuje się na czystą czerń, a 100% na czystą biel. Punkt środkowy (50%) to miejsce, gdzie żyje czysta barwa — `hsl(0 100% 50%)` to czysta czerwień, a `hsl(0 100% 25%)` to ciemniejsza czerwień, a `hsl(0 100% 75%)` to jaśniejszy róż. Lightness to symetryczny odpowiednik asymetrycznego Value z HSV. Zwróć uwagę, że jasność HSL *nie* jest percepcyjnie jednorodna — zielony przy L=50% wygląda widocznie jaśniej niż niebieski przy L=50%, ponieważ HSL dziedziczy dziwactwa gamma sRGB; dla percepcyjnej jednorodności sięgnij po OKLCH.
Jak precyzyjna jest konwersja HEX na HSL?
Krok HEX → RGB jest dokładny bitowo (`parseInt(hex, 16)` zwraca liczby całkowite bez udziału liczb zmiennoprzecinkowych). Krok RGB → HSL obejmuje trygonometrię i dzielenie, więc wyjście jest liczbą zmiennoprzecinkową, którą narzędzie zaokrągla do liczby całkowitej stopni i liczby całkowitej procentów do wyświetlenia. Konwersja w obie strony HEX → HSL → HEX odzyskuje oryginalny HEX z dokładnością do 1 jednostki kanału (błąd zaokrąglenia z wyświetlania H jako liczby całkowitej stopni). Do pracy bezstratnej OKLCH jest lepszym formatem wewnętrznym — to narzędzie faktycznie trzyma OKLCH jako wewnętrzne źródło prawdy, a HSL wyprowadza dopiero przy wyświetlaniu, więc stabilność w obie strony jest lepsza niż w naiwnych konwerterach trasujących przez HSL.

Powiązane narzędzia

Zobacz wszystkie narzędzia →