Skip to content

Konwerter HEX na OKLCH

Konwertuj HEX na OKLCH pod tokeny projektowe Tailwind v4. Na żywo, percepcyjnie jednorodne wyjście z ostrzeżeniami o gamucie Display P3. Darmowy, tylko w przeglądarce.

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
Sprawdzone pod kątem zgodności z CSS Color 4 §11.2 + §15.1, poprawności macierzy OKLAB Ottossona 2020, parytetu z paletą Tailwind v4, dokładności wykrywania gamutu Display P3 / Rec2020 oraz stabilności konwersji w obie strony między HEX a OKLCH w zakresach 0–1 Lightness, 0–0,4 Chroma i 0–360° Hue. — Zespół inżynieryjny Go Tools · May 27, 2026

Czym jest konwerter HEX na OKLCH?

Konwerter HEX na OKLCH to niewielkie narzędzie, które zamienia kod koloru HEX (`#3b82f6`) na percepcyjnie jednorodną trójkę Lightness / Chroma / Hue kodującą ten sam kolor w przestrzeni OKLCH (`oklch(0.629 0.193 263.4)`). Kody HEX to zwięzłe ciągi w systemie szesnastkowym, które projektanci i programiści wklejają między Figmą, Sketchem, Photoshopem, PDF-ami z księgi znaku marki i arkuszami stylów CSS — trzy 8-bitowe kanały upakowane w 6-znakową formę `#RRGGBB`, zakotwiczoną w przestrzeni barw sRGB zdefiniowanej w IEC 61966-2-1 z 1996. OKLCH to biegunowa forma OKLAB, percepcyjnie jednorodnej przestrzeni barw Björna Ottossona z 2020 roku, dodanej do CSS przez składnię `oklch()` w CSS Color 4 (W3C Candidate Recommendation od 2022). Kanały to jasność percepcyjna (0–1, zapisywana też jako 0–100%), chroma (0 do około 0,4 dla najbardziej nasyconych barw sRGB, bez górnej granicy dla kolorów z szerokiego gamutu) i barwa (0–360°, ta sama oś kątowa, której używa HSL). Wsparcie przeglądarek wylądowało we wszystkich aktualnie aktualizowanych między marcem 2022 (Safari 15.4) a majem 2023 (Firefox 113), z Chrome 111 pośrodku (marzec 2023) — łączne pokrycie wg caniuse to ponad 94%. Przykład: Tailwind blue-500 to `oklch(0.629 0.193 263.4)`.

**Jednorodność percepcyjna — dlaczego ma znaczenie.** W OKLCH (i jego prostokątnym kuzynie OKLAB) równa odległość liczbowa w kanale L odpowiada równej postrzeganej odległości w jasności — między wszystkimi barwami, każdym poziomem chromy, każdym regionem przestrzeni barw. W HSL równe wartości L wyglądają na nierównomiernie jasne między barwami, ponieważ HSL dziedziczy dziwactwa gammy sRGB: zieleń przy `hsl(120 100% 50%)` wygląda widocznie jaśniej niż niebieski przy `hsl(240 100% 50%)`, mimo że oba raportują L=50%. Strukturalna przyczyna jest taka, że HSL wyprowadza L geometrycznie (uśrednienie maksymalnej i minimalnej wartości kanału w sRGB zakodowanym gammą), natomiast OKLCH wyprowadza L z percepcyjnie zakotwiczonego modelu, który najpierw linearyzuje, a potem przechodzi przez etap odpowiedzi czopków LMS. Praktyczny skutek: utrzymywanie L stałego między barwami w OKLCH produkuje wizualnie równoważną jasność — zieleń przy `oklch(0.7 0.2 130)` i niebieski przy `oklch(0.7 0.2 250)` wyglądają na równie jasne na ekranie. Dlatego Tailwind v4 zmigrował swoją domyślną paletę na rampy oparte na OKLCH w 2025 — każdy krok ciemniejszego odcienia (50, 100, 200, …, 900, 950) trafia w tę samą postrzeganą różnicę jasności, więc kolory marki wydają się spójne między barwami bez ręcznego strojenia per kolor.

**Tailwind v4 i rewolucja tokenów projektowych.** Tailwind v4 (wydany w styczniu 2025) zastąpił swoje generowanie kolorów oparte na HSL systemem opartym na OKLCH. shadcn/ui podążył krótko po, adoptując OKLCH dla swojego motywu opartego na zmiennych CSS; Radix Colors v3 również go zaadoptował. Dlaczego teraz: systemy designu potrzebują ciemniejszych odcieni, które wyglądają na równomiernie rozstawione w całej palecie, i potrzebują, aby ta własność utrzymywała się automatycznie wraz ze wzrostem palety. W HSL projektanci musieli ręcznie korygować każdy krok koloru — podbijać L o dodatkowe 5% na ciemnym końcu rampy niebieskiej, aby pasował do ciemnego końca rampy zielonej, a potem ponownie podbijać, gdy marka ewoluowała. W OKLCH pojedyncza formuła (krokuj L o 0,1, utrzymuj C i H stałe) produkuje spójne rampy automatycznie. Realny przykład: w Tailwind v3 `red-500` i `blue-500` miały widocznie różne postrzegane wagi mimo identycznego L% w HSL; w v4 `red-500` i `blue-500` wyglądają zrównoważenie, ponieważ oba siedzą przy tym samym L w OKLCH. Ma to znaczenie dla dostępności (spójny kontrast względem wspólnych teł oznacza, że stany komponentów wydają się jednolite w całej palecie), spójności marki (hierarchia wizualna utrzymuje się między paletami — przycisk `primary` i przycisk `accent` przy tym samym L sprawiają wrażenie tego samego poziomu hierarchii) oraz ergonomii programisty (jeden model mentalny zamiast dziesiątek ręcznie strojonych wyjątków zakopanych w specyfikacji tokenów projektowych).

**Implikacje dla szerokiego gamutu.** OKLCH jest nieograniczony — potrafi reprezentować kolory poza sRGB, włącznie ze wszystkim, co Display P3 i Rec2020 potrafią odtworzyć. Czyni go to naturalnym wyborem dla nowoczesnych wyświetlaczy o szerokim gamucie. Większość urządzeń Apple od 2017 (iPhone 7 wzwyż, MacBook Pro od 2016, każdy iPad Pro) renderuje Display P3 natywnie, a wiele nowoczesnych urządzeń z Androidem i ekranów laptopów również. Kompromis: nie każda trójka OKLCH mapuje się na prawidłowy kolor sRGB. Narzędzie pokazuje trzy plakietki gamutu — sRGB, Display P3, Rec2020 — więc od razu widać, czy bieżące OKLCH wyświetli się poprawnie na danym celu. Gdy kolor jest tylko-sRGB, przycisk **Dopasuj do sRGB** używa binarnej redukcji chromy (zgodnie z informacyjnym algorytmem mapowania gamutu z CSS Color 4 §13), aby zmniejszyć kolor do gamutu, zachowując L i H — dając fallback HEX, który możesz wysłać przez `@supports not (color: oklch(0 0 0))` obok oryginalnej wartości OKLCH dla klientów z szerszym gamutem.

**Matematyka konwersji HEX → OKLCH.** Potok jest dobrze zdefiniowany i ugruntowany w dwóch źródłach pierwotnych: W3C CSS Color 4 dla etapów sRGB i XYZ, Ottosson 2020 dla etapu OKLAB. Krok pierwszy: sparsuj `#RRGGBB` na trzy 8-bitowe całkowitoliczbowe kanały sRGB przez `parseInt(hex.slice(1, 3), 16)` na kanał. Krok drugi: znormalizuj każdy kanał do 0–1 przez podzielenie przez 255. Krok trzeci: dekoduj gammą do linear-sRGB przez fragmentaryczną funkcję z CSS Color 4 §11.2 (`v <= 0.04045 ? v/12.92 : ((v+0.055)/1.055)^2.4`). Krok czwarty: pomnóż przez macierz 3×3 z §15.1, aby uzyskać współrzędne CIE XYZ D65. Krok piąty: pomnóż przez macierz LMS Ottossona (z jego referencyjnej implementacji z 2020) i wykonaj pierwiastek sześcienny każdego kanału. Krok szósty: pomnóż przez macierz OKLAB Ottossona, aby uzyskać L / a / b. Krok siódmy: przekształcenie kartezjańsko-biegunowe — `C = sqrt(a² + b²); H = atan2(b, a) * 180 / π`, zawiń H do 0–360°. Pełny potok działa w mikrosekundach — każde naciśnięcie klawisza ponownie renderuje wyjście OKLCH natychmiast, bez debounce.

Przepływ HEX → OKLCH tego narzędzia to jeden kierunek z 5-odgałęzieniowej rodziny, która współdzieli ten sam bazowy 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 OKLCH. Jednokierunkowe odgałęzienia celują w konkretne intencje wyszukiwania w Google: konwerter HEX na RGB dla kierunku canvas-i-sprzęt, konwerter RGB na HEX dla kierunku odwrotnego, konwerter HEX na HSL dla starszej kognitywno-projektowej przestrzeni cylindrycznej, wciąż używanej w wielu bazach kodu Tailwind v3, oraz konwerter HEX na CMYK dla przybliżeń pod przygotowanie druku. Wszystkie pięć odgałęzień i hub współdzielą wewnętrznie to samo źródło prawdy w OKLCH oraz te same macierze Ottossona z 2020, 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. Aby zgłębić, dlaczego OKLCH stał się standardem systemów designu w latach 2024–2026, sięgnij po nasz przewodnik towarzyszący: Przestrzeń barw OKLCH wyjaśniona — dlaczego Tailwind v4 ją przyjął.

// sRGB hex → OKLCH per W3C CSS Color 4 + Ottosson 2020
// References: https://www.w3.org/TR/css-color-4/#color-conversion-code
//             https://bottosson.github.io/posts/oklab/
// Worked example: #3b82f6 (Tailwind blue-500) → oklch(0.629 0.193 263.4)
function hexToOklch(hex) {
  const h = hex.trim().replace(/^#/, '');
  const srgb = [0, 2, 4].map(i => parseInt(h.slice(i, i + 2), 16) / 255);
  // sRGB → linear-sRGB (CSS Color 4 §11.2 piecewise gamma)
  const lin = srgb.map(v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4));
  const [lr, lg, lb] = lin;
  // linear-sRGB → XYZ D65 (CSS Color 4 §15.1 matrix)
  const x = 0.4124564 * lr + 0.3575761 * lg + 0.1804375 * lb;
  const y = 0.2126729 * lr + 0.7151522 * lg + 0.0721750 * lb;
  const z = 0.0193339 * lr + 0.1191920 * lg + 0.9503041 * lb;
  // XYZ D65 → LMS (Ottosson 2020), cube-root, → OKLAB
  const l_ = Math.cbrt(0.8189330101 * x + 0.3618667424 * y - 0.1288597137 * z);
  const m_ = Math.cbrt(0.0329845436 * x + 0.9293118715 * y + 0.0361456387 * z);
  const s_ = Math.cbrt(0.0482003018 * x + 0.2643662691 * y + 0.6338517070 * z);
  const L = 0.2104542553 * l_ + 0.7936177850 * m_ - 0.0040720468 * s_;
  const a = 1.9779984951 * l_ - 2.4285922050 * m_ + 0.4505937099 * s_;
  const b = 0.0259040371 * l_ + 0.7827717662 * m_ - 0.8086757660 * s_;
  // OKLAB → OKLCH (Cartesian to polar)
  const C = Math.sqrt(a * a + b * b);
  const H = (Math.atan2(b, a) * 180 / Math.PI + 360) % 360;
  return `oklch(${L.toFixed(3)} ${C.toFixed(3)} ${H.toFixed(1)})`;
}
console.log(hexToOklch('#3b82f6')); // → oklch(0.629 0.193 263.4)

Kluczowe funkcje

Percepcyjnie jednorodne wyjście między wszystkimi barwami

Kanał L w OKLCH jest zakotwiczony w percepcyjnym modelu OKLAB (Ottosson 2020), więc każdy krok L wygląda jak ta sama zmiana jasności między wszystkimi barwami — zieleń przy `oklch(0.7 0.2 130)` i niebieski przy `oklch(0.7 0.2 250)` czyta się jako równie jasne na ekranie. To strukturalna własność, która pozwala Tailwind v4 generować wizualnie równe rampy automatycznie, bez ręcznego strojenia per kolor — ta sama własność, której odpowiednia rampa HSL zagwarantować nie potrafi, ponieważ HSL dziedziczy dziwactwa gammy sRGB.

Gotowy pod Tailwind v4 — wrzuć do bloków @theme

Wyjście OKLCH używa formy z rozdziałem spacjami z CSS Color 4 (`oklch(0.629 0.193 263.4)`) — dokładnie tej składni, której Tailwind v4 oczekuje wewnątrz bloku `@theme` jako `--color-primary: oklch(0.629 0.193 263.4);`. Precyzja L pasuje do opublikowanej precyzji palety Tailwinda (trzy miejsca po przecinku na L i C, jedno miejsce po przecinku na H), więc przepływ wklej-do-konfiguracji produkuje identyczne tokeny do tych, które Tailwind dostarcza domyślnie. Sparuj z fragmentem Tailwind v4 z sekcji Skopiuj jako kod dla pełnej linii tokenu.

Plakietki gamutu Display P3 + Rec2020

Trzy aktywne plakietki (sRGB, Display P3, Rec2020) sygnalizują, czy bieżąca trójka OKLCH mieści się w odtwarzalnym zakresie każdej przestrzeni. Przydatne, ponieważ OKLCH jest nieograniczony — wiele wysoko chromatycznych kolorów przekracza sRGB, ale mieści się w P3, który większość urządzeń Apple od 2017 potrafi renderować natywnie. Plakietki robią się czerwone przy wartościach poza gamutem, więc możesz zdecydować, czy zachować szerszą wartość gamutu dla nowoczesnych wyświetlaczy, czy dopasować do sRGB dla uniwersalnej kompatybilności. Sprawdzenie zakresu kanałów działa przy każdym naciśnięciu klawisza.

Dopasuj do sRGB dla kompatybilności ze starszymi systemami

Przycisk Dopasuj do sRGB uruchamia binarną redukcję chromy (informacyjny algorytm z CSS Color 4 §13): utrzymuje L i H stałe, szuka C w dół, aż wynikowa konwersja sRGB pozostanie w gamucie. Wyszukiwanie kończy się po około 30 iteracjach z precyzją poniżej piksela. Zachowanie L i H oznacza, że dopasowany kolor czyta się jako ta sama rodzina barw przy tej samej jasności — traci tylko nasycenie, co jest najmniej rażącym wizualnie kompromisem. Dopasowany HEX paruje się z oryginalnym OKLCH przez `@supports not (color: oklch(0 0 0))` dla warstwowego fallbacku.

Natychmiastowa konwersja per naciśnięcie klawisza

Nie ma przycisku Konwertuj. Wpisz pojedynczy znak w pole HEX, a pole OKLCH aktualizuje się w tej samej klatce animacji. Wewnętrzna kanoniczna reprezentacja to sama trójka OKLCH, więc edytowanie OKLCH bezpośrednio jest równie szybkie — kursor pozostaje tam, gdzie go postawiłeś, przebudowują się tylko pozostałe pola formatów. Matematyka konwersji (sRGB → linear → XYZ → LMS → OKLAB → biegunowo) działa w mikrosekundach; bez debounce, bez opóźnień, bez widocznych przebudów układu.

Działający przykład przez potok W3C + Ottosson 2020

Sekcja z przykładem kodu dostarcza działającą implementację JavaScript pełnego potoku HEX → OKLCH używającą dokładnie tych macierzy i funkcji gammy, które opublikowano w W3C CSS Color 4 (§11.2 fragmentaryczna gamma, §15.1 macierz linear-sRGB → XYZ D65) oraz w referencyjnej implementacji OKLAB Björna Ottossona z 2020. Wklej do REPL Node i zweryfikuj, że `#3b82f6` daje `oklch(0.629 0.193 263.4)`. Każda wartość macierzy jest skopiowana wprost ze swojego źródła pierwotnego — bez ponownych wyprowadzeń ani zaokrągleń.

Dwukierunkowy z HSL / RGB / HEX w zunifikowanym hubie

Choć to odgałęzienie celuje konkretnie w HEX → OKLCH, ta sama strona udostępnia też pozostałe osiem pól formatów — RGB dla sprzętu, HSL dla starszego CSS, OKLAB dla matematyki palet, HSV/HWB dla UI selektorów, CMYK dla druku oraz najbliższy nazwany kolor CSS. Wewnętrzne źródło prawdy w OKLCH oznacza, że każde pole jest stabilne bitowo między konwersjami w obie strony: HEX → OKLCH → HSL → HEX odzyskuje oryginalny HEX. Kliknij w dowolne pole, aby edytować je bezpośrednio, i obserwuj, jak pozostałe się aktualizują.

Podsumowanie wsparcia przeglądarek inline

Narzędzie wystawia kanoniczne dane wsparcia przeglądarek tam, gdzie ma to znaczenie: Chrome i Edge 111 (marzec 2023), Safari 15.4 (marzec 2022 — najwcześniej), Firefox 113 (maj 2023), łączne pokrycie wg caniuse ponad 94%. Dla starszych klientów opakuj tokeny w `@supports (color: oklch(0 0 0))` i dostarcz fallback HEX w alternatywnej gałęzi. Wyjście Dopasuj do sRGB to dokładnie ten fallback, generowany automatycznie z bieżącej trójki OKLCH — bez ręcznego strojenia chromy.

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

Całe parsowanie HEX, konwersja OKLCH, wykrywanie gamutu, 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 pod nieopublikowane produkty, szkiców makiet pod NDA i każdej innej poufnej pracy z kolorem, gdzie wartość nie może wyciec.

Alternatywy dla konwertera HEX na OKLCH

OKLCH.com

narzędzie webowe

Pięknie zrobione narzędzie skupione na OKLCH autorstwa Andreya Sitnika (autora polyfilla postcss-oklab-function i Autoprefixera). Najlepsze w klasie do czystej eksploracji OKLCH ze świadomym szerokiego gamutu pickerem, wizualizacją świadomą P3 i generowaniem palet. Nie pokrywa konwersji HEX/RGB/HSL/CMYK jako głównych wyjść — skupia się wyłącznie na OKLCH. Sięgaj po OKLCH.com przy głębokiej pracy projektowej w OKLCH; sięgaj po to narzędzie, gdy potrzebujesz też konwersji między przestrzeniami oraz funkcji gamut/kontrast/CVD.

Dokumentacja palety Tailwind v4

referencja dokumentacyjna

Dokumentacja Tailwind v4 publikuje pełną domyślną paletę w OKLCH obok odpowiedników HEX. Najlepsze do wyszukiwania dokładnego ciemniejszego odcienia Tailwinda (`blue-500` → `oklch(0.629 0.193 263.4)`) albo dopasowywania własnych kolorów do wizualnej wagi ciemniejszego odcienia Tailwinda. Nieinteraktywne — bez konwersji dowolnych kodów HEX. To narzędzie pokrywa tę samą precyzję OKLCH i działa dla dowolnego HEX-a, nie tylko 200+ domyślnych Tailwinda.

ColorJS.io Playground

narzędzie webowe

ColorJS.io to autorytatywna biblioteka kolorów CSS autorstwa Lei Verou i Chrisa Lilleya; playground wystawia pełny graf konwersji (HEX, RGB, HSL, HWB, LCH, OKLCH, OKLAB, P3, Rec2020, ProPhoto, A98). Głęboko poprawna matematyka, idealne do pracy nad kolorem na poziomie specyfikacji. UI nastawione na developerów (nie projektantów) i brakuje funkcji kontrastu / CVD / palet. Sparuj z tym narzędziem: użyj ColorJS.io do matematyki, której nie da się inaczej zweryfikować, użyj tego narzędzia do aktywnych przepływów pracy.

Generator motywów shadcn/ui

narzędzie webowe

Generator motywów shadcn z Vercela produkuje gotowe do wklejenia motywy zmiennych CSS w OKLCH dla projektów shadcn/ui. Najlepszy do generowania motywu end-to-end, gdy efektem ma być plik konfiguracyjny shadcn. Nie wystawia pośrednich wartości OKLCH dla dowolnych kodów HEX — skupia się na pełnym przepływie pracy z motywem. Użyj generatora shadcn, gdy budujesz motyw shadcn; użyj tego narzędzia, gdy potrzebujesz OKLCH dowolnego pojedynczego koloru.

ColorHexa

narzędzie webowe

Długo działające strony per-kolor z głębokimi metadanymi SEO. Niedawno dodał wsparcie OKLCH obok HEX/RGB/HSL/CMYK. Interfejs jest przestarzały (początek lat 2010), brak wykrywania szerokiego gamutu, brak kontrastu APCA. Mocny w SEO discovery konkretnego HEX-a przez Google; słabszy dla aktywnych przepływów konwersji, gdzie UX zunifikowanych pól oraz funkcje gamut/kontrast mają znaczenie. To narzędzie wygrywa w każdej osi aktywnego przepływu pracy.

Selektor kolorów w DevTools przeglądarki

wbudowana funkcja przeglądarki

Chrome, Firefox i Safari DevTools wszystkie dostarczają selektor kolorów, który przełącza między HEX, RGB, HSL, HWB i OKLCH inline, gdy klikniesz próbkę koloru w panelu CSS. Bezpłatny, bez instalacji, zawsze dostępny. Brakuje plakietek gamutu, oceny kontrastu, symulacji ślepoty barw i 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 albo głębszych sprawdzeń.

Culori CLI

biblioteka wiersza poleceń

Culori to najbardziej dogłębna biblioteka kolorów JavaScript świadoma OKLCH; jej CLI obsługuje konwersję HEX → OKLCH jako jednoliniowiec (`culori convert '#3b82f6' --to oklch`). Świetne do skryptów CI i wsadowej migracji tokenów. Brak wizualnego selektora ani plakietek gamutu. Użyj Culori CLI do automatyzacji; użyj tego narzędzia do interaktywnej pracy nad pojedynczym kolorem oraz natychmiastowego wizualnego feedbacku.

Przykłady konwersji HEX na OKLCH

Migracja palety HSL Tailwind 3 → tokeny OKLCH w v4

#3b82f6

Wyjście OKLCH: `oklch(0.629 0.193 263.4)`. Kanoniczny przepływ migracji do Tailwind v4: zdefiniuj kolor marki raz w bloku `@theme` jako `--color-primary: oklch(0.629 0.193 263.4)`, potem skomponuj jaśniejsze odcienie, krokując L w górę (`oklch(0.7 0.193 263.4)`, `oklch(0.8 0.15 263.4)`), a ciemniejsze odcienie krokując L w dół (`oklch(0.5 0.193 263.4)`, `oklch(0.4 0.18 263.4)`). Barwa pozostaje zablokowana na 263,4°, chroma kotwiczy się przy 0,19, a jasność jest jedyną osią, która się przesuwa — jednowymiarowa rampa, która wygląda na wizualnie równą przez całą skalę, czego odpowiednia rampa HSL zagwarantować nie potrafi.

Migracja tokenów projektowych z percepcyjnie jednorodnymi ciemniejszymi odcieniami

#FF5733

Wyjście OKLCH: w przybliżeniu `oklch(0.66 0.18 28)`. Aby zbudować 5-stopniową rampę ciemniejszych odcieni z tej pomarańczy marki, utrzymaj C = 0,18 i H = 28 stałe i krokuj L przez 0,3, 0,45, 0,6, 0,75, 0,9 — dając `oklch(0.3 0.18 28)` do `oklch(0.9 0.18 28)`. Każda sąsiednia para sprawia wrażenie tego samego wizualnego skoku jasności, ponieważ L w OKLCH jest zakotwiczone w percepcyjnym modelu OKLAB (Ottosson 2020), a nie w pogmatwanej gammą geometrycznej L z HSL. Chroma może po cichu przyciąć się w stronę sRGB na ekstremach; plakietki gamutu w narzędziu sygnalizują dokładnie, które kroki wymagają uwagi.

Szerokogamutowy OKLCH → fallback sRGB dla stron z Tailwind v3

#FF1744

Wyjście OKLCH: w przybliżeniu `oklch(0.62 0.27 26)`. Tak wysoko chromatyczna czerwień przekracza sześcian sRGB — plakietka gamutu **sRGB** robi się czerwona, plakietka **Display P3** potwierdza, że mieści się w P3, a Rec2020 też ją obejmuje. Na standardowym 24-bitowym monitorze renderuje się jako odbarwione przybliżenie; na ekranie Display P3 (większość urządzeń Apple od 2017) renderuje się z pełnym nasyceniem. Kliknij **Dopasuj do sRGB**, aby uruchomić algorytm binarnej redukcji chromy (CSS Color 4 §13 informacyjnie) — L i H pozostają zablokowane, a C kurczy się, aż kolor się zmieści, produkując fallback HEX odpowiedni do bazy kodu Tailwind v3, która nadal używa 8-bitowych tokenów HEX.

Migracja motywu shadcn/ui

#0f172a

Wyjście OKLCH: w przybliżeniu `oklch(0.21 0.04 264.7)`. shadcn/ui przeniósł swój motyw oparty na zmiennych CSS na OKLCH krótko po wydaniu Tailwind v4, a `#0f172a` (Tailwind slate-900) to kanoniczne tło dla trybu ciemnego. Narzędzie odtwarza opublikowaną przez shadcn wartość OKLCH dla tego samego HEX-a, więc możesz zweryfikować, że społecznościowy port motywu pasuje do definicji upstream. Sparuj z wierszem kontrastu, aby potwierdzić, że tekst pierwszego planu trybu ciemnego (biały lub prawie biały) nadal spełnia WCAG AA względem tego tła — `oklch(0.21 ...)` względem `oklch(1 0 0)` raportuje komfortowy współczynnik 16:1.

Zbuduj parę jasny/ciemny w Tailwind v4 z HEX-a marki

#3b82f6

Wyjście OKLCH: `oklch(0.629 0.193 263.4)`. Aby wyprowadzić dopasowaną parę jasny/ciemny dla motywu, obracaj wyłącznie kanałem L przy utrzymaniu stałych C i H: kolor podstawowy trybu jasnego staje się `oklch(0.7 0.15 263)` (nieco jaśniejszy, nieco mniej chromatyczny, aby uniknąć zmęczenia oczu na białym tle), kolor podstawowy trybu ciemnego staje się `oklch(0.5 0.18 263)` (nieco ciemniejszy, nieco bardziej chromatyczny, aby zachować wyrazistość na ciemnym tle). Oba warianty czyta się jako tę samą tożsamość marki, ponieważ barwa jest zablokowana; percepcyjne przesunięcie L równoważy czytelność w obu trybach bez ręcznego strojenia kanałów RGB.

Najczęstsze konwersje HEX → OKLCH (Tailwind v4)

Tabela referencyjna 10 popularnych średnich odcieni z domyślnej palety Tailwind v4 z ich odpowiednikami HEX i OKLCH. Wartości pasują do precyzji opublikowanej palety Tailwind v4 (trzy miejsca po przecinku na L i C, liczba całkowita lub jedno miejsce po przecinku na H).

Tailwind slate-500

#64748b oklch(0.55 0.04 257)

Domyślny slate-500 z Tailwind CSS — neutralny chłodny szary używany do tekstu treści, drugorzędnych powierzchni i odejmowanych wizualnie elementów UI. Niska chroma (0,04) utrzymuje go wizualnie neutralnym.

#64748b oklch(0.55 0.04 257)

slate to kanoniczna neutralna rampa dla motywów przyjaznych trybowi ciemnemu — każdy ciemniejszy odcień slate siedzi przy bardzo niskiej chromie, więc czyta się jako szary, a nie jako niebieskawy.

Potrzebujesz pełnego selektora kolorów z RGB, HSL, CMYK, ostrzeżeniami gamutu i eksportem kodu? Wypróbuj zunifikowany konwerter kolorów — każdy format jednocześnie edytowalny.

Tailwind gray-500

#6b7280 oklch(0.55 0.03 258)

Domyślny gray-500 z Tailwind CSS — prawdziwie neutralny odpowiednik slate. Nieco niższa chroma niż slate (0,03 vs 0,04) dla bardziej achromatycznego wyglądu.

#6b7280 oklch(0.55 0.03 258)

gray i slate siedzą przy niemal identycznym L (0,55) — postrzegana jasność jest dopasowana, tylko drobna różnica chromy je odróżnia.

Potrzebujesz pełnego selektora kolorów z RGB, HSL, CMYK, ostrzeżeniami gamutu i eksportem kodu? Wypróbuj zunifikowany konwerter kolorów — każdy format jednocześnie edytowalny.

Tailwind red-500

#ef4444 oklch(0.64 0.21 25)

Domyślny red-500 z Tailwind CSS — kanoniczna czerwień akcji destrukcyjnej / błędu. Wysoka chroma (0,21) utrzymuje ją wyrazistą na neutralnych tłach.

#ef4444 oklch(0.64 0.21 25)

red-500 siedzi przy L=0,64, pasując do L=0,63 blue-500 — rampy v4 są percepcyjnie zrównoważone między barwami, w przeciwieństwie do palety v3 opartej na HSL.

Potrzebujesz pełnego selektora kolorów z RGB, HSL, CMYK, ostrzeżeniami gamutu i eksportem kodu? Wypróbuj zunifikowany konwerter kolorów — każdy format jednocześnie edytowalny.

Tailwind orange-500

#f97316 oklch(0.71 0.19 42)

Domyślny orange-500 z Tailwind CSS — ciepła barwa akcentu i CTA. Siedzi między czerwienią a bursztynem na kole barw (42°).

#f97316 oklch(0.71 0.19 42)

Wyższe L orange-500 (0,71) względem L red-500 (0,64) jest celowe — żółcie i pomarańcze wyglądają jasno przy niższym L percepcyjnym niż czerwienie.

Potrzebujesz pełnego selektora kolorów z RGB, HSL, CMYK, ostrzeżeniami gamutu i eksportem kodu? Wypróbuj zunifikowany konwerter kolorów — każdy format jednocześnie edytowalny.

Tailwind amber-500

#f59e0b oklch(0.76 0.16 70)

Domyślny amber-500 z Tailwind CSS — barwa ostrzegawcza / uwagi, między pomarańczą a żółcienią na kole.

#f59e0b oklch(0.76 0.16 70)

amber-500 trafia w najwyższe L (0,76) z każdego koloru poziomu 500 w Tailwindzie — żółcie naturalnie potrzebują wyższego L, aby wyglądać wizualnie jako „średni ton”.

Potrzebujesz pełnego selektora kolorów z RGB, HSL, CMYK, ostrzeżeniami gamutu i eksportem kodu? Wypróbuj zunifikowany konwerter kolorów — każdy format jednocześnie edytowalny.

Tailwind green-500

#22c55e oklch(0.72 0.19 149)

Domyślny green-500 z Tailwind CSS — barwa sukcesu / potwierdzenia. Siedzi przy 149° na kole barw, w regionie cyjanowo-zielonym.

#22c55e oklch(0.72 0.19 149)

green-500 przy L=0,72 jest o ciut jaśniejszy niż red-500 przy L=0,64 — to pasuje do percepcyjnej rzeczywistości (zielenie wyglądają jasno) i daje palecie zrównoważoną wagę wizualną.

Potrzebujesz pełnego selektora kolorów z RGB, HSL, CMYK, ostrzeżeniami gamutu i eksportem kodu? Wypróbuj zunifikowany konwerter kolorów — każdy format jednocześnie edytowalny.

Tailwind teal-500

#14b8a6 oklch(0.7 0.13 184)

Domyślny teal-500 z Tailwind CSS — chłodna barwa akcentu między zielenią a cyjanem. Niższa chroma niż green-500, ponieważ wysoko chromatyczne odcienie morskie łatwo przekraczają sRGB.

#14b8a6 oklch(0.7 0.13 184)

H=184° teal-500 siedzi tuż za cyjanem (180°) — czysty cyjan w OKLCH jest trudny do wyrażenia w sRGB bez przycinania chromy; teal to praktyczny kompromis.

Potrzebujesz pełnego selektora kolorów z RGB, HSL, CMYK, ostrzeżeniami gamutu i eksportem kodu? Wypróbuj zunifikowany konwerter kolorów — każdy format jednocześnie edytowalny.

Tailwind blue-500

#3b82f6 oklch(0.63 0.19 263)

Domyślny blue-500 z Tailwind CSS — kanoniczny „web blue” lat 2020., kolor-kotwica marki palety v4 i domyślnego motywu shadcn/ui.

#3b82f6 oklch(0.63 0.19 263)

blue-500 to kolor referencyjny najczęściej używany jako punkt wyjścia migracji do OKLCH w Tailwind v4 — wklej tu #3b82f6, aby zweryfikować konwersję względem opublikowanej wartości.

Potrzebujesz pełnego selektora kolorów z RGB, HSL, CMYK, ostrzeżeniami gamutu i eksportem kodu? Wypróbuj zunifikowany konwerter kolorów — każdy format jednocześnie edytowalny.

Tailwind indigo-500

#6366f1 oklch(0.59 0.21 277)

Domyślny indigo-500 z Tailwind CSS — chłodny towarzysz akcentu dla niebieskiego, siedzący przy 277° (w stronę fioletu). Wysoka chroma (0,21) daje mu wyrazistość.

#6366f1 oklch(0.59 0.21 277)

indigo-500 siedzi przy niższym L niż blue-500 (0,59 vs 0,63) — głębsza barwa pochłania więcej pozornej jasności, a rampa v4 uwzględnia to percepcyjnie.

Potrzebujesz pełnego selektora kolorów z RGB, HSL, CMYK, ostrzeżeniami gamutu i eksportem kodu? Wypróbuj zunifikowany konwerter kolorów — każdy format jednocześnie edytowalny.

Tailwind violet-500

#8b5cf6 oklch(0.6 0.24 295)

Domyślny violet-500 z Tailwind CSS — barwa akcentu fioletu przy 295°. Najwyższa chroma (0,24) z każdego koloru poziomu 500 w Tailwindzie, często używana do brandingu produktów AI / kreatywnych.

#8b5cf6 oklch(0.6 0.24 295)

Wysokie C=0,24 violet-500 stawia go blisko sufitu gamutu sRGB — przepchnij wyżej, a wkroczy w terytorium tylko-P3.

Potrzebujesz pełnego selektora kolorów z RGB, HSL, CMYK, ostrzeżeniami gamutu i eksportem kodu? Wypróbuj zunifikowany konwerter kolorów — każdy format jednocześnie edytowalny.

Jak korzystać z konwertera HEX na OKLCH

  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`). Parser normalizuje wszystkie pięć kształtów wejściowych do tego samego wewnętrznego koloru przed wyprowadzeniem OKLCH. 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, włącznie z OKLCH.

  2. 2

    Odczytaj trójkę OKLCH z pola OKLCH

    Pole OKLCH pokazuje wartość w nowoczesnej formie CSS Color 4: `oklch(0.629 0.193 263.4)` dla koloru nieprzezroczystego, `oklch(0.629 0.193 263.4 / 0.5)` dla koloru z kanałem alfa. L jest zaokrąglone do trzech miejsc po przecinku (pasuje do opublikowanej precyzji Tailwind v4), C do trzech miejsc, H do jednego stopnia dziesiętnego. Wewnętrzne źródło prawdy w OKLCH oznacza, że bazowa precyzja float jest zachowana między każdym polem — konwersja w obie strony z powrotem do HEX pozostaje stabilna bitowo, w przeciwieństwie do starszych konwerterów obracających się wokół HSL, które dryfują o stopień lub dwa na każde przejście.

  3. 3

    Kliknij Kopiuj, aby pobrać ciąg OKLCH

    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 (`oklch(0.629 0.193 263.4)`), gotowa do wrzucenia w blok `@theme` Tailwind v4 lub definicję zmiennej CSS w shadcn/ui. Dla wyjścia pod konkretną platformę (właściwość niestandardowa CSS, token Tailwind v4, SwiftUI, Compose, Flutter) użyj sekcji Skopiuj jako kod pod selektorem — te fragmenty emitują format, którego każda platforma oczekuje natywnie.

  4. 4

    Sprawdź plakietki gamutu Display P3 / Rec2020

    Trzy plakietki gamutu (sRGB, Display P3, Rec2020) pokazują, czy bieżący kolor mieści się w odtwarzalnym zakresie każdej przestrzeni. Jeśli plakietka sRGB robi się czerwona, a P3 jest zielona, kolor jest szerokogamutowym OKLCH, który zrenderuje się z pełnym nasyceniem na sprzęcie Apple (iPhone, iPad, MacBook od 2017+), ale odbarwi się na starszym 24-bitowym monitorze. Przycisk **Dopasuj do sRGB** używa binarnej redukcji chromy (informacyjny algorytm z CSS Color 4 §13), aby zmniejszyć kolor do sRGB, zachowując L i H, produkując fallback HEX, który możesz wysłać przez `@supports not (color: oklch(0 0 0))`.

  5. 5

    Także widoczne: RGB, HSL, OKLAB, HSV, HWB, CMYK, nazwany kolor

    Ten sam HEX, który wklejasz, rozświetla też pozostałe osiem pól formatu — RGB dla wywołań canvasu i sprzętu, HSL dla starszych zmiennych CSS, OKLAB dla matematyki palet i macierzy ślepoty barw, HSV i HWB dla projektantów korzystających z selektorów kolorów, CMYK dla oszacowań druku oraz najbliższy nazwany kolor CSS dla dokumentacji i tekstów. Nigdy nie jesteś zamknięty tylko w HEX → OKLCH. Selektor (kwadrat SL + suwak barwy + suwak alfa) napędza wszystkie dziewięć jednocześnie, a w przeglądarkach opartych na Chromium przycisk EyeDropper próbkuje dowolny piksel na ekranie, także poza przeglądarką.

Częste błędy HEX / OKLCH

Czytanie chromy OKLCH jak nasycenia HSL

Chroma w OKLCH jest nieograniczona (0 do ~0,4 dla kolorów mieszczących się w sRGB, wyżej dla szerokiego gamutu) — to NIE jest procent nasycenia 0–100% jak S w HSL. Zakładanie, że C=0,3 oznacza „30% nasycenia”, błędnie odczytuje skalę: 0,3 jest bardzo chromatyczne, blisko sufitu sRGB dla niektórych barw i daleko poza nim dla innych. Maksymalne C zmienia się w zależności od L i H — zieleń przy L=0,7 wspiera dużo wyższe C niż niebieski przy L=0,3. Traktuj C jako absolutną odległość od szarości, a nie względny procent.

✗ Niepoprawne
Ustaw C OKLCH = 0,3, oczekując „30% nasycenia”:
oklch(0.7 0.3 250) → może przekroczyć gamut sRGB dla niebieskich
Kolor szerokogamutowy renderuje się odbarwiony na starszych wyświetlaczach.
✓ Poprawne
Traktuj C jako absolutną chromę, sprawdzaj plakietki gamutu:
oklch(0.7 0.15 250) → komfortowo w sRGB dla tej pary L+H
Użyj plakietek, aby znaleźć maksymalne C, które mieści się w docelowym gamucie.

Traktowanie L w OKLCH tak samo jak L w HSL

Obie przestrzenie raportują Lightness jako oś 0–1 (lub 0–100%), ale mierzą różne rzeczy. L w HSL jest geometryczne — wyprowadzane z uśredniania maks/min RGB w sRGB zakodowanym gammą. L w OKLCH jest percepcyjne — zakotwiczone w modelu OKLAB. Przeniesienie palety opartej na HSL jako `oklch(L%, C, H)` i oczekiwanie dopasowanej jasności produkuje nierówne wyniki, ponieważ relacja L między obiema przestrzeniami jest nieliniowa. Dla kolorów średnich tonów L w OKLCH = 0,6 to z grubsza L w HSL = 50%, ale krzywa dryfuje na ciemnym i jasnym końcu.

✗ Niepoprawne
Skopiuj procenty L z HSL wprost do OKLCH:
hsl(220 50% 30%) przeniesione jako oklch(0.30 0.10 220)
Oba kolory wyglądają zauważalnie inaczej pod względem jasności.
✓ Poprawne
Ponownie wyprowadź OKLCH z oryginalnego HEX-a, nie przenoś z HSL:
źródłowy HEX → konwersja OKLCH → oklch(0.34 0.08 254)
L percepcyjne pozostaje poprawne; paleta wydaje się równa.

Zapomnienie, że szerokogamutowy OKLCH nie wyświetli się w sRGB

OKLCH jest nieograniczony — możesz zapisać `oklch(0.7 0.4 30)` i składnia jest prawidłowa, ale chroma przekracza to, co przestrzeń bajtowa sRGB 256-na-kanał potrafi zakodować. Na monitorze sRGB ten kolor przycina się do najbliższego przybliżenia w gamucie (zwykle wersji odbarwionej). Na monitorze Display P3 renderuje się poprawnie. Wysłanie szerokogamutowego OKLCH bez sprawdzenia plakietek gamutu produkuje kolor, który wygląda inaczej na różnych wyświetlaczach — subtelny, ale realny błąd spójności cross-platform.

✗ Niepoprawne
Wysłać oklch(0.7 0.4 30) bez sprawdzenia gamutu sRGB:
Wyświetlacze P3 renderują nasyconą czerwień; wyświetlacze sRGB renderują odbarwioną
Kolor marki wygląda niespójnie między sprzętem użytkowników.
✓ Poprawne
Sprawdź plakietkę gamutu sRGB, dopasuj do sRGB jeśli trzeba, warstwuj z @supports:
@supports (color: oklch(0 0 0)) { --primary: oklch(0.7 0.4 30); }
@supports not (color: oklch(0 0 0)) { --primary: #ef6b50; }
Sprzęt P3 dostaje szerokogamutową wartość; sprzęt sRGB dostaje dopasowany fallback.

Brak wsparcia przeglądarek dla oklch()

Natywne parsowanie `oklch()` wylądowało w Chrome i Edge 111 (marzec 2023), Safari 15.4 (marzec 2022) oraz Firefox 113 (maj 2023). Łączne pokrycie wg caniuse to ponad 94%, ale pozostałe 6% obejmuje IE 11, stare Safari na iOS 15.3 lub wcześniej, stary Android Chrome i osadzone webviews. Wysyłanie `oklch()` bez fallbacku do tego długiego ogona renderuje się jako wartość CSS `inherit` albo zawodzi całkowicie. Zawsze rób feature-detect przez `@supports` dla produkcyjnych stron z szeroką publicznością.

✗ Niepoprawne
Zdefiniuj kolor marki tylko w OKLCH:
:root { --primary: oklch(0.629 0.193 263.4); }
IE 11 i stare iOS Safari nie renderują żadnego koloru.
✓ Poprawne
Warstwuj z @supports dla łagodnego fallbacku:
:root { --primary: #3b82f6; }
@supports (color: oklch(0 0 0)) { :root { --primary: oklch(0.629 0.193 263.4); } }
Nowoczesne przeglądarki dostają OKLCH; starsze przeglądarki dostają fallback HEX.

Mylenie OKLCH i LCH (biegunowa forma CIE-LAB)

CSS Color 4 dostarcza zarówno `oklch()`, jak i `lch()`. Wyglądają identycznie pod względem kształtu (L / C / H), ale używają różnych bazowych przestrzeni: `lch()` to biegunowa forma CIE-LAB (1976), `oklch()` to biegunowa forma OKLAB (Ottosson 2020). Te dwie NIE są wymienne — `lch(60% 50 240)` i `oklch(0.6 0.15 240)` opisują różne kolory. Jednorodność percepcyjna CIE-LAB załamuje się przy nasyconych niebieskich, dlatego Ottosson ponownie wyprowadził OKLAB. Dla nowej pracy nad systemami designu preferuj `oklch()` nad `lch()`.

✗ Niepoprawne
Zastąp oklch() przez lch(), oczekując tego samego wyniku:
lch(60% 50 240) ≠ oklch(0.6 0.15 240) — zupełnie różne kolory
Skopiowane między przestrzeniami, wartość po cichu się myli.
✓ Poprawne
Wybierz jedną przestrzeń i pozostań w niej:
oklch(0.629 0.193 263.4) dla nowoczesnych systemów designu
albo lch(60% 50 240) — ale nie wymieniaj nazw funkcji bez ponownej konwersji

Kto korzysta z HEX na OKLCH

Frontendowcy migrujący do tokenów OKLCH w Tailwind v4
Tailwind v4 ustandaryzował OKLCH dla swojej domyślnej palety w styczniu 2025. Migracja bazy kodu v3 z kolorami marki opartymi na HEX oznacza konwersję każdego HEX-a na OKLCH i wrzucenie wyniku do nowego bloku `@theme`. Wklej tu każdy HEX, skopiuj wartość `oklch()`, zdefiniuj `--color-primary: oklch(0.629 0.193 263.4)` i podobne. Aktywne plakietki gamutu sygnalizują kolory, które przekraczają sRGB, więc możesz zdecydować, czy zachować szerokogamutową wartość dla użytkowników Display P3, czy dopasować do sRGB.
Autorzy motywów shadcn/ui budujący własne palety
Motyw shadcn/ui oparty na zmiennych CSS używa OKLCH dla każdego tokenu (`--background`, `--foreground`, `--primary` itd.). Własne motywy wywodzą się z bazowego HEX-a marki przez konwersję do OKLCH, a potem przemiatanie L dla wariantów jasnego/ciemnego. Wklej HEX marki, odczytaj trójkę OKLCH, zbuduj resztę motywu przez krokowanie L przy utrzymaniu C i H stałych. Dokładnie pasuje do kanonicznego przepływu pracy shadcn.
Autorzy systemów designu generujący percepcyjnie równe rampy
Wygeneruj rampę 50/100/200/.../900 przez krokowanie kanału L w równych przyrostach w OKLCH przy utrzymaniu C i H stałych. Wizualny odstęp między sąsiednimi przystankami wygląda identycznie między wszystkimi barwami — czego paleta kolorów marki faktycznie potrzebuje. Tailwind v4 używa dokładnie tej konstrukcji dla swojej domyślnej palety, a shadcn/ui to lustrzanie odbija. Wklej każdy HEX marki, odczytaj OKLCH, wygeneruj rampę algorytmicznie albo przez panel Jaśniejsze odcienie / Ciemniejsze odcienie / Tony pod selektorem.
Inżynierowie dostępności weryfikujący kontrast w przestrzeni OKLCH
Kontrast WCAG 2.1 i APCA oba raportują względem rozwiązanego koloru sRGB, a nie trójki OKLCH — ale znajomość L w OKLCH koloru marki czyni strojenie kontrastu przewidywalnym: podbij L o 0,1, aby spełnić AA względem bieli, opuść L o 0,1, aby spełnić AA względem czerni. Jednoczesny widok OKLCH + WCAG + APCA czyni tę relację widoczną. Wklej HEX marki, obserwuj plakietki kontrastu, dostosowuj L w OKLCH (bardziej przewidywalne niż HSL), aż para zaliczy obie miary.
Webdeveloperzy budujący szerokogamutowe tokeny kolorów dla nowoczesnych wyświetlaczy
Większość urządzeń Apple od 2017 (i wiele nowoczesnych urządzeń z Androidem) renderuje Display P3 natywnie. Definiowanie kolorów akcentu marki w OKLCH pozwala adresować nasycone czerwienie i zielenie tylko z P3, których żaden kod HEX zakodować nie potrafi. Wklej istniejący HEX, aby odczytać jego OKLCH, potem przepchnij kanał C powyżej sufitu sRGB, aby zająć dodatkowe nasycenie P3. Plakietki gamutu potwierdzają, że nowa wartość mieści się w P3 (i degraduje się łagodnie na ekranach tylko-sRGB przez kompresję chromy w przeglądarce).
Wykładowcy uczący jasności percepcyjnej kontra geometrycznej
Jednoczesny widok OKLCH + HSL czyni różnicę między jasnością percepcyjną a geometryczną oczywistą. Wklej nasyconą zieleń i nasyconą niebieskość przy tym samym L=50% w HSL; wartości L w OKLCH będą się zauważalnie różnić, ponieważ OKLCH mierzy faktyczną postrzeganą jasność. Przeciągnij suwak barwy HSL i obserwuj, jak L w OKLCH chybocze się, gdy utrzymujesz L w HSL stałe — krzywa to dziwactwa gammy zwizualizowane. Demonstracja gotowa do sali wykładowej, dlaczego systemy designu zmigrowały na OKLCH.
Maintainerzy open source modernizujący dokumentację tokenów
Starsze dokumentacje systemów designu zwykle wymieniają kolory marki tylko jako kody HEX. Modernizacja na OKLCH oznacza pokazanie tego samego koloru w obu przestrzeniach — HEX dla kompatybilności bloków kodu, OKLCH dla tabeli specyfikacji i nowoczesnej definicji tokenu. Wklej każdy HEX, skopiuj wyjście OKLCH, zaktualizuj dokumentację. Udostępnialny hash adresu URL pozwala też kontrybutorom linkować do dokładnego koloru omawianego w zgłoszeniu GitHub bez wieloznaczności.

Matematyka i potok HEX na OKLCH

HEX → OKLCH to 7-stopniowy potok
Konwersja przechodzi przez pięć pośrednich reprezentacji: HEX → całkowitoliczbowe sRGB → znormalizowane sRGB (0–1) → linear-sRGB (zdekodowane gammą) → CIE XYZ D65 → OKLAB → OKLCH. Każdy krok to dobrze zdefiniowana macierz lub fragmentaryczna funkcja ze źródła pierwotnego. Narzędzie uruchamia pełny potok przy każdym naciśnięciu klawisza; matematyka jest wystarczająco szybka (mikrosekundy), że żaden debounce nie jest potrzebny. Wystawienie pośredniej krotki RGB obok OKLCH oznacza, że można debugować nieoczekiwaną wartość OKLCH przez inspekcję kanałów RGB.
Funkcja gammy z CSS Color 4 §11.2
Konwersja sRGB → linear-sRGB używa fragmentaryczną funkcję z CSS Color 4 §11.2: `v ≤ 0.04045 ? v/12.92 : ((v + 0.055) / 1.055)^2.4`. Forma fragmentaryczna (z małym odcinkiem liniowym blisko zera) unika niestabilności numerycznej formy czysto wykładniczej przy bardzo ciemnych kolorach. To ta sama funkcja, której profile ICC używają do kodowania sRGB, i ta sama funkcja, której przeglądarki używają wewnętrznie podczas renderowania kodów HEX. Odwrotność dla OKLCH → HEX stosuje tę samą funkcję w odwrotnym kierunku: `v ≤ 0.0031308 ? v * 12.92 : 1.055 * v^(1/2.4) - 0.055`.
Macierz z CSS Color 4 §15.1: linear-sRGB ↔ XYZ D65
Macierz z CSS Color 4 §15.1 konwertuje linear-sRGB na CIE XYZ pod punktem bieli D65: `X = 0.4124564 R + 0.3575761 G + 0.1804375 B`, `Y = 0.2126729 R + 0.7151522 G + 0.0721750 B`, `Z = 0.0193339 R + 0.1191920 G + 0.9503041 B`. Wiersz Y daje wzór na luminancję sRGB. Macierz jest tą samą, której używa każda biblioteka zarządzania kolorem, włącznie z ICC, Adobe Color Engine i open-source'owym potokiem LCMS. Macierz odwrotna dla OKLCH → HEX stosuje odwrotność z §15.1.
Macierze OKLAB Ottossona 2020 i krok pierwiastka sześciennego
Konwersja XYZ D65 → OKLAB używa dwóch macierzy i kroku pierwiastka sześciennego opublikowanych w pracy Björna Ottossona o OKLAB z 2020. Pierwsza macierz transformuje XYZ do przestrzeni odpowiedzi czopków LMS (luźno modelowanej na czułości ludzkich czopków L/M/S). Wykonaj pierwiastek sześcienny każdego kanału, aby skompresować zakres dynamiczny nieliniowo (krok korygujący jednorodność percepcyjną). Druga macierz transformuje LMS po pierwiastkowaniu na współrzędne L/a/b w OKLAB. Wszystkie trzy operacje używają dokładnych wartości opublikowanych w referencyjnej implementacji w pracy; bez ponownych wyprowadzeń ani zaokrągleń. Odwrotność dla OKLCH → HEX stosuje te macierze w odwrotnym kierunku.
OKLAB ↔ OKLCH to przekształcenie kartezjańsko-biegunowe
Osie `a` i `b` w OKLAB tworzą płaszczyznę chromy prostopadłą do osi L. OKLCH koduje tę płaszczyznę biegunowo: `C = sqrt(a² + b²)` (odległość euklidesowa od szarości), `H = atan2(b, a) * 180 / π` (kąt w stopniach, zawinięty do 0–360°). Odwrotność: `a = C * cos(H * π / 180)`, `b = C * sin(H * π / 180)`. Forma biegunowa jest preferowana nad OKLAB do przechowywania tokenów projektowych, ponieważ Hue jest stabilną osią — obracanie Hue nie powoduje przypadkowego przejścia przez szarość w sposób, w jaki obracanie `a` lub `b` potrafi w OKLAB.
Wykrywanie gamutu przez sprawdzenie zakresu kanałów
Kolor jest uważany za mieszczący się w gamucie docelowej przestrzeni (sRGB, Display P3, Rec2020), jeśli każdy kanał mieści się w `[-ε, 1 + ε]` po konwersji do podstawowych tej przestrzeni, gdzie `ε = 1e-7` pochłania szum precyzji float wokół granic. Plakietka gamutu dla każdej przestrzeni robi się czerwona, gdy dowolny kanał wychodzi poza zakres. OKLCH jest nieograniczony co do gamutu — `oklch(0.7 0.4 30)` to prawidłowa współrzędna, ale może przekraczać 256-na-kanał przestrzeń bajtową sRGB. Sprawdzenie działa przy każdym naciśnięciu klawisza; w połączeniu z Dopasuj do sRGB łapie najczęstszą pułapkę adopcji (szerokogamutowy OKLCH nieprawidłowo wyświetlający się na starszych ekranach).
Binarna redukcja chromy w Dopasuj do sRGB
Dopasuj do sRGB pasuje do informacyjnego algorytmu mapowania gamutu z CSS Color 4 §13: utrzymaj L i H stałe na bieżących wartościach, przeszukaj binarnie C ∈ [0, currentC] dla największego C, którego konwersja sRGB pozostaje w gamucie. Wyszukiwanie wykonuje co najwyżej 30 iteracji (precyzja ~10⁻⁹), co z naddatkiem wystarcza do wizualnej dokładności. Zachowanie L i H oznacza, że dopasowany kolor czyta się jako ta sama rodzina barw przy tej samej jasności — traci tylko nasycenie. Nie przycinamy kanałów RGB bezpośrednio, ponieważ to zauważalnie zniekształca barwę (szczególnie w niebieskich, które przycinają się w stronę fioletu).

Najlepsze praktyki dla przepływów HEX / OKLCH

Używaj OKLCH jako kanonicznego formatu tokenu w nowym kodzie
Dla każdego systemu designu wydawanego w 2025 i później definiuj kolory marki i rampy palet w OKLCH. Oś L daje percepcyjnie równe rampy automatycznie; oś chromy potrafi adresować szerokogamutowe kolory, których HEX zakodować nie potrafi. Zachowaj fallback HEX dla starszych przeglądarek przez `@supports not (color: oklch(0 0 0))` albo PostCSS w build-time, ale niech OKLCH będzie wartością kanoniczną w magazynie tokenów. Tailwind v4 i shadcn/ui oba wydają się w ten sposób; nowe projekty mogą podążyć za nimi bez tarcia.
Generuj rampy przez krokowanie L, utrzymując C i H stałe
Kanoniczna konstrukcja rampy OKLCH: zablokuj C i H, przemiataj L w równych przyrostach. 9-stopniowa rampa `oklch(L 0.15 263)` dla L = 0,1, 0,2, …, 0,9 produkuje wizualnie równe odstępy między każdym krokiem. Dokładnie to robi Tailwind v4 wewnętrznie. Nie przemiataj C razem z L, jeśli nie chcesz, aby chromatyczna intensywność rampy zmieniała się celowo (rzadko). Nie pozwól H dryfować między krokami — nawet 5° dryf sprawia, że rampa wydaje się pomieszana.
Dopasuj precyzję Tailwind v4: 3 miejsca po przecinku L+C, 1 miejsce po przecinku H
Domyślna paleta Tailwind v4 publikuje wartości OKLCH z trzema miejscami po przecinku na L i C oraz jednym miejscem po przecinku na H — `oklch(0.629 0.193 263.4)` dla blue-500. Dopasowanie tej precyzji w twoich własnych tokenach oznacza, że przepływy wklej-do-konfiguracji produkują identyczne wartości do tych, które Tailwind dostarcza, a narzędzia diff nie zgłoszą fałszywych różnic. Domyślne zaokrąglanie narzędzia podąża za tą konwencją; kopiuj-wklej do bloku `@theme` jest dokładny bitowo.
Przepuszczaj szerokogamutowy OKLCH przez sprawdzenie gamutu Display P3
Jeśli celujesz w nowoczesny sprzęt Apple (iPhone, iPad, MacBook od 2017+) albo wysyłasz treść świadomą HDR, plakietki gamutu pozwalają przepchnąć C powyżej sufitu sRGB, aby zająć dodatkowe nasycenie P3. Stosowana przez przeglądarkę kompresja chromy chroni kolor przed przycięciem na ekranach tylko-sRGB. Nie dopasowuj domyślnie zawczasu do sRGB, jeśli nie wiesz, że cała twoja publiczność jest na starszych wyświetlaczach — to traci 30%+ nasycenia, które sprzęt P3 potrafi zrenderować.
Dostarcz fallback HEX przez @supports dla przeglądarek sprzed 2023
Choć wsparcie aktualnych przeglądarek dla `oklch()` to teraz ponad 94%, długi ogon (IE 11, stary Android Chrome, osadzone webviews) nadal potrzebuje fallbacku. Opakuj tokeny w `@supports (color: oklch(0 0 0))` i dostarcz wariant HEX w alternatywnej gałęzi. Wyjście Dopasuj do sRGB to dokładnie ten fallback — generowany automatycznie z bieżącej trójki OKLCH z zachowanymi L i H. Wtyczki PostCSS build-time, takie jak `postcss-oklab-function`, potrafią też wstawić przybliżenie sRGB w czasie kompilacji.
Dokumentuj zarówno OKLCH, jak i źródłowy HEX w swoich tokenach
Gdy wysyłasz zmienną CSS typu `--color-primary: oklch(0.629 0.193 263.4)`, dołącz komentarz ze źródłowym HEX-em: `/* source: #3b82f6 (Tailwind blue-500) */`. Sześć miesięcy później, gdy ktoś będzie potrzebował wyprowadzić powiązany ciemniejszy odcień albo sprawdzić wartość względem PDF-a z księgi znaku marki, źródłowy HEX zachowuje pełny ślad pochodzenia. Sam OKLCH ma znaczenie, ale jest trudniejszy do rozpoznania na pierwszy rzut oka; źródłowy HEX to identyfikator, którego większość koleżanek i kolegów z zespołu szuka najpierw.
Używaj hasha URL do udostępniania decyzji o kolorze na żywo
Każda zmiana koloru aktualizuje hash adresu URL jako `#hex=3b82f6` albo `#oklch=...` 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ą OKLCH. To bardziej niezawodne niż wklejanie ciągu OKLCH na czacie — odbiorcy czasem robią literówki w miejscach po przecinku albo zawijają w niewłaściwej precyzji — i pozwala wątkowi design review odnieść się do dokładnego koloru zamiast do „niebieskiego marki, o którym rozmawialiśmy we wtorek”. Hash nigdy nie jest przesyłany na serwer.

Najczęściej zadawane pytania

Czym jest kolor OKLCH?
OKLCH to biegunowa forma OKLAB — percepcyjnie jednorodnej przestrzeni barw opublikowanej przez Björna Ottossona w 2020 roku. Kanały to jasność percepcyjna (0–1, zapisywana też jako 0–100%), chroma (0 do około 0,4 w zależności od barwy i L, bez górnej granicy) i barwa (0–360°, koncepcyjnie identyczna z barwą w HSL). Wywodzi się z CIE-LAB przez przejście przez etap odpowiedzi czopków LMS z krokiem pierwiastkowania sześciennego. CSS Color 4 dodał składnię `oklch()` w 2022. Tailwind v4 ustandaryzował OKLCH dla swojej domyślnej palety w 2025. Przykład: `oklch(0.629 0.193 263.4)` to Tailwind blue-500.
Czy OKLCH jest lepszy od HSL?
Dla systemów designu — tak. L w HSL (lightness) jest geometryczne — wyprowadzane przez uśrednianie maksymalnej i minimalnej wartości RGB — i dziedziczy krzywą gamma sRGB, więc `hsl(60 100% 50%)` (żółty) wygląda widocznie jaśniej niż `hsl(240 100% 50%)` (niebieski), mimo że oba raportują L=50%. L w OKLCH jest percepcyjne, zakotwiczone w modelu OKLAB Ottossona z 2020. Praktyczny skutek: rampa OKLCH przy jednolitym L wygląda na wizualnie równą między wszystkimi barwami; rampa HSL wymaga ręcznie dostrajanych poprawek per barwa, aby wyglądała równo. Dlatego Tailwind v4 przeniósł generowanie swojej domyślnej palety z bazy HSL na bazę OKLCH.
Które przeglądarki obsługują oklch()?
Wszystkie aktualnie aktualizowane przeglądarki od połowy 2023: Chrome i Edge 111 (marzec 2023), Safari 15.4 (marzec 2022, najwcześniejsze wejście), Firefox 113 (maj 2023). Łączne pokrycie wg caniuse to ponad 94%. Dla długiego ogona — IE 11, stare Safari, Android Chrome na starszym sprzęcie — opakuj tokeny w `@supports (color: oklch(0 0 0))` i dostarcz fallback HEX lub `hsl()` w alternatywnej gałęzi. Narzędzia build-time, takie jak PostCSS `postcss-oklab-function`, potrafią też wstawić przybliżenie sRGB obok wartości OKLCH w czasie kompilacji.
Dlaczego używać OKLCH w Tailwind v4?
Tailwind v4 (wydany w styczniu 2025) przeniósł generowanie swojej domyślnej palety z bazy HSL na bazę OKLCH konkretnie dlatego, że OKLCH daje percepcyjnie równe rampy automatycznie. W systemie HSL z v3 `red-500` i `blue-500` miały widocznie różne postrzegane wagi mimo identycznego L% w HSL, co zmuszało projektantów do ręcznego dostrajania pojedynczych przystanków; w v4 oba wyglądają zrównoważenie, ponieważ siedzą przy tym samym L w OKLCH. OKLCH odblokowuje też szerokogamutowe kolory Display P3, których żaden kod HEX zakodować nie potrafi — token Tailwind v4 typu `oklch(0.65 0.25 30)` potrafi adresować czerwienie z P3 przekraczające sRGB. Build wciąż emituje fallbacki HEX dla starszych przeglądarek.
Czy OKLCH jest percepcyjnie jednorodny?
Tak — to cały sens tej przestrzeni. OKLCH dziedziczy jednorodność percepcyjną po OKLAB, przestrzeni barw Björna Ottossona z 2020 zaprojektowanej specjalnie, aby naprawić niejednorodności w CIE-LAB (wcześniej najlepszej percepcyjnie jednorodnej przestrzeni). Ustalony krok w kanale L odpowiada ustalonemu krokowi w postrzeganej jasności. Ustalony krok w C odpowiada ustalonemu krokowi w postrzeganym chromacie. Przybliżenia CIELAB załamują się przy bardzo nasyconych kolorach; OKLAB i jego biegunowa forma OKLCH pozostają dokładne w całym gamucie, dlatego każde nowoczesne narzędzie systemu designu (Tailwind v4, shadcn/ui, Radix Colors v3) ustandaryzowało się na tej przestrzeni.
Jak czytać wartość OKLCH?
`oklch(L C H)` — trzy liczby, opcjonalnie z `/ A` dla kanału alfa. L to jasność percepcyjna od 0 (czerń) do 1 (biel); forma liczbowa i procentowa są równoważne (`0.6` i `60%`). C to chroma od 0 (szary) do około 0,4 dla najbardziej nasyconych barw sRGB; nie ma górnej granicy, kolory z szerokiego gamutu mogą ją przekraczać. H to barwa w stopniach z zakresu 0–360, tak samo jak w HSL (0/360 = czerwony, 120 = zielony, 240 = niebieski). Przykład: `oklch(0.629 0.193 263.4)` to Tailwind blue-500 — jasny, bardzo chromatyczny, w łuku niebieskim.
Jaka jest różnica między OKLCH a LCH?
Oba to biegunowe formy (Lightness / Chroma / Hue) przestrzeni z rodziny CIE-LAB. LCH to biegunowa forma CIE-LAB, percepcyjnie jednorodnej przestrzeni z 1976. OKLCH to biegunowa forma OKLAB, aktualizacji Ottossona z 2020. Różnica: jednorodność percepcyjna CIE-LAB załamuje się wokół silnie nasyconych niebieskich i fioletowych (udokumentowana słabość modelu), więc rampa LCH przez nasycone kolory wygląda subtelnie nierówno. OKLAB naprawia to, ponownie wyprowadzając macierze z poprawionego etapu odpowiedzi czopków LMS. Oba znajdują się w CSS Color 4 (składnia `lch()` i `oklch()`); dla nowej pracy nad systemami designu w 2025 preferuj OKLCH.
Jak skonwertować HEX na OKLCH?
Potok jest następujący: sparsuj HEX `#RRGGBB` na całkowitoliczbowe kanały sRGB przez `parseInt(hex, 16)`, znormalizuj do 0–1, dekoduj gammą do linear-sRGB przez fragmentaryczną funkcję z CSS Color 4 §11.2, pomnóż przez macierz §15.1, aby uzyskać CIE XYZ D65, pomnóż przez macierz LMS Ottossona i wykonaj pierwiastek sześcienny każdego kanału, pomnóż przez macierz OKLAB Ottossona, aby uzyskać L/a/b, potem przekształć kartezjańsko-biegunowo: `C = sqrt(a² + b²); H = atan2(b, a) * 180 / π`. Pełny potok działa w mikrosekundach. To narzędzie uruchamia go na żywo w trakcie pisania — `#3b82f6` ląduje jako `oklch(0.629 0.193 263.4)` natychmiast.

Powiązane narzędzia

Zobacz wszystkie narzędzia →