Skip to content

Konverter HEX ke OKLCH

Konversi HEX ke OKLCH untuk token desain Tailwind v4. Output seragam-perseptual langsung dengan peringatan gamut Display P3. Gratis, hanya di peramban.

Tanpa Pelacakan Berjalan di Browser Gratis
Semua konversi warna terjadi secara lokal di peramban Anda. Tidak ada data yang dikirim ke server mana pun.
Gamut: sRGB Display P3 Rec2020
Kontras vs:
AA AA-Lg AAA AAA-Lg · APCA Lc
Simulasi buta warna (8 tipe)
Protanopia (buta-merah)
Deuteranopia (buta-hijau)
Tritanopia (buta-biru)
Achromatopsia (total)
Protanomaly (lemah-merah)
Deuteranomaly (lemah-hijau)
Tritanomaly (lemah-biru)
Achromatomaly (parsial)
Tints / Shades / Tones / Harmonies

Tints

Shades

Tones

Harmonies

Salin sebagai kode
Referensi warna umum
Diperiksa untuk kesesuaian CSS Color 4 §11.2 + §15.1, kebenaran matriks OKLAB Ottosson 2020, paritas palet Tailwind v4, akurasi deteksi gamut Display P3 / Rec.2020, dan stabilitas round-trip antara HEX dan OKLCH di seluruh rentang Lightness 0-1, Chroma 0-0,4, dan Hue 0-360°. — Go Tools Engineering Team · May 27, 2026

Apa Itu Konverter HEX ke OKLCH?

Konverter hex ke OKLCH adalah utilitas kecil yang mengubah kode warna hex (`#3b82f6`) menjadi triple Lightness / Chroma / Hue yang seragam-perseptual yang mengkodekan warna yang sama di ruang OKLCH (`oklch(0.629 0.193 263.4)`). Kode hex adalah string basis-16 yang ringkas yang ditempel oleh desainer dan developer antara Figma, Sketch, Photoshop, PDF panduan brand, dan stylesheet CSS — tiga kanal 8-bit dikemas menjadi bentuk `#RRGGBB` 6 karakter, berlabuh ke ruang warna sRGB yang didefinisikan oleh IEC 61966-2-1 pada 1996. OKLCH adalah bentuk polar dari OKLAB, ruang warna yang seragam-perseptual karya Björn Ottosson tahun 2020, ditambahkan ke CSS melalui sintaks `oklch()` di CSS Color 4 (W3C Candidate Recommendation sejak 2022). Kanal-kanalnya adalah Lightness (0-1, juga dapat ditulis sebagai 0-100%), Chroma (0 hingga sekitar 0,4 untuk warna sRGB paling jenuh, tidak terbatas di atas untuk warna gamut luas), dan Hue (0-360°, sumbu sudut yang sama yang digunakan HSL). Dukungan peramban mendarat di seluruh evergreen antara Maret 2022 (Safari 15.4) dan Mei 2023 (Firefox 113), dengan Chrome 111 di tengah (Maret 2023) — cakupan caniuse gabungan lebih dari 94%. Contoh: Tailwind blue-500 adalah `oklch(0.629 0.193 263.4)`.

**Keseragaman perseptual — mengapa itu penting.** Di OKLCH (dan sepupu persegi panjangnya OKLAB), jarak numerik yang sama di kanal L sesuai dengan jarak perseptual yang sama dalam kecerahan — di setiap rona, setiap level chroma, setiap wilayah ruang warna. Di HSL, nilai L yang sama tampak terang secara tidak merata di seluruh rona karena HSL mewarisi kekhasan gamma sRGB: hijau pada `hsl(120 100% 50%)` tampak lebih terang secara terlihat daripada biru pada `hsl(240 100% 50%)`, meskipun keduanya melaporkan L=50%. Penyebab strukturalnya adalah HSL menurunkan L secara geometris (rata-rata max dan min kanal dalam sRGB yang dikodekan-gamma), sementara OKLCH menurunkan L dari model yang berlabuh-secara-perseptual yang melinearisasi terlebih dahulu dan merutekan melalui tahap respons-kerucut LMS. Implikasi praktisnya: menahan L konstan di seluruh rona di OKLCH menghasilkan kecerahan yang setara secara visual — hijau pada `oklch(0.7 0.2 130)` dan biru pada `oklch(0.7 0.2 250)` tampak sama terang di layar. Inilah mengapa Tailwind v4 memigrasikan palet defaultnya ke ramp berbasis-OKLCH pada 2025 — setiap langkah shade (50, 100, 200, …, 900, 950) mencapai selisih lightness yang dipersepsikan sama, sehingga warna brand terasa konsisten di seluruh rona tanpa penyetelan tangan per-warna.

**Tailwind v4 dan revolusi token desain.** Tailwind v4 (dirilis Januari 2025) mengganti generasi warna berbasis-HSL-nya dengan sistem berbasis-OKLCH. shadcn/ui mengikuti tak lama setelahnya, mengadopsi OKLCH untuk tema variabel-CSS-nya; Radix Colors v3 juga mengadopsinya. Mengapa sekarang: sistem desain memerlukan shade yang tampak merata-jarak di seluruh palet, dan mereka memerlukan properti itu untuk berlaku secara otomatis seiring palet tumbuh. Dengan HSL, desainer harus secara manual mengoreksi setiap langkah warna — meningkatkan L sebesar 5% ekstra di ujung gelap ramp biru untuk mencocokkan ujung gelap ramp hijau, lalu meningkatkan kembali ketika brand berkembang. Dengan OKLCH, satu rumus (step L sebesar 0,1, tahan C dan H konstan) menghasilkan ramp yang konsisten secara otomatis. Contoh nyata: di Tailwind v3, `red-500` dan `blue-500` memiliki bobot perseptual yang terlihat berbeda meskipun L% HSL identik; di v4, `red-500` dan `blue-500` tampak seimbang karena keduanya duduk pada L OKLCH yang sama. Ini penting untuk aksesibilitas (kontras konsisten terhadap latar belakang yang dibagi berarti state komponen terasa seragam di seluruh palet), konsistensi brand (hierarki visual berlaku di seluruh palet — tombol `primary` dan tombol `accent` pada L yang sama terasa seperti tingkat hierarki yang sama), dan ergonomi developer (satu model mental alih-alih lusinan pengecualian yang disetel-tangan yang terkubur di spek token desain).

**Implikasi gamut luas.** OKLCH tidak terbatas — ia dapat merepresentasikan warna di luar sRGB, termasuk semua yang dapat direproduksi Display P3 dan Rec.2020. Ini menjadikannya pilihan alami untuk layar gamut luas modern. Kebanyakan perangkat Apple sejak 2017 (iPhone 7 dan seterusnya, MacBook Pro 2016 dan seterusnya, setiap iPad Pro) merender Display P3 secara native, dan banyak perangkat Android modern dan layar laptop juga. Trade-off-nya: tidak setiap triple OKLCH memetakan ke warna sRGB yang valid. Alat ini menunjukkan tiga lencana gamut — sRGB, Display P3, Rec.2020 — sehingga Anda dapat segera melihat apakah OKLCH saat ini akan ditampilkan dengan benar pada target tertentu. Ketika warnanya hanya-sRGB, tombol **Snap ke sRGB** menggunakan reduksi-chroma biner (per algoritma pemetaan-gamut informatif CSS Color 4 §13) untuk mengecilkan warna ke dalam gamut sambil mempertahankan L dan H — memberi Anda fallback hex yang dapat Anda kirim melalui `@supports not (color: oklch(0 0 0))` di samping nilai OKLCH asli untuk klien gamut-lebih-luas.

**Matematika konversi HEX → OKLCH.** Pipeline-nya terdefinisi dengan baik dan berdasarkan dua sumber utama: W3C CSS Color 4 untuk tahap sRGB dan XYZ, Ottosson 2020 untuk tahap OKLAB. Langkah pertama: urai `#RRGGBB` menjadi tiga integer kanal sRGB 8-bit melalui `parseInt(hex.slice(1, 3), 16)` per kanal. Langkah kedua: normalkan setiap kanal ke 0-1 dengan membagi dengan 255. Langkah ketiga: dekode-gamma ke linear-sRGB melalui fungsi piecewise CSS Color 4 §11.2 (`v <= 0.04045 ? v/12.92 : ((v+0.055)/1.055)^2.4`). Langkah keempat: kalikan dengan matriks 3×3 §15.1 untuk mendapatkan koordinat CIE XYZ D65. Langkah kelima: kalikan dengan matriks LMS Ottosson (dari implementasi referensi 2020-nya) dan ambil akar kubik dari setiap kanal. Langkah keenam: kalikan dengan matriks OKLAB Ottosson untuk mendapatkan L / a / b. Langkah ketujuh: Cartesian-ke-polar — `C = sqrt(a² + b²); H = atan2(b, a) * 180 / π`, bungkus H ke 0-360°. Pipeline penuh berjalan dalam mikrodetik — setiap penekanan tombol me-render ulang output OKLCH secara instan tanpa debounce.

Alur kerja HEX → OKLCH alat ini adalah satu arah dari keluarga 5-spoke yang semuanya berbagi konverter warna terpadu yang mendasarinya. Konverter warna terpadu khusus adalah hub-nya — ia menunjukkan semua 9 format yang dapat diedit secara bersamaan dan merupakan alat yang tepat ketika alur kerja Anda membutuhkan lebih dari sekadar hex dan OKLCH. Spoke arah-tunggal menargetkan intent pencarian Google tertentu: konverter hex ke RGB untuk arah canvas-dan-perangkat-keras, konverter RGB ke hex untuk inversnya, konverter hex ke HSL untuk ruang silindris-desainer warisan yang masih digunakan di banyak codebase Tailwind v3, dan konverter hex ke CMYK untuk aproksimasi persiapan cetak. Kelima spoke dan hub berbagi source-of-truth OKLCH yang sama secara internal dan matriks Ottosson 2020 yang sama, sehingga hasilnya dijamin identik di seluruh keluarga. Setiap konversi berjalan secara lokal di peramban Anda — kode hex Anda tidak pernah diunggah, tidak pernah dicatat, dan nol permintaan jaringan dilepaskan saat Anda mengetik. Verifikasi di DevTools. Untuk pembahasan lebih dalam tentang mengapa OKLCH menjadi standar sistem desain pada 2024–2026, baca panduan pendamping kami: Ruang warna OKLCH dijelaskan — mengapa Tailwind v4 mengadopsinya.

// 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)

Fitur Utama

Output Seragam-Perseptual di Seluruh Rona

Kanal L OKLCH berlabuh ke model perseptual OKLAB (Ottosson 2020), sehingga setiap langkah L tampak seperti perubahan kecerahan yang sama di seluruh rona — hijau pada `oklch(0.7 0.2 130)` dan biru pada `oklch(0.7 0.2 250)` terbaca sama terang di layar. Ini adalah properti struktural yang memungkinkan Tailwind v4 menghasilkan ramp yang merata secara visual secara otomatis tanpa penyetelan tangan per-warna, properti yang sama yang tidak dapat dijamin ramp HSL yang setara karena HSL mewarisi kekhasan gamma sRGB.

Siap Tailwind v4 — Jatuhkan ke Blok @theme

Output OKLCH menggunakan bentuk dipisah-spasi CSS Color 4 (`oklch(0.629 0.193 263.4)`) — sintaks yang persis diharapkan Tailwind v4 di dalam blok `@theme` sebagai `--color-primary: oklch(0.629 0.193 263.4);`. Presisi L cocok dengan presisi palet yang diterbitkan Tailwind (tiga desimal pada L dan C, satu derajat desimal pada H), sehingga alur kerja tempel-ke-konfig menghasilkan token identik dengan yang dikirim Tailwind secara default. Padukan dengan snippet Tailwind v4 di bagian Salin sebagai kode untuk baris token penuh.

Lencana Gamut Display P3 + Rec.2020

Tiga lencana langsung (sRGB, Display P3, Rec.2020) menandai apakah triple OKLCH saat ini berada di dalam rentang yang dapat direproduksi setiap ruang. Berguna karena OKLCH tidak terbatas — banyak warna ber-chroma tinggi melampaui sRGB tetapi muat di P3, yang dapat dirender secara native sebagian besar perangkat Apple sejak 2017. Lencana berubah merah pada di luar gamut sehingga Anda dapat memutuskan apakah akan mempertahankan nilai gamut-lebih-luas untuk layar modern atau snap ke sRGB untuk kompatibilitas universal. Pemeriksaan rentang-kanal berjalan pada setiap penekanan tombol.

Snap ke sRGB untuk Kompatibilitas Warisan

Tombol Snap ke sRGB menjalankan reduksi-chroma biner (algoritma informatif CSS Color 4 §13): tahan L dan H tetap, cari C ke bawah hingga konversi sRGB yang dihasilkan tetap dalam-gamut. Pencarian berakhir dalam ~30 iterasi pada presisi sub-piksel. Mempertahankan L dan H berarti warna yang di-snap terbaca sebagai keluarga rona yang sama pada kecerahan yang sama — ia hanya kehilangan saturasi, yang merupakan kompromi yang paling tidak mengganggu secara visual. Hex yang di-snap berpasangan dengan OKLCH asli melalui `@supports not (color: oklch(0 0 0))` untuk fallback berlapis.

Konversi Instan Per-Penekanan-Tombol

Tidak ada tombol Konversi. Ketik satu karakter ke bidang HEX dan bidang OKLCH diperbarui dalam frame animasi yang sama. Representasi kanonik internal adalah triple OKLCH itu sendiri, sehingga mengedit OKLCH secara langsung sama cepatnya — kursor tetap di tempat Anda meletakkannya, hanya bidang format lainnya yang di-render ulang. Matematika konversi (sRGB → linear → XYZ → LMS → OKLAB → polar) berjalan dalam mikrodetik; tanpa debounce, tanpa latensi, tanpa reflow yang terlihat.

Contoh Berjalan via Pipeline W3C + Ottosson 2020

Bagian contoh-kode mengirim implementasi JavaScript yang berfungsi dari pipeline HEX → OKLCH penuh menggunakan matriks yang persis dan fungsi gamma yang diterbitkan di W3C CSS Color 4 (§11.2 gamma piecewise, §15.1 matriks linear-sRGB → XYZ D65) dan implementasi referensi OKLAB 2020 Björn Ottosson. Tempel ke Node REPL dan verifikasi `#3b82f6` menghasilkan `oklch(0.629 0.193 263.4)`. Setiap nilai matriks disalin-tempel dari sumber utamanya — tanpa derivasi ulang atau pembulatan.

Dua Arah Dengan HSL / RGB / HEX di Hub Terpadu

Meskipun spoke ini menargetkan HEX → OKLCH secara spesifik, halaman yang sama memunculkan delapan bidang format lainnya juga — RGB untuk perangkat keras, HSL untuk CSS warisan, OKLAB untuk matematika palet, HSV/HWB untuk UI pemilih, CMYK untuk cetak, dan nama warna CSS terdekat. Source-of-truth OKLCH internal berarti setiap bidang bit-stabil di seluruh round-trip: HEX → OKLCH → HSL → HEX memulihkan hex asli. Klik ke bidang mana pun untuk mengeditnya secara langsung dan saksikan yang lain diperbarui.

Ringkasan Dukungan Peramban Inline

Alat memunculkan titik-titik data dukungan-peramban kanonik di mana relevan: Chrome dan Edge 111 (Maret 2023), Safari 15.4 (Maret 2022 — yang paling awal), Firefox 113 (Mei 2023), cakupan caniuse gabungan lebih dari 94%. Untuk klien lama, bungkus token di `@supports (color: oklch(0 0 0))` dan sediakan fallback hex di cabang alternatif. Output Snap ke sRGB persis fallback itu, dihasilkan secara otomatis dari triple OKLCH saat ini — tanpa penyetelan-chroma manual yang diperlukan.

100% Di-Peramban — Tanpa Unggah, Tanpa Pelacakan

Semua parsing hex, konversi OKLCH, deteksi gamut, penilaian kontras, dan generasi palet berjalan secara lokal di peramban Anda. Kode hex Anda tidak pernah ditransmisikan, tidak pernah dicatat di server mana pun, tidak pernah dianalisis. Nol permintaan jaringan saat Anda mengetik — verifikasi di DevTools. Aman untuk palet brand yang belum diumumkan, token desain internal untuk produk yang belum dirilis, mockup draf di bawah NDA, dan pekerjaan warna rahasia lainnya di mana nilainya tidak boleh bocor.

Alternatif Konverter HEX ke OKLCH

OKLCH.com

alat peramban

Alat fokus-OKLCH yang dibangun dengan indah oleh Andrey Sitnik (penulis polyfill postcss-oklab-function dan Autoprefixer). Kelas terbaik untuk eksplorasi OKLCH murni dengan pemilih sadar-gamut-luas, visualisasi sadar-P3, dan generasi palet. Tidak mencakup konversi HEX/RGB/HSL/CMYK sebagai output utama — fokus pada OKLCH saja. Jangkau OKLCH.com ketika Anda melakukan pekerjaan desain OKLCH mendalam; jangkau alat ini ketika Anda juga membutuhkan konversi lintas-ruang dan fitur gamut/kontras/CVD.

Palet Dokumentasi Tailwind v4

referensi dokumentasi

Dokumen Tailwind v4 menerbitkan palet default penuh di OKLCH di samping ekuivalen hex. Terbaik untuk mencari shade Tailwind yang persis (`blue-500` → `oklch(0.629 0.193 263.4)`) atau mencocokkan warna kustom ke bobot visual shade Tailwind. Tidak interaktif — tidak ada konversi kode hex sembarang. Alat ini mencakup presisi OKLCH yang sama dan bekerja untuk hex apa pun, bukan hanya 200+ default Tailwind.

ColorJS.io Playground

alat peramban

ColorJS.io adalah pustaka warna CSS otoritatif dari Lea Verou dan Chris Lilley; playground mengekspos graf konversi penuh (HEX, RGB, HSL, HWB, LCH, OKLCH, OKLAB, P3, Rec2020, ProPhoto, A98). Matematika sangat benar, ideal untuk pekerjaan warna level-spek. UI berfokus pada developer (tidak berfokus pada desainer) dan kekurangan fitur kontras / CVD / palet. Padukan dengan alat ini: gunakan ColorJS.io untuk matematika yang tidak dapat Anda verifikasi sebaliknya, gunakan alat ini untuk alur kerja aktif.

Generator Tema shadcn/ui

alat peramban

Generator tema shadcn dari Vercel menghasilkan tema variabel-CSS OKLCH siap-tempel untuk proyek shadcn/ui. Terbaik untuk generasi tema end-to-end ketika deliverable adalah file konfig shadcn. Tidak memunculkan nilai OKLCH perantara untuk kode hex sembarang — fokus pada alur kerja tema penuh. Gunakan generator shadcn ketika Anda membangun tema shadcn; gunakan alat ini ketika Anda membutuhkan OKLCH dari warna individual mana pun.

ColorHexa

alat peramban

Halaman SEO per-warna yang berjalan lama dengan metadata mendalam. Baru-baru ini menambahkan dukungan OKLCH di samping HEX/RGB/HSL/CMYK. UI sudah ketinggalan zaman (awal 2010-an), tanpa deteksi gamut luas, tanpa kontras APCA. Kuat untuk penemuan SEO hex tertentu melalui Google; lebih lemah untuk alur kerja konversi aktif di mana UX bidang-bersatu dan fitur gamut/kontras penting. Alat ini menang di setiap sumbu alur-kerja-aktif.

Pemilih Warna DevTools Peramban

fitur peramban bawaan

DevTools Chrome, Firefox, dan Safari semuanya mengirim pemilih warna yang beralih antara HEX, RGB, HSL, HWB, dan OKLCH secara inline ketika Anda mengklik sampel warna di panel CSS. Gratis, tanpa instal, selalu tersedia. Kekurangan lencana gamut, penilaian kontras, simulasi buta warna, dan ekspor kode untuk platform non-web (SwiftUI, Compose). Jangkau DevTools ketika Anda sudah men-debug CSS; jangkau alat ini ketika Anda membutuhkan output lintas-platform atau pemeriksaan yang lebih mendalam.

Culori CLI

pustaka baris-perintah

Culori adalah pustaka warna JavaScript sadar-OKLCH yang paling menyeluruh; CLI-nya menangani konversi HEX → OKLCH sebagai one-liner (`culori convert '#3b82f6' --to oklch`). Sangat baik untuk skrip CI dan migrasi token batch. Tidak ada pemilih visual atau lencana gamut. Gunakan Culori CLI untuk otomatisasi; gunakan alat ini untuk pekerjaan warna-tunggal interaktif dan umpan balik visual langsung.

Contoh HEX ke OKLCH

Migrasi palet HSL Tailwind 3 → token OKLCH v4

#3b82f6

Output OKLCH: `oklch(0.629 0.193 263.4)`. Alur kerja migrasi Tailwind v4 kanonik: definisikan warna brand sekali di blok `@theme` Anda sebagai `--color-primary: oklch(0.629 0.193 263.4)`, lalu komposisikan tint dengan menstep L naik (`oklch(0.7 0.193 263.4)`, `oklch(0.8 0.15 263.4)`) dan shade dengan menstep L turun (`oklch(0.5 0.193 263.4)`, `oklch(0.4 0.18 263.4)`). Hue tetap terkunci di 263,4°, chroma berlabuh di dekat 0,19, lightness adalah satu-satunya sumbu yang menyapu — ramp satu-dimensi yang terbaca merata secara visual di seluruh skala, yang tidak dapat dijamin ramp HSL yang setara.

Migrasi token desain dengan shade yang seragam secara perseptual

#FF5733

Output OKLCH: kira-kira `oklch(0.66 0.18 28)`. Untuk membangun ramp 5-langkah shade dari oranye brand ini, tahan C = 0,18 dan H = 28 konstan dan step L melalui 0,3, 0,45, 0,6, 0,75, 0,9 — menghasilkan `oklch(0.3 0.18 28)` hingga `oklch(0.9 0.18 28)`. Setiap pasangan yang berdekatan terasa seperti lompatan visual yang sama dalam kecerahan, karena L OKLCH berlabuh ke model perseptual OKLAB (Ottosson 2020) alih-alih L geometris yang terbelit-gamma seperti HSL. Chroma dapat diam-diam terpotong ke sRGB di ekstrem; lencana gamut alat ini menandai dengan persis langkah mana yang memerlukan perhatian.

OKLCH gamut luas → fallback sRGB untuk situs Tailwind v3

#FF1744

Output OKLCH: kira-kira `oklch(0.62 0.27 26)`. Merah ber-chroma tinggi seperti ini melampaui kubus sRGB — lencana gamut **sRGB** menyala merah, lencana **Display P3** mengonfirmasi ia muat di P3, dan Rec.2020 mencakupnya juga. Pada monitor 24-bit standar warna ini di-render sebagai aproksimasi yang lebih pudar; pada layar Display P3 (kebanyakan perangkat Apple sejak 2017) warna ini di-render dengan saturasi penuh. Klik **Snap ke sRGB** untuk menjalankan algoritma reduksi-chroma biner (CSS Color 4 §13 informatif) — L dan H tetap terkunci sementara C mengecil hingga warnanya pas, menghasilkan fallback hex yang cocok untuk codebase Tailwind v3 yang masih menggunakan token hex 8-bit.

Migrasi tema shadcn/ui

#0f172a

Output OKLCH: kira-kira `oklch(0.21 0.04 264.7)`. shadcn/ui memigrasikan tema variabel-CSS-nya ke OKLCH tak lama setelah Tailwind v4 mendarat, dan `#0f172a` (Tailwind slate-900) adalah latar belakang dark-mode kanonik. Alat ini mereproduksi nilai OKLCH yang diterbitkan shadcn untuk hex yang sama, sehingga Anda dapat memverifikasi port tema komunitas cocok dengan definisi hulu. Padukan dengan baris kontras untuk memastikan foreground dark-mode (putih atau hampir-putih) masih lulus WCAG AA terhadap latar belakang ini — `oklch(0.21 ...)` terhadap `oklch(1 0 0)` melaporkan rasio nyaman 16:1.

Bangun pasangan gelap/terang Tailwind v4 dari hex brand

#3b82f6

Output OKLCH: `oklch(0.629 0.193 263.4)`. Untuk menurunkan pasangan gelap/terang yang cocok untuk sebuah tema, putar hanya kanal L sambil menahan C dan H konstan: primary mode-terang menjadi `oklch(0.7 0.15 263)` (sedikit lebih cerah, sedikit kurang kromatik untuk menghindari ketegangan mata pada latar belakang putih), primary mode-gelap menjadi `oklch(0.5 0.18 263)` (sedikit lebih gelap, sedikit lebih kromatik untuk mempertahankan kemenonjolan pada latar belakang gelap). Kedua varian terbaca sebagai identitas brand yang sama karena hue terkunci; pergeseran L perseptual menyeimbangkan keterbacaan di kedua mode tanpa penyetelan per-kanal RGB manual.

Konversi HEX → OKLCH yang Umum (Tailwind v4)

Tabel referensi dari 10 mid-shade palet default Tailwind v4 populer dengan ekuivalen HEX dan OKLCH-nya. Nilai cocok dengan presisi palet yang diterbitkan Tailwind v4 (tiga desimal pada L dan C, bilangan bulat atau satu desimal pada H).

Tailwind slate-500

#64748b oklch(0.55 0.04 257)

slate-500 default Tailwind CSS — abu-abu sejuk netral yang digunakan untuk teks badan, permukaan sekunder, dan elemen UI yang di-de-emphasized. Chroma rendah (0,04) menjaga warna tetap netral secara visual.

#64748b oklch(0.55 0.04 257)

slate adalah ramp netral kanonik untuk tema ramah-dark-mode — setiap shade slate duduk pada chroma yang sangat rendah sehingga mereka terbaca sebagai abu-abu daripada bernuansa-biru.

Butuh pemilih warna penuh dengan RGB, HSL, CMYK, peringatan gamut, dan ekspor kode? Coba konverter warna terpadu — setiap format dapat diedit secara bersamaan.

Tailwind gray-500

#6b7280 oklch(0.55 0.03 258)

gray-500 default Tailwind CSS — pasangan netral-sejati untuk slate. Chroma sedikit lebih rendah dari slate (0,03 vs 0,04) untuk tampilan yang lebih akromatik.

#6b7280 oklch(0.55 0.03 258)

gray dan slate duduk pada L yang hampir identik (0,55) — kecerahan perseptual cocok, hanya selisih chroma kecil yang membedakan mereka.

Butuh pemilih warna penuh dengan RGB, HSL, CMYK, peringatan gamut, dan ekspor kode? Coba konverter warna terpadu — setiap format dapat diedit secara bersamaan.

Tailwind red-500

#ef4444 oklch(0.64 0.21 25)

red-500 default Tailwind CSS — merah aksi-destruktif / error kanonik. Chroma tinggi (0,21) menjaganya tetap menonjol terhadap latar belakang netral.

#ef4444 oklch(0.64 0.21 25)

red-500 duduk pada L=0,64, cocok dengan L blue-500=0,63 — ramp v4 seimbang secara perseptual di seluruh rona, tidak seperti palet berbasis-HSL v3.

Butuh pemilih warna penuh dengan RGB, HSL, CMYK, peringatan gamut, dan ekspor kode? Coba konverter warna terpadu — setiap format dapat diedit secara bersamaan.

Tailwind orange-500

#f97316 oklch(0.71 0.19 42)

orange-500 default Tailwind CSS — rona aksen-hangat dan CTA. Duduk di antara merah dan amber pada lingkaran rona (42°).

#f97316 oklch(0.71 0.19 42)

L lebih tinggi orange-500 (0,71) vs L red-500 (0,64) disengaja — kuning dan oranye tampak cerah pada L perseptual yang lebih rendah daripada merah.

Butuh pemilih warna penuh dengan RGB, HSL, CMYK, peringatan gamut, dan ekspor kode? Coba konverter warna terpadu — setiap format dapat diedit secara bersamaan.

Tailwind amber-500

#f59e0b oklch(0.76 0.16 70)

amber-500 default Tailwind CSS — rona peringatan / kewaspadaan, di antara oranye dan kuning pada roda.

#f59e0b oklch(0.76 0.16 70)

amber-500 mencapai L tertinggi (0,76) dari warna Tailwind level-500 mana pun — kuning secara alami membutuhkan L lebih tinggi untuk tampak secara visual sebagai 'mid-tone'.

Butuh pemilih warna penuh dengan RGB, HSL, CMYK, peringatan gamut, dan ekspor kode? Coba konverter warna terpadu — setiap format dapat diedit secara bersamaan.

Tailwind green-500

#22c55e oklch(0.72 0.19 149)

green-500 default Tailwind CSS — rona sukses / konfirmasi. Duduk pada 149° di roda rona, di wilayah cyan-hijau.

#22c55e oklch(0.72 0.19 149)

green-500 pada L=0,72 sedikit lebih cerah daripada red-500 pada L=0,64 — ini cocok dengan realitas perseptual (hijau tampak cerah) dan memberi palet bobot visual yang seimbang.

Butuh pemilih warna penuh dengan RGB, HSL, CMYK, peringatan gamut, dan ekspor kode? Coba konverter warna terpadu — setiap format dapat diedit secara bersamaan.

Tailwind teal-500

#14b8a6 oklch(0.7 0.13 184)

teal-500 default Tailwind CSS — rona aksen-sejuk di antara hijau dan cyan. Chroma lebih rendah daripada green-500 karena teal ber-chroma tinggi dengan mudah melewati sRGB.

#14b8a6 oklch(0.7 0.13 184)

H=184° teal-500 duduk persis melewati cyan (180°) — cyan murni di OKLCH sulit diekspresikan di sRGB tanpa pemotongan chroma; teal adalah kompromi praktis.

Butuh pemilih warna penuh dengan RGB, HSL, CMYK, peringatan gamut, dan ekspor kode? Coba konverter warna terpadu — setiap format dapat diedit secara bersamaan.

Tailwind blue-500

#3b82f6 oklch(0.63 0.19 263)

blue-500 default Tailwind CSS — 'biru web' kanonik tahun 2020-an, warna brand-anchor untuk palet v4 dan tema default shadcn/ui.

#3b82f6 oklch(0.63 0.19 263)

blue-500 adalah warna referensi yang paling sering digunakan sebagai titik awal migrasi OKLCH Tailwind v4 — tempel #3b82f6 di sini untuk memverifikasi konversi terhadap nilai yang diterbitkan.

Butuh pemilih warna penuh dengan RGB, HSL, CMYK, peringatan gamut, dan ekspor kode? Coba konverter warna terpadu — setiap format dapat diedit secara bersamaan.

Tailwind indigo-500

#6366f1 oklch(0.59 0.21 277)

indigo-500 default Tailwind CSS — pendamping aksen-sejuk untuk biru, duduk pada 277° (menuju ungu). Chroma tinggi (0,21) memberinya kemenonjolan.

#6366f1 oklch(0.59 0.21 277)

indigo-500 duduk pada L lebih rendah daripada blue-500 (0,59 vs 0,63) — rona yang lebih dalam menyerap lebih banyak kecerahan yang tampak, dan ramp v4 memperhitungkannya secara perseptual.

Butuh pemilih warna penuh dengan RGB, HSL, CMYK, peringatan gamut, dan ekspor kode? Coba konverter warna terpadu — setiap format dapat diedit secara bersamaan.

Tailwind violet-500

#8b5cf6 oklch(0.6 0.24 295)

violet-500 default Tailwind CSS — rona aksen-ungu pada 295°. Chroma tertinggi (0,24) dari warna Tailwind level-500 mana pun, sering digunakan untuk branding produk AI / kreatif.

#8b5cf6 oklch(0.6 0.24 295)

C=0,24 yang tinggi violet-500 menempatkannya dekat dengan langit-langit gamut sRGB — dorong jauh lebih tinggi dan ia menyeberang ke wilayah gamut-luas khusus-P3.

Butuh pemilih warna penuh dengan RGB, HSL, CMYK, peringatan gamut, dan ekspor kode? Coba konverter warna terpadu — setiap format dapat diedit secara bersamaan.

Cara Menggunakan Konverter HEX ke OKLCH

  1. 1

    Tempel kode hex ke bidang HEX

    Jatuhkan nilai hex apa pun ke input HEX — dengan atau tanpa `#` di depan, dalam singkatan 3 digit (`#F73`), bentuk lengkap 6 digit (`#3b82f6`), singkatan alpha 4 digit (`#F738`), atau bentuk lengkap alpha 8 digit (`#FF573380`). Parser menormalkan kelima bentuk input ke warna internal yang sama sebelum menurunkan OKLCH. Kapitalisasi tidak penting (`#3b82f6` dan `#3B82F6` diurai secara identik). Karakter tidak valid atau jumlah digit yang salah menghasilkan error inline yang tenang; hex yang valid memperbarui setiap bidang format lainnya secara waktu nyata, termasuk OKLCH.

  2. 2

    Baca triple OKLCH dari bidang OKLCH

    Bidang OKLCH memunculkan nilai dalam bentuk modern CSS Color 4: `oklch(0.629 0.193 263.4)` untuk warna opak, `oklch(0.629 0.193 263.4 / 0.5)` untuk yang membawa alpha. L dibulatkan menjadi tiga desimal (cocok dengan presisi terbit Tailwind v4), C menjadi tiga desimal, H menjadi satu derajat desimal. Source-of-truth OKLCH internal alat berarti presisi float yang mendasarinya dipertahankan di setiap bidang lainnya — round-trip kembali ke hex tetap bit-stabil, tidak seperti konverter warisan pivot-HSL yang melayang satu atau dua derajat per round-trip.

  3. 3

    Klik Salin untuk mengambil string OKLCH

    Setiap kartu format memiliki tombol Salin di sebelah kanan. Satu klik dan nilai mendarat di clipboard Anda — label tombol sebentar berkedip "Disalin!" sehingga Anda tahu. String yang disalin adalah sintaks kanonik CSS Color 4 (`oklch(0.629 0.193 263.4)`), siap dijatuhkan ke blok `@theme` Tailwind v4 atau definisi variabel-CSS shadcn/ui. Untuk output spesifik-platform (properti kustom CSS, token Tailwind v4, SwiftUI, Compose, Flutter), gunakan bagian Salin sebagai kode di bawah pemilih — snippet itu memancarkan format yang diharapkan setiap platform secara native.

  4. 4

    Periksa lencana gamut Display P3 / Rec.2020

    Tiga lencana gamut (sRGB, Display P3, Rec.2020) menunjukkan apakah warna saat ini berada di dalam rentang yang dapat direproduksi setiap ruang. Jika lencana sRGB berubah merah tetapi P3 hijau, warnanya adalah OKLCH gamut-luas yang akan di-render dengan saturasi penuh pada perangkat keras Apple (iPhone, iPad, MacBook dari 2017+) tetapi mengalami penurunan saturasi pada monitor 24-bit warisan. Tombol **Snap ke sRGB** menggunakan reduksi-chroma biner (algoritma informatif CSS Color 4 §13) untuk mengecilkan warna ke dalam sRGB sambil mempertahankan L dan H, menghasilkan fallback hex yang dapat Anda kirim melalui `@supports not (color: oklch(0 0 0))`.

  5. 5

    Juga terlihat: RGB, HSL, OKLAB, HSV, HWB, CMYK, nama warna

    Hex yang sama yang Anda tempel juga menyalakan delapan bidang format lainnya — RGB untuk panggilan canvas dan perangkat keras, HSL untuk variabel CSS warisan, OKLAB untuk matematika palet dan matriks buta warna, HSV dan HWB untuk alur kerja pemilih warna desainer, CMYK untuk estimasi cetak, dan nama warna CSS terdekat untuk prosa dokumentasi. Anda tidak pernah terkunci hanya pada hex → OKLCH. Pemilih (kotak SL + slider rona + slider alpha) menggerakkan kesembilan secara bersamaan, dan pada peramban Chromium tombol EyeDropper mengambil sampel piksel mana pun di layar, termasuk di luar peramban.

Kesalahan HEX / OKLCH yang Umum

Membaca Chroma OKLCH Seperti Saturasi HSL

Chroma OKLCH tidak terbatas (0 hingga ~0,4 untuk warna yang muat di sRGB, lebih tinggi untuk gamut luas) — itu BUKAN persentase saturasi 0-100% seperti S HSL. Mengasumsikan C=0,3 berarti "30% jenuh" salah membaca skalanya: 0,3 sangat kromatik, mendekati langit-langit sRGB untuk beberapa rona dan jauh melampauinya untuk yang lain. C maksimum bervariasi menurut L dan H — hijau pada L=0,7 mendukung C jauh lebih tinggi daripada biru pada L=0,3. Perlakukan C sebagai jarak absolut dari abu-abu, bukan persentase relatif.

✗ Salah
Atur C OKLCH = 0,3 mengharapkan "saturasi 30%":
oklch(0.7 0.3 250) → mungkin melampaui gamut sRGB untuk biru
Warna gamut luas di-render dengan saturasi rendah pada layar warisan.
✓ Benar
Perlakukan C sebagai chroma absolut, periksa lencana gamut:
oklch(0.7 0.15 250) → nyaman di sRGB untuk pasangan L+H ini
Gunakan lencana untuk menemukan C maks yang muat di gamut target.

Memperlakukan L OKLCH Sama dengan L HSL

Kedua ruang melaporkan Lightness sebagai sumbu 0-1 (atau 0-100%), tetapi mereka mengukur hal yang berbeda. L HSL bersifat geometris — diturunkan dari merata-ratakan max/min RGB di sRGB yang dikodekan-gamma. L OKLCH bersifat perseptual — berlabuh ke model OKLAB. Mem-port palet berbasis-HSL sebagai `oklch(L%, C, H)` dan mengharapkan kecerahan yang cocok menghasilkan hasil yang tidak merata karena hubungan L antara kedua ruang adalah non-linear. Untuk warna mid-tone L OKLCH = 0,6 kira-kira L HSL = 50%, tetapi kurvanya melayang di ujung gelap dan terang.

✗ Salah
Salin persentase L HSL ke OKLCH secara langsung:
hsl(220 50% 30%) diport sebagai oklch(0.30 0.10 220)
Kedua warna tampak berbeda secara nyata dalam kecerahan.
✓ Benar
Turunkan kembali OKLCH dari hex asli, jangan port HSL:
hex sumber → konversi OKLCH → oklch(0.34 0.08 254)
L perseptual tetap benar; palet terasa merata.

Lupa OKLCH Gamut-Luas Tidak Akan Ditampilkan di sRGB

OKLCH tidak terbatas — Anda dapat menulis `oklch(0.7 0.4 30)` dan sintaksnya valid, tetapi chroma-nya melampaui apa yang dapat dikodekan ruang byte 256-per-kanal sRGB. Pada monitor sRGB warna itu terpotong ke aproksimasi dalam-gamut terdekat (biasanya versi yang lebih pudar). Pada monitor Display P3 ia di-render dengan benar. Mengirim OKLCH gamut-luas tanpa memeriksa lencana gamut menghasilkan warna yang tampak berbeda pada layar yang berbeda — bug konsistensi lintas-platform yang halus tetapi nyata.

✗ Salah
Kirim oklch(0.7 0.4 30) tanpa memeriksa gamut sRGB:
Layar P3 merender merah jenuh; layar sRGB merender pudar
Warna brand tampak tidak konsisten di perangkat keras pengguna.
✓ Benar
Periksa lencana gamut sRGB, Snap ke sRGB jika perlu, lapisi dengan @supports:
@supports (color: oklch(0 0 0)) { --primary: oklch(0.7 0.4 30); }
@supports not (color: oklch(0 0 0)) { --primary: #ef6b50; }
Perangkat keras P3 mendapat nilai gamut-luas; perangkat keras sRGB mendapat fallback yang di-snap.

Dukungan Peramban yang Hilang untuk oklch()

Parsing `oklch()` native mendarat di Chrome dan Edge 111 (Maret 2023), Safari 15.4 (Maret 2022), dan Firefox 113 (Mei 2023). Cakupan caniuse gabungan 94%+, tetapi 6% yang tersisa termasuk IE 11, Safari lama di iOS 15.3 atau lebih lama, Android Chrome lama, dan webview tersemat. Mengirim `oklch()` tanpa fallback ke ekor panjang itu merender sebagai nilai `inherit` CSS atau gagal sepenuhnya. Selalu deteksi-fitur dengan `@supports` untuk situs produksi dengan audiens luas.

✗ Salah
Definisikan warna brand hanya di OKLCH:
:root { --primary: oklch(0.629 0.193 263.4); }
IE 11 dan iOS Safari lama tidak merender warna sama sekali.
✓ Benar
Lapisi dengan @supports untuk fallback yang anggun:
:root { --primary: #3b82f6; }
@supports (color: oklch(0 0 0)) { :root { --primary: oklch(0.629 0.193 263.4); } }
Peramban modern mendapat OKLCH; peramban warisan mendapat fallback hex.

Membingungkan OKLCH dan LCH (Bentuk Polar CIE-LAB)

CSS Color 4 mengirim baik `oklch()` maupun `lch()`. Mereka tampak identik dalam bentuk (L / C / H) tetapi menggunakan ruang yang mendasari yang berbeda: `lch()` adalah bentuk polar dari CIE-LAB (1976), `oklch()` adalah bentuk polar dari OKLAB (Ottosson 2020). Keduanya TIDAK dapat dipertukarkan — `lch(60% 50 240)` dan `oklch(0.6 0.15 240)` menggambarkan warna yang berbeda. Keseragaman perseptual CIE-LAB rusak di sekitar biru jenuh, itulah mengapa Ottosson menurunkan kembali OKLAB. Untuk pekerjaan sistem-desain baru, pilih `oklch()` daripada `lch()`.

✗ Salah
Substitusi lch() untuk oklch() mengharapkan hasil yang sama:
lch(60% 50 240) ≠ oklch(0.6 0.15 240) — warna yang sama sekali berbeda
Disalin-tempel lintas ruang, nilainya diam-diam salah.
✓ Benar
Pilih satu ruang dan tetap di dalamnya:
oklch(0.629 0.193 263.4) untuk sistem desain modern
atau lch(60% 50 240) — tetapi jangan tukar nama fungsi tanpa konversi ulang

Siapa yang Menggunakan HEX ke OKLCH

Developer Frontend Bermigrasi ke Token OKLCH Tailwind v4
Tailwind v4 menstandardisasi OKLCH untuk palet defaultnya pada Januari 2025. Memigrasikan codebase v3 dengan warna brand berbasis-hex berarti mengonversi setiap hex ke OKLCH dan menjatuhkan hasilnya ke blok `@theme` yang baru. Tempel setiap hex di sini, salin nilai `oklch()`, definisikan `--color-primary: oklch(0.629 0.193 263.4)` dan teman-temannya. Lencana gamut langsung menandai warna apa pun yang melampaui sRGB sehingga Anda dapat memutuskan apakah akan mempertahankan nilai gamut-luas untuk pengguna Display P3 atau snap ke sRGB.
Pembuat Tema shadcn/ui Membangun Palet Kustom
Tema variabel-CSS shadcn/ui menggunakan OKLCH untuk setiap token (`--background`, `--foreground`, `--primary`, dst.). Tema kustom diturunkan dari hex brand dasar dengan mengonversi ke OKLCH dan kemudian menyapu L untuk varian terang/gelap. Tempel hex brand, baca triple OKLCH, bangun sisa tema dengan menstep L sambil menahan C dan H tetap. Cocok dengan alur kerja kanonik shadcn dengan persis.
Pembuat Sistem-Desain Menghasilkan Ramp yang Merata Secara Perseptual
Hasilkan ramp 50/100/200/.../900 dengan menstep kanal L dalam kenaikan OKLCH yang sama sambil menahan C dan H tetap. Jarak visual antara stop yang berdekatan tampak identik di setiap rona — apa yang sebenarnya dibutuhkan palet warna brand. Tailwind v4 menggunakan persis konstruksi ini untuk palet defaultnya, dan shadcn/ui mencerminkannya. Tempel setiap hex brand, baca OKLCH, hasilkan ramp secara algoritmik atau melalui panel Tints/Shades/Tones di bawah pemilih.
Insinyur Aksesibilitas Memverifikasi Kontras di Ruang OKLCH
WCAG 2.1 dan APCA kontras keduanya melaporkan terhadap warna sRGB yang diselesaikan, bukan triple OKLCH — tetapi mengetahui L OKLCH dari warna brand membuat penyetelan kontras dapat diprediksi: tingkatkan L sebesar 0,1 untuk lulus AA terhadap putih, turunkan L sebesar 0,1 untuk lulus AA terhadap hitam. Tampilan OKLCH + WCAG + APCA bersamaan membuat hubungan itu terlihat. Tempel hex brand, saksikan lencana kontras, sesuaikan L di OKLCH (lebih dapat diprediksi daripada HSL) hingga pasangan lulus kedua metrik.
Web Dev Membangun Token Warna Gamut-Luas untuk Layar Modern
Kebanyakan perangkat Apple sejak 2017 (dan banyak perangkat Android modern) merender Display P3 secara native. Mendefinisikan warna aksen brand di OKLCH memungkinkan Anda mengalamatkan merah dan hijau jenuh khusus-P3 yang tidak dapat dikodekan kode hex mana pun. Tempel hex yang ada untuk membaca OKLCH-nya, lalu dorong kanal C melewati langit-langit sRGB untuk mengklaim saturasi P3 ekstra. Lencana gamut mengonfirmasi nilai baru cocok dengan P3 (dan fallback dengan anggun pada layar hanya-sRGB melalui kompresi chroma peramban).
Pendidik Mengajarkan Lightness Perseptual-vs-Geometris
Tampilan bersamaan OKLCH + HSL membuat perbedaan antara lightness perseptual dan geometris menjadi jelas. Tempel hijau jenuh dan biru jenuh pada L=50% HSL yang sama; nilai L OKLCH berbeda secara nyata karena OKLCH mengukur kecerahan perseptual yang sebenarnya. Seret slider rona HSL dan saksikan L OKLCH bergoyang sementara Anda menahan L HSL konstan — kurvanya adalah kekhasan gamma yang divisualisasikan. Demonstrasi siap-kelas tentang mengapa sistem desain bermigrasi ke OKLCH.
Pemelihara Open-Source Memodernisasi Dokumentasi Token
Dokumen sistem-desain yang lebih tua biasanya mencantumkan warna brand hanya sebagai kode hex. Memodernisasi ke OKLCH berarti menunjukkan warna yang sama di kedua ruang — hex untuk kompatibilitas blok-kode, OKLCH untuk tabel spek dan definisi token modern. Tempel setiap hex, salin output OKLCH, perbarui dokumen. Hash URL yang dapat dibagikan juga memungkinkan kontributor menautkan ke warna persis yang sedang dibahas dalam isu GitHub tanpa ambiguitas.

Matematika & Pipeline HEX ke OKLCH

HEX → OKLCH Adalah Pipeline 7-Langkah
Konversi merutekan melalui lima representasi perantara: hex → integer sRGB → sRGB ternormalisasi (0-1) → linear-sRGB (gamma-decoded) → CIE XYZ D65 → OKLAB → OKLCH. Setiap langkah adalah matriks atau fungsi piecewise yang terdefinisi dengan baik dari sumber utama. Alat menjalankan pipeline penuh pada setiap penekanan tombol; matematikanya cukup cepat (mikrodetik) sehingga tidak diperlukan debouncing. Memunculkan tuple RGB perantara di samping OKLCH berarti Anda dapat men-debug nilai OKLCH yang tidak diharapkan dengan memeriksa kanal RGB.
Fungsi Gamma CSS Color 4 §11.2
Konversi sRGB → linear-sRGB menggunakan fungsi piecewise CSS Color 4 §11.2: `v ≤ 0.04045 ? v/12.92 : ((v + 0.055) / 1.055)^2.4`. Bentuk piecewise (dengan segmen linear kecil di dekat nol) menghindari ketidakstabilan numerik dari bentuk eksponen-murni pada warna yang sangat gelap. Ini adalah fungsi yang sama yang digunakan profil ICC untuk mengkodekan sRGB dan fungsi yang sama yang digunakan peramban secara internal saat merender kode hex. Invers untuk OKLCH → hex menerapkan fungsi yang sama secara terbalik: `v ≤ 0.0031308 ? v * 12.92 : 1.055 * v^(1/2.4) - 0.055`.
Matriks CSS Color 4 §15.1: linear-sRGB ↔ XYZ D65
Matriks dari CSS Color 4 §15.1 mengonversi linear-sRGB ke CIE XYZ di bawah titik putih 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`. Baris Y memberikan rumus luminansi sRGB. Matriksnya sama dengan yang digunakan di setiap pustaka manajemen-warna, termasuk ICC, Adobe Color Engine, dan pipeline open-source LCMS. Matriks invers untuk OKLCH → hex menerapkan invers §15.1.
Matriks OKLAB Ottosson 2020 dan Langkah Akar-Kubik
Konversi XYZ D65 → OKLAB menggunakan dua matriks dan langkah akar-kubik yang diterbitkan di makalah OKLAB 2020 karya Björn Ottosson. Matriks pertama mentransformasikan XYZ ke ruang respons-kerucut LMS (dimodelkan secara longgar pada sensitivitas kerucut L/M/S manusia). Akar-kubik setiap kanal untuk mengompres rentang dinamis secara non-linear (langkah-koreksi keseragaman-perseptual). Matriks kedua mentransformasikan LMS yang di-akar-kubik ke koordinat L/a/b OKLAB. Ketiga operasi menggunakan nilai persis yang diterbitkan di implementasi referensi makalah; tanpa derivasi ulang atau pembulatan. Invers untuk OKLCH → hex menerapkan matriks-matriks ini secara terbalik.
OKLAB ↔ OKLCH Adalah Cartesian-ke-Polar
Sumbu `a` dan `b` OKLAB membentuk bidang chroma yang tegak lurus terhadap sumbu L. OKLCH mengkodekan bidang itu secara polar: `C = sqrt(a² + b²)` (jarak Euclidean dari abu-abu), `H = atan2(b, a) * 180 / π` (sudut dalam derajat, dibungkus ke 0-360°). Invers: `a = C * cos(H * π / 180)`, `b = C * sin(H * π / 180)`. Bentuk polar lebih disukai daripada OKLAB untuk penyimpanan token-desain karena Hue adalah sumbu yang stabil — memutar Hue tidak secara tidak sengaja cross-fade melalui abu-abu seperti memutar `a` atau `b` di OKLAB.
Deteksi Gamut via Pemeriksaan Rentang-Kanal
Sebuah warna dianggap dalam-gamut untuk ruang target (sRGB, Display P3, Rec.2020) jika setiap kanal jatuh di dalam `[-ε, 1 + ε]` setelah konversi ke primer ruang itu, di mana `ε = 1e-7` untuk menyerap noise presisi-float di sekitar batas. Lencana gamut untuk setiap ruang berubah merah ketika kanal mana pun melampaui rentang. OKLCH tidak terbatas-gamut — `oklch(0.7 0.4 30)` adalah koordinat yang valid tetapi dapat melampaui ruang byte 256-per-kanal sRGB. Pemeriksaan berjalan pada setiap penekanan tombol; dikombinasikan dengan Snap ke sRGB, ini menangkap jebakan adopsi yang paling umum (OKLCH gamut-luas tidak ditampilkan dengan benar pada layar warisan).
Reduksi-Chroma Biner Snap-ke-sRGB
Snap ke sRGB cocok dengan algoritma pemetaan-gamut informatif di CSS Color 4 §13: tahan L dan H tetap pada nilai saat ini, cari biner C ∈ [0, currentC] untuk C terbesar yang konversi sRGB-nya tetap dalam-gamut. Pencarian berjalan paling banyak 30 iterasi (presisi ~10⁻⁹), yang lebih dari cukup untuk akurasi visual. Mempertahankan L dan H berarti warna yang di-snap terbaca sebagai keluarga rona yang sama pada kecerahan yang sama — ia hanya kehilangan saturasi. Kami tidak memotong kanal RGB secara langsung karena itu mendistorsi rona secara nyata (terutama pada biru, yang terpotong ke arah ungu).

Praktik Terbaik untuk Alur Kerja HEX / OKLCH

Gunakan OKLCH sebagai Format Token Kanonik di Kode Baru
Untuk sistem desain apa pun yang dikirim pada 2025 atau lebih baru, definisikan warna brand dan ramp palet di OKLCH. Sumbu L memberikan ramp yang merata secara perseptual otomatis; sumbu Chroma dapat mengalamatkan warna gamut-luas yang tidak dapat dikodekan hex. Pertahankan fallback hex untuk peramban lama melalui `@supports not (color: oklch(0 0 0))` atau PostCSS saat-build, tetapi jadikan OKLCH source-of-truth di penyimpanan token Anda. Tailwind v4 dan shadcn/ui keduanya dikirim seperti ini; proyek baru dapat mengikuti jejak mereka tanpa gesekan.
Hasilkan Ramp dengan Menstep L, Menahan C dan H Konstan
Konstruksi ramp OKLCH kanonik: kunci C dan H, sapu L dalam kenaikan yang sama. Ramp 9-langkah `oklch(L 0.15 263)` untuk L = 0,1, 0,2, …, 0,9 menghasilkan jarak yang merata secara visual di setiap langkah. Inilah yang persis dilakukan Tailwind v4 secara internal. Jangan menyapu C bersama L kecuali Anda ingin intensitas kromatik ramp bervariasi secara sengaja (jarang). Jangan melayangkan H di seluruh langkah — bahkan pergeseran 5° membuat ramp terasa kacau.
Cocokkan Presisi Tailwind v4: 3 Desimal L+C, 1 Desimal H
Palet default Tailwind v4 menerbitkan nilai OKLCH dengan tiga tempat desimal pada L dan C, dan satu tempat desimal pada H — `oklch(0.629 0.193 263.4)` untuk blue-500. Mencocokkan presisi ini di token Anda sendiri berarti alur kerja tempel-ke-konfig menghasilkan nilai yang identik dengan yang dikirim Tailwind, dan alat diff tidak akan menandai perbedaan yang palsu. Pembulatan default alat mengikuti konvensi ini; copy-paste ke blok `@theme` adalah bit-eksak.
Jalankan OKLCH Gamut-Luas Melalui Pemeriksaan Gamut Display P3
Jika Anda menargetkan perangkat keras Apple modern (iPhone, iPad, MacBook dari 2017+) atau mengirim konten sadar-HDR, lencana gamut memungkinkan Anda mendorong C melewati langit-langit sRGB untuk mengklaim saturasi P3 ekstra. Kompresi chroma yang diterapkan peramban menjaga warna agar tidak terpotong pada layar hanya-sRGB. Jangan pra-snap ke sRGB secara default kecuali Anda tahu seluruh audiens Anda menggunakan layar warisan — itu kehilangan 30%+ saturasi yang dapat dirender perangkat keras P3.
Sediakan Fallback Hex via @supports untuk Peramban Pra-2023
Meskipun dukungan peramban evergreen untuk `oklch()` sekarang 94%+, ekor panjang (IE 11, Android Chrome lama, webview tersemat) masih membutuhkan fallback. Bungkus token di `@supports (color: oklch(0 0 0))` dan sediakan varian hex di cabang alternatif. Output Snap ke sRGB persis fallback itu — dihasilkan secara otomatis dari triple OKLCH saat ini dengan L dan H dipertahankan. Plugin PostCSS saat-build seperti `postcss-oklab-function` juga dapat menyisipkan aproksimasi sRGB pada waktu kompilasi.
Dokumentasikan OKLCH dan Hex Sumber di Token Anda
Ketika Anda mengirim variabel CSS seperti `--color-primary: oklch(0.629 0.193 263.4)`, sertakan komentar dengan hex sumber: `/* source: #3b82f6 (Tailwind blue-500) */`. Enam bulan kemudian, ketika seseorang perlu menurunkan shade terkait atau memeriksa nilai terhadap PDF panduan brand, hex sumber mempertahankan jejak provenans penuh. OKLCH saja bermakna tetapi lebih sulit dikenali dalam sekilas; hex sumber adalah pengenal yang akan dicari sebagian besar rekan tim terlebih dahulu.
Gunakan Hash URL untuk Berbagi Keputusan Warna Langsung
Setiap perubahan warna memperbarui hash URL sebagai `#hex=3b82f6` atau `#oklch=...` secara otomatis. Salin URL ke thread Slack atau isu GitHub dan siapa pun yang membukanya mendarat pada warna yang sama dengan triple OKLCH yang sama. Ini lebih andal daripada menempelkan string OKLCH di chat — penerima kadang salah ketik desimal atau membungkus presisi yang salah — dan memungkinkan thread review desain mereferensikan warna persis alih-alih "biru brand yang kita bahas Selasa." Hash tidak pernah ditransmisikan ke server.

Pertanyaan yang Sering Diajukan

Apa itu warna OKLCH?
OKLCH adalah bentuk polar dari OKLAB, sebuah ruang warna yang seragam-perseptual yang diterbitkan oleh Björn Ottosson pada 2020. Kanal-kanalnya adalah Lightness (0-1, juga dapat ditulis sebagai 0-100%), Chroma (0 hingga sekitar 0,4 tergantung pada rona dan L, tidak terbatas di atas), dan Hue (0-360°, identik secara konseptual dengan hue HSL). Ia diturunkan dari CIE-LAB dengan merutekan melalui tahap respons-kerucut LMS dengan langkah akar-kubik. CSS Color 4 menambahkan sintaks `oklch()` pada 2022. Tailwind v4 menstandardisasi OKLCH untuk palet defaultnya pada 2025. Contoh: `oklch(0.629 0.193 263.4)` adalah Tailwind blue-500.
Apakah OKLCH lebih baik daripada HSL?
Untuk sistem desain, ya. L (lightness) HSL bersifat geometris — diturunkan dengan merata-ratakan max dan min RGB — dan mewarisi kurva gamma sRGB, sehingga `hsl(60 100% 50%)` (kuning) tampak lebih terang secara terlihat daripada `hsl(240 100% 50%)` (biru) meskipun keduanya melaporkan L=50%. L OKLCH bersifat perseptual, berlabuh ke model OKLAB dari Ottosson 2020. Implikasi praktisnya: ramp OKLCH pada L seragam tampak merata secara visual di setiap rona; ramp HSL memerlukan koreksi per-rona yang disetel-tangan agar terlihat merata. Inilah mengapa Tailwind v4 memigrasikan palet defaultnya dari generasi berbasis-HSL ke berbasis-OKLCH.
Peramban apa yang mendukung oklch()?
Semua peramban evergreen sejak pertengahan 2023: Chrome dan Edge 111 (Maret 2023), Safari 15.4 (Maret 2022, yang paling awal mendarat), Firefox 113 (Mei 2023). Cakupan caniuse gabungan lebih dari 94%. Untuk ekor panjang — IE 11, Safari lama, Android Chrome pada perangkat keras warisan — bungkus token Anda di `@supports (color: oklch(0 0 0))` dan sediakan fallback hex atau `hsl()` di cabang alternatif. Alat saat-build seperti PostCSS `postcss-oklab-function` juga dapat menyisipkan aproksimasi sRGB di samping nilai OKLCH pada waktu kompilasi.
Mengapa menggunakan OKLCH di Tailwind v4?
Tailwind v4 (dirilis Januari 2025) memindahkan palet defaultnya dari generasi berbasis-HSL ke berbasis-OKLCH secara spesifik karena OKLCH memberikan ramp yang merata secara perseptual otomatis. Di bawah sistem HSL v3, `red-500` dan `blue-500` memiliki bobot yang terlihat berbeda secara perseptual meskipun L% HSL identik, yang memaksa desainer untuk menyetel-tangan setiap stop individual; di bawah v4, keduanya tampak seimbang karena keduanya duduk pada L OKLCH yang sama. OKLCH juga membuka warna gamut-luas Display P3 yang tidak dapat dikodekan kode hex mana pun — token Tailwind v4 seperti `oklch(0.65 0.25 30)` dapat mengalamatkan merah P3 yang melampaui sRGB. Build masih memancarkan fallback hex untuk peramban lama.
Apakah OKLCH seragam secara perseptual?
Ya — itulah intent desainnya. OKLCH mewarisi keseragaman perseptual dari OKLAB, ruang warna Björn Ottosson 2020 yang dirancang khusus untuk memperbaiki ketidakseragaman di CIE-LAB (ruang seragam-perseptual terbaik sebelumnya). Langkah tetap di kanal L sesuai dengan langkah kecerahan perseptual tetap. Langkah tetap di C sesuai dengan langkah chroma perseptual tetap. Aproksimasi CIELAB rusak di sekitar warna yang sangat jenuh; OKLAB dan bentuk polarnya OKLCH tetap akurat di seluruh gamut, itulah mengapa setiap alat sistem-desain modern (Tailwind v4, shadcn/ui, Radix Colors v3) menstandardisasinya.
Bagaimana cara membaca nilai OKLCH?
`oklch(L C H)` — tiga angka, opsional dengan `/ A` untuk alpha. L adalah Lightness dari 0 (hitam) hingga 1 (putih); bentuk angka dan bentuk persen setara (`0.6` dan `60%`). C adalah Chroma dari 0 (abu-abu) hingga sekitar 0,4 untuk warna sRGB paling jenuh; tidak ada batas atas yang ketat, warna gamut luas dapat melebihinya. H adalah Hue dalam derajat dari 0 hingga 360, sama seperti HSL (0/360 = merah, 120 = hijau, 240 = biru). Contoh: `oklch(0.629 0.193 263.4)` adalah Tailwind blue-500 — cerah, sangat kromatik, di busur biru.
Apa perbedaan antara OKLCH dan LCH?
Keduanya adalah bentuk polar (Lightness / Chroma / Hue) dari ruang warna keluarga CIE-LAB. LCH adalah bentuk polar dari CIE-LAB, ruang seragam-perseptual 1976. OKLCH adalah bentuk polar dari OKLAB, pembaruan Ottosson 2020. Perbedaannya: keseragaman perseptual CIE-LAB rusak di sekitar biru dan ungu yang sangat jenuh (kelemahan terdokumentasi dalam model), sehingga ramp LCH melalui warna jenuh tampak agak tidak merata. OKLAB memperbaikinya dengan menurunkan kembali matriks dari tahap respons-kerucut LMS yang dikoreksi. Keduanya dikirim di CSS Color 4 (sintaks `lch()` dan `oklch()`); untuk pekerjaan sistem-desain baru pada 2025, pilih OKLCH.
Bagaimana cara mengonversi hex ke OKLCH?
Pipeline-nya: urai hex `#RRGGBB` menjadi integer kanal sRGB melalui `parseInt(hex, 16)`, normalkan ke 0-1, dekode-gamma ke linear-sRGB melalui fungsi piecewise CSS Color 4 §11.2, kalikan dengan matriks §15.1 untuk mendapatkan CIE XYZ D65, kalikan dengan matriks LMS Ottosson dan akar-kubik setiap kanal, kalikan dengan matriks OKLAB Ottosson untuk mendapatkan L/a/b, lalu Cartesian-ke-polar: `C = sqrt(a² + b²); H = atan2(b, a) * 180 / π`. Pipeline penuh berjalan dalam mikrodetik. Alat ini menjalankannya langsung saat Anda mengetik — `#3b82f6` mendarat sebagai `oklch(0.629 0.193 263.4)` secara instan.