Skip to content

HEX OKLCH 변환기

HEX를 Tailwind v4 디자인 토큰용 OKLCH로 변환합니다. 지각적으로 균일한 실시간 출력과 Display P3 색역 경고. 무료, 브라우저 전용.

트래킹 없음 브라우저 실행 무료
모든 색상 변환은 브라우저 안에서 로컬로 실행됩니다. 어떤 데이터도 서버로 전송되지 않습니다.
색역: sRGB Display P3 Rec2020
명암비 대비:
AA AA-Lg AAA AAA-Lg · APCA Lc
색각 이상 시뮬레이션 (8가지 유형)
Protanopia (적색맹)
Deuteranopia (녹색맹)
Tritanopia (청색맹)
Achromatopsia (전색맹)
Protanomaly (적색약)
Deuteranomaly (녹색약)
Tritanomaly (청색약)
Achromatomaly (부분 색각 이상)
Tints / Shades / Tones / Harmonies

틴트

셰이드

조화 색상

코드로 복사
자주 쓰는 색상 레퍼런스
CSS Color 4 §11.2 + §15.1 적합성, Ottosson 2020 OKLAB 행렬 정확성, Tailwind v4 팔레트 동등성, Display P3 / Rec2020 색역 감지 정확성, 그리고 0-1 Lightness, 0-0.4 Chroma, 0-360° Hue 범위에 걸친 HEX와 OKLCH 사이 왕복의 안정성에 대해 리뷰되었습니다. — Go Tools 엔지니어링 팀 · May 27, 2026

HEX OKLCH 변환기란 무엇인가요?

HEX OKLCH 변환기는 HEX 색상 코드(`#3b82f6`)를 OKLCH 공간에서 동일한 색상을 인코딩하는 지각적으로 균일한 Lightness / Chroma / Hue 트리플(`oklch(0.629 0.193 263.4)`)로 바꿔 주는 소형 유틸리티입니다. HEX 코드는 디자이너와 개발자가 Figma, Sketch, Photoshop, 브랜드 가이드라인 PDF, 그리고 CSS 스타일시트 사이를 오가며 붙여넣는 간결한 16진수 문자열입니다. 6글자 `#RRGGBB` 형태에 세 개의 8비트 채널이 묶여 있으며, 1996년 IEC 61966-2-1로 정의된 sRGB 색 공간에 고정되어 있습니다. OKLCH는 Björn Ottosson의 2020년 지각적으로 균일한 색 공간 OKLAB의 극형식으로, CSS Color 4(2022년부터 W3C 후보 권고안)에서 `oklch()` 구문을 통해 CSS에 추가되었습니다. 채널은 Lightness(0-1, 0-100%로도 표기 가능), Chroma(가장 채도가 높은 sRGB 색상의 경우 0부터 약 0.4까지, 광색역 색상은 위로 한계가 없음), 그리고 Hue(0-360°, HSL이 쓰는 동일한 각도 축)입니다. 브라우저 지원은 2022년 3월(Safari 15.4)부터 2023년 5월(Firefox 113)까지 모든 에버그린에 도착했고, 중간에 Chrome 111(2023년 3월)이 있습니다. caniuse 결합 커버리지는 94%를 넘습니다. 예: Tailwind blue-500은 `oklch(0.629 0.193 263.4)`입니다.

**지각 균일성 — 왜 중요한가.** OKLCH(그리고 직각 사촌 OKLAB)에서는 L 채널의 동일한 수치 거리가 모든 색조, 모든 채도 수준, 색 공간의 모든 영역에 걸쳐 동일한 지각 거리에 대응합니다. HSL에서는 동일한 L 값이 색조에 따라 균일하지 않게 밝아 보입니다. HSL이 sRGB의 감마 특이성을 물려받기 때문입니다. `hsl(120 100% 50%)`의 초록이 `hsl(240 100% 50%)`의 파랑보다 시각적으로 더 밝아 보이며, 둘 다 L=50%로 보고함에도 그렇습니다. 구조적 원인은, HSL이 감마 인코딩된 sRGB의 채널 최대와 최소 평균에서 L을 기하학적으로 도출하는 반면, OKLCH는 먼저 선형화한 뒤 LMS 원추 응답 단계를 거치는 지각 고정 모델로부터 L을 도출하는 데 있습니다. 실질적인 결론은, OKLCH에서 색조 사이에 L을 고정하면 시각적으로 동등한 밝기가 만들어진다는 점입니다. `oklch(0.7 0.2 130)`의 초록과 `oklch(0.7 0.2 250)`의 파랑은 화면에서 동일하게 밝아 보입니다. Tailwind v4가 2025년 기본 팔레트를 OKLCH 기반 램프로 이주한 이유입니다. 모든 셰이드 단계(50, 100, 200, …, 900, 950)가 동일한 지각 명도 차이에 도달하므로, 브랜드 색상이 색조에 관계없이 색상별 수작업 튜닝 없이 일관되게 느껴집니다.

**Tailwind v4와 디자인 토큰 혁명.** Tailwind v4(2025년 1월 출시)는 HSL 기반 색상 생성을 OKLCH 기반 시스템으로 교체했습니다. shadcn/ui가 곧이어 CSS 변수 테마용으로 OKLCH를 채택했고, Radix Colors v3도 마찬가지입니다. 왜 지금인가. 디자인 시스템은 전체 팔레트에 걸쳐 균일한 간격의 셰이드를 필요로 하며, 팔레트가 성장해도 그 속성이 자동으로 유지되어야 합니다. HSL에서는 디자이너가 각 색상 단계를 수작업으로 보정해야 했습니다. 초록 램프의 어두운 끝과 일치시키려고 파랑 램프의 어두운 끝에서 L을 5% 더 올리고, 브랜드가 진화하면 다시 보정하는 식입니다. OKLCH에서는 단일 공식(L을 0.1씩 이동, C와 H 고정)이 일관된 램프를 자동으로 만들어 줍니다. 실제 예: Tailwind v3에서는 `red-500`과 `blue-500`이 동일한 HSL L%에도 불구하고 시각적으로 다른 지각 가중치를 가졌습니다. v4에서는 둘 다 동일한 OKLCH L에 자리하기 때문에 균형 잡혀 보입니다. 이는 접근성(공유 배경 대비 일관된 명암비는 팔레트 전반에서 컴포넌트 상태가 균일하게 느껴진다는 뜻), 브랜드 일관성(시각 위계가 팔레트에 걸쳐 유지됨 — 동일한 L의 `primary` 버튼과 `accent` 버튼이 동일한 위계 수준으로 느껴짐), 그리고 개발자 인체 공학(디자인 토큰 명세에 묻힌 수십 개의 수작업 예외 대신 단일 정신 모델)에 중요합니다.

**광색역 함의.** OKLCH는 한계가 없습니다. Display P3와 Rec2020이 재현할 수 있는 모든 색상을 포함해 sRGB 밖의 색상도 표현할 수 있습니다. 이로 인해 최신 광색역 디스플레이에 자연스러운 선택이 됩니다. 2017년 이후 대부분의 Apple 기기(iPhone 7 이후, 2016년 이후 MacBook Pro, 모든 iPad Pro)는 Display P3를 네이티브로 렌더링하며, 많은 최신 Android 기기와 노트북 화면도 그렇습니다. 트레이드오프: 모든 OKLCH 트리플이 유효한 sRGB 색상에 매핑되지는 않습니다. 본 도구는 세 색역 배지(sRGB, Display P3, Rec2020)를 보여 주므로 현재 OKLCH가 주어진 타깃에서 올바르게 표시될지 즉시 확인할 수 있습니다. 색상이 sRGB 전용일 때 **Snap to sRGB** 버튼은 이진 채도 축소(CSS Color 4 §13의 정보 색역 매핑 알고리즘에 따름)를 사용해 L과 H를 보존한 채 색역 안으로 줄여 줍니다. 광색역 클라이언트용 원본 OKLCH 값과 함께 `@supports not (color: oklch(0 0 0))`를 통해 배포할 수 있는 HEX 폴백이 만들어집니다.

**HEX → OKLCH 변환 수학.** 파이프라인은 잘 정의되어 있으며 두 1차 출처에 기반합니다. sRGB와 XYZ 단계는 W3C CSS Color 4, OKLAB 단계는 Ottosson 2020. 1단계: 채널당 `parseInt(hex.slice(1, 3), 16)`을 통해 `#RRGGBB`를 세 개의 8비트 정수 sRGB 채널로 파싱. 2단계: 각 채널을 255로 나눠 0-1로 정규화. 3단계: CSS Color 4 §11.2 조각별 함수(`v <= 0.04045 ? v/12.92 : ((v+0.055)/1.055)^2.4`)를 통해 선형 sRGB로 감마 디코딩. 4단계: §15.1 3×3 행렬을 곱해 CIE XYZ D65 좌표를 얻음. 5단계: Ottosson의 LMS 행렬(2020년 레퍼런스 구현)을 곱하고 각 채널의 세제곱근을 취함. 6단계: Ottosson의 OKLAB 행렬을 곱해 L / a / b를 얻음. 7단계: 직교 좌표를 극좌표로 — `C = sqrt(a² + b²); H = atan2(b, a) * 180 / π`, H를 0-360°로 감음. 전체 파이프라인은 마이크로초 단위로 실행됩니다. 키 입력마다 디바운스 없이 OKLCH 출력이 즉시 재렌더링됩니다.

본 도구의 HEX → OKLCH 작업 흐름은 동일한 기반 통합 색상 변환기를 공유하는 5개 스포크 패밀리의 한 방향입니다. 전용 통합 색상 변환기가 허브입니다. 9가지 형식을 동시에 편집 가능한 상태로 보여 주며, 작업 흐름이 단순한 HEX와 OKLCH 이상을 필요로 할 때 적절한 도구입니다. 단방향 스포크는 특정 Google 검색 의도를 겨냥합니다. canvas와 하드웨어 방향용 HEX RGB 변환기, 역방향용 RGB HEX 변환기, 많은 Tailwind v3 코드베이스에서 여전히 쓰이는 레거시 디자이너 원통 공간용 HEX HSL 변환기, 그리고 인쇄 시안 근사용 HEX CMYK 변환기. 다섯 스포크와 허브 모두 내부적으로 동일한 OKLCH 단일 사실 출처와 동일한 Ottosson 2020 행렬을 공유하므로, 패밀리 전체에서 결과가 동일함이 보장됩니다. 모든 변환은 브라우저 안에서 로컬로 실행됩니다. HEX 코드는 결코 업로드되지도, 로그에 남지도, 입력하는 동안 어떤 네트워크 요청도 발사되지 않습니다. 개발자 도구에서 확인할 수 있습니다. OKLCH가 2024–2026년 디자인 시스템의 표준이 된 이유를 더 깊이 알고 싶다면 짝꿍 가이드를 참고하시기 바랍니다: OKLCH 색 공간 설명 — Tailwind v4가 채택한 이유.

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

주요 기능

모든 색조에 걸쳐 지각적으로 균일한 출력

OKLCH의 L 채널은 OKLAB 지각 모델(Ottosson 2020)에 고정되어 있어, 모든 L 단계가 모든 색조에 걸쳐 동일한 밝기 변화로 보입니다. `oklch(0.7 0.2 130)`의 초록과 `oklch(0.7 0.2 250)`의 파랑은 화면에서 동일하게 밝게 읽힙니다. Tailwind v4가 색상별 수작업 튜닝 없이 자동으로 시각적으로 균일한 램프를 생성하게 해 주는 구조적 속성이며, HSL이 sRGB의 감마 특이성을 물려받기 때문에 등가의 HSL 램프가 보장할 수 없는 속성과 같습니다.

Tailwind v4 준비 — @theme 블록에 바로 떨어뜨리기

OKLCH 출력은 CSS Color 4의 공백 구분 형식(`oklch(0.629 0.193 263.4)`)을 사용합니다. Tailwind v4가 `@theme` 블록 안에서 `--color-primary: oklch(0.629 0.193 263.4);` 형태로 기대하는 정확한 구문입니다. L 정밀도는 Tailwind 공개 팔레트 정밀도와 일치합니다(L과 C는 셋째 자리 소수, H는 1도 소수점 한 자리). 설정 붙여넣기 작업 흐름이 Tailwind가 기본으로 배포하는 토큰과 동일한 토큰을 만들어 냅니다. 완전한 토큰 줄을 위해 코드로 복사 섹션의 Tailwind v4 스니펫과 짝지으십시오.

Display P3 + Rec2020 색역 배지

세 개의 실시간 배지(sRGB, Display P3, Rec2020)가 현재 OKLCH 트리플이 각 공간의 재현 가능 범위에 들어가는지를 표시합니다. OKLCH는 한계가 없기 때문에 유용합니다. 많은 고채도 색상이 sRGB를 벗어나지만 P3에는 들어맞으며, 2017년 이후 대부분의 Apple 기기가 이를 네이티브로 렌더링할 수 있습니다. 색역 외 상태에서 배지가 빨갛게 변하므로, 최신 디스플레이용으로 광색역 값을 유지할지 보편 호환성을 위해 sRGB로 스냅할지를 결정할 수 있습니다. 채널 범위 검사는 키 입력마다 실행됩니다.

레거시 호환성을 위한 Snap to sRGB

Snap to sRGB 버튼은 이진 채도 축소(CSS Color 4 §13 정보 알고리즘)를 실행합니다. L과 H를 고정한 채 결과 sRGB 변환이 색역 안에 머물 때까지 C를 아래로 탐색합니다. 서브픽셀 정밀도에서 약 30회 반복 후에 종료됩니다. L과 H 보존은 스냅된 색상이 동일한 색조 가족, 동일한 밝기로 읽힌다는 뜻입니다. 채도만 잃을 뿐이며, 이는 시각적으로 가장 거슬리지 않는 절충안입니다. 스냅된 HEX는 계층 폴백을 위해 `@supports not (color: oklch(0 0 0))`를 통해 원본 OKLCH와 짝지어집니다.

키 입력마다 즉시 변환

변환 버튼이 없습니다. HEX 입력란에 한 문자를 입력하면 OKLCH 입력란이 동일한 애니메이션 프레임에서 업데이트됩니다. 내부 정규 표현 자체가 OKLCH 트리플이므로 OKLCH를 직접 편집하는 것도 똑같이 빠릅니다. 커서가 둔 자리에 그대로 머물고 다른 형식 입력란만 재렌더링됩니다. 변환 수학(sRGB → 선형 → XYZ → LMS → OKLAB → 극형식)은 마이크로초 단위로 실행됩니다. 디바운스도, 지연도, 보이는 리플로우도 없습니다.

W3C + Ottosson 2020 파이프라인을 통한 작동 예제

코드 예제 섹션은 W3C CSS Color 4(§11.2 조각별 감마, §15.1 선형 sRGB → XYZ D65 행렬)와 Björn Ottosson의 2020년 OKLAB 레퍼런스 구현에 공개된 정확한 행렬과 감마 함수를 사용한 전체 HEX → OKLCH 파이프라인의 동작하는 JavaScript 구현을 함께 제공합니다. Node REPL에 붙여넣어 `#3b82f6`이 `oklch(0.629 0.193 263.4)`를 만들어 내는지 검증하십시오. 모든 행렬 값이 1차 출처에서 복사·붙여넣기 되었습니다. 재도출이나 반올림이 없습니다.

통합 허브에서 HSL / RGB / HEX와 양방향

이 스포크는 HEX → OKLCH를 구체적으로 타기팅하지만, 동일한 페이지가 다른 여덟 형식 입력란도 노출합니다. 하드웨어용 RGB, 레거시 CSS용 HSL, 팔레트 수학용 OKLAB, 피커 UI용 HSV/HWB, 인쇄용 CMYK, 그리고 가장 가까운 CSS 이름 있는 색상까지. 내부 OKLCH 단일 사실 출처는 모든 입력란이 왕복 전체에서 비트 안정적이라는 뜻입니다. HEX → OKLCH → HSL → HEX는 원래 HEX를 복원합니다. 어떤 입력란이든 클릭해 직접 편집하고 다른 입력란이 업데이트되는 것을 지켜보십시오.

인라인 브라우저 지원 요약

본 도구는 관련된 곳에서 정규 브라우저 지원 데이터 포인트를 노출합니다. Chrome과 Edge 111(2023년 3월), Safari 15.4(2022년 3월 — 가장 이른), Firefox 113(2023년 5월), caniuse 결합 커버리지 94% 이상. 구형 클라이언트에는 토큰을 `@supports (color: oklch(0 0 0))`로 감싸고 대안 브랜치에 HEX 폴백을 제공하십시오. Snap to sRGB 출력이 정확히 그 폴백이며, 현재 OKLCH 트리플로부터 자동으로 생성됩니다. 수작업 채도 튜닝은 필요 없습니다.

100% 브라우저 내 실행 — 업로드 없음, 추적 없음

모든 HEX 파싱, OKLCH 변환, 색역 감지, 명암비 점수 산출, 팔레트 생성이 브라우저 안에서 로컬로 실행됩니다. HEX 코드는 결코 전송되지도, 어떤 서버에 로그로 남지도, 분석되지도 않습니다. 입력하는 동안 네트워크 요청이 전혀 발생하지 않습니다. 개발자 도구에서 확인할 수 있습니다. 발표 전 브랜드 팔레트, 미공개 제품의 사내 디자인 토큰, NDA 하의 초안 목업, 그리고 값이 새어 나가서는 안 되는 모든 기밀 색상 작업에 안전합니다.

HEX OKLCH 변환기 대안 비교

OKLCH.com

브라우저 도구

Andrey Sitnik(postcss-oklab-function 폴리필과 Autoprefixer의 작성자)이 아름답게 구축한 OKLCH 중심 도구입니다. 광색역 인식 피커, P3 인식 시각화, 팔레트 생성을 갖춘 순수 OKLCH 탐색에는 동급 최상입니다. HEX/RGB/HSL/CMYK 변환을 1차 출력으로 다루지는 않습니다. OKLCH에만 집중합니다. 깊은 OKLCH 디자인 작업을 할 때는 OKLCH.com을, 크로스 공간 변환과 색역/명암비/CVD 기능도 함께 필요할 때는 본 도구를 잡으십시오.

Tailwind v4 문서 팔레트

문서 레퍼런스

Tailwind v4 문서는 HEX 등가물과 함께 전체 기본 팔레트를 OKLCH로 공개합니다. 정확한 Tailwind 셰이드를 조회하거나(`blue-500` → `oklch(0.629 0.193 263.4)`) Tailwind 셰이드의 시각적 가중치에 사용자 정의 색상을 맞추는 데 가장 좋습니다. 인터랙티브하지 않습니다. 임의 HEX 코드의 변환은 없습니다. 본 도구는 동일한 OKLCH 정밀도를 다루며, 200개 넘는 Tailwind 기본값이 아니라 어떤 HEX에도 동작합니다.

ColorJS.io 플레이그라운드

브라우저 도구

ColorJS.io는 Lea Verou와 Chris Lilley의 권위 있는 CSS 색상 라이브러리입니다. 플레이그라운드는 전체 변환 그래프(HEX, RGB, HSL, HWB, LCH, OKLCH, OKLAB, P3, Rec2020, ProPhoto, A98)를 노출합니다. 깊이 정확한 수학으로, 명세 수준의 색상 작업에 이상적입니다. UI는 디자이너가 아닌 개발자 중심이며, 명암비 / CVD / 팔레트 기능이 부족합니다. 본 도구와 짝지으십시오. 다른 방법으로 검증할 수 없는 수학에는 ColorJS.io를, 적극적 작업 흐름에는 본 도구를 쓰십시오.

shadcn/ui 테마 생성기

브라우저 도구

Vercel의 shadcn 테마 생성기는 shadcn/ui 프로젝트용으로 붙여넣기 가능한 OKLCH CSS 변수 테마를 만들어 냅니다. 결과물이 shadcn 설정 파일일 때, 종단 간 테마 생성에 가장 좋습니다. 임의 HEX 코드에 대한 중간 OKLCH 값을 노출하지는 않습니다. 전체 테마 작업 흐름에 집중합니다. shadcn 테마를 구축할 때는 shadcn 생성기를, 임의 개별 색상의 OKLCH가 필요할 때는 본 도구를 쓰십시오.

ColorHexa

브라우저 도구

깊은 메타데이터를 가진 오래된 색상별 SEO 페이지입니다. 최근 HEX/RGB/HSL/CMYK 옆에 OKLCH 지원이 추가되었습니다. UI가 오래되었고(2010년대 초), 광색역 감지가 없으며, APCA 명암비도 없습니다. Google을 통한 특정 HEX의 SEO 발견에는 강하지만, 통합 입력란 UX와 색역/명암비 기능이 중요한 적극적 변환 작업 흐름에서는 약합니다. 본 도구가 모든 적극적 작업 흐름 축에서 이깁니다.

브라우저 개발자 도구 색상 피커

내장 브라우저 기능

Chrome, Firefox, Safari 개발자 도구 모두 CSS 패널의 색상 스와치를 클릭할 때 HEX, RGB, HSL, HWB, OKLCH 사이를 인라인으로 전환하는 색상 피커를 탑재합니다. 무료, 설치 불필요, 항상 사용 가능. 색역 배지, 명암비 점수, 색각 이상 시뮬레이션, 비웹 플랫폼용(SwiftUI, Compose) 코드 내보내기가 부족합니다. 이미 CSS를 디버깅 중이라면 개발자 도구를, 크로스 플랫폼 출력이나 더 깊은 검사가 필요하면 본 도구를 잡으십시오.

Culori CLI

명령줄 라이브러리

Culori는 가장 철저한 OKLCH 인식 JavaScript 색상 라이브러리입니다. 그 CLI는 HEX → OKLCH 변환을 한 줄로 처리합니다(`culori convert '#3b82f6' --to oklch`). CI 스크립트와 일괄 토큰 이주에 훌륭합니다. 시각적 피커나 색역 배지는 없습니다. 자동화에는 Culori CLI를, 인터랙티브 단일 색상 작업과 즉각적 시각 피드백에는 본 도구를 쓰십시오.

HEX OKLCH 변환 예시

Tailwind 3 HSL 팔레트 → v4 OKLCH 토큰 이주

#3b82f6

OKLCH 출력: `oklch(0.629 0.193 263.4)`. Tailwind v4 이주의 정규 작업 흐름입니다. `@theme` 블록에서 브랜드 색상을 한 번 `--color-primary: oklch(0.629 0.193 263.4)`로 정의한 뒤, L을 위로 단계적으로 움직여 틴트(`oklch(0.7 0.193 263.4)`, `oklch(0.8 0.15 263.4)`)를, L을 아래로 움직여 셰이드(`oklch(0.5 0.193 263.4)`, `oklch(0.4 0.18 263.4)`)를 구성하십시오. 색조는 263.4°에 고정되고, 채도는 0.19 부근에 고정되며, 지각 명도만이 휩쓸리는 유일한 축입니다. 등가의 HSL 램프가 보장할 수 없는, 전체 스케일에 걸쳐 시각적으로 균일하게 읽히는 1차원 램프입니다.

지각적으로 균일한 셰이드를 사용한 디자인 토큰 이주

#FF5733

OKLCH 출력: 대략 `oklch(0.66 0.18 28)`. 이 브랜드 주황으로부터 5단계 셰이드 램프를 만들려면 C = 0.18과 H = 28을 고정한 채 L을 0.3, 0.45, 0.6, 0.75, 0.9로 단계적으로 움직이십시오. `oklch(0.3 0.18 28)`에서 `oklch(0.9 0.18 28)`까지 만들어집니다. 인접한 각 쌍이 동일한 밝기 시각 점프로 느껴지는 이유는 OKLCH의 L이 HSL의 감마에 얽힌 기하학적 L이 아니라 OKLAB 지각 모델(Ottosson 2020)에 고정되어 있기 때문입니다. 채도는 양 끝에서 sRGB 쪽으로 조용히 클립될 수 있습니다. 본 도구의 색역 배지가 어느 단계에 주의가 필요한지를 정확히 표시합니다.

광색역 OKLCH → Tailwind v3 사이트용 sRGB 폴백

#FF1744

OKLCH 출력: 대략 `oklch(0.62 0.27 26)`. 이런 고채도 빨강은 sRGB 큐브를 벗어납니다. **sRGB** 색역 배지가 빨갛게 켜지고, **Display P3** 배지는 P3에는 들어맞는다고 확인해 주며, Rec2020 역시 이를 덮습니다. 표준 24비트 모니터에서는 채도가 떨어진 근사로 렌더링되고, Display P3 화면(2017년 이후 대부분의 Apple 기기)에서는 채도를 살린 채 렌더링됩니다. **Snap to sRGB**를 클릭하면 이진 채도 축소 알고리즘(CSS Color 4 §13 정보 조항)이 실행됩니다. L과 H는 잠긴 채 C가 색이 들어맞을 때까지 줄어들어, 여전히 8비트 HEX 토큰을 쓰는 Tailwind v3 코드베이스에 적합한 HEX 폴백이 만들어집니다.

shadcn/ui 테마 이주

#0f172a

OKLCH 출력: 대략 `oklch(0.21 0.04 264.7)`. shadcn/ui는 Tailwind v4 도착 직후 CSS 변수 테마를 OKLCH로 이주했으며, `#0f172a`(Tailwind slate-900)는 정규 다크 모드 배경입니다. 본 도구는 동일한 HEX에 대한 shadcn의 공개된 OKLCH 값을 재현해 주므로, 커뮤니티 테마 포트가 상류 정의와 일치하는지 검증할 수 있습니다. 명암비 행과 짝지어, 이 배경 대비 다크 모드 전경(흰색 또는 거의 흰색)이 여전히 WCAG AA를 통과하는지 확인하십시오. `oklch(1 0 0)` 대비 `oklch(0.21 ...)`은 편안한 16:1 비율을 보고합니다.

브랜드 HEX로부터 Tailwind v4 다크/라이트 쌍 구축

#3b82f6

OKLCH 출력: `oklch(0.629 0.193 263.4)`. 테마용으로 짝지어진 다크/라이트 쌍을 도출하려면 C와 H를 고정한 채 L 채널만 회전시키십시오. 라이트 모드 primary는 `oklch(0.7 0.15 263)`이 됩니다(흰색 배경에서 눈의 피로를 피하려고 약간 더 밝고, 약간 덜 채도가 높음). 다크 모드 primary는 `oklch(0.5 0.18 263)`이 됩니다(어두운 배경에서 두드러짐을 유지하려고 약간 더 어둡고, 약간 더 채도가 높음). 색조가 잠겨 있어 두 변형 모두 동일한 브랜드 정체성으로 읽히며, 지각 L 이동이 채널별 RGB 수작업 튜닝 없이 두 모드 모두에서 가독성을 균형 잡아 줍니다.

자주 쓰이는 HEX → OKLCH 변환 (Tailwind v4)

10개의 인기 Tailwind v4 기본 팔레트 중간 셰이드와 그 HEX 및 OKLCH 등가물의 레퍼런스 표입니다. 값은 Tailwind v4의 공개 팔레트 정밀도(L과 C 셋째 자리, H는 정수 또는 첫째 자리 소수)와 일치합니다.

Tailwind slate-500

#64748b oklch(0.55 0.04 257)

Tailwind CSS 기본 slate-500입니다. 본문 텍스트, 보조 표면, 강조가 약한 UI 요소에 쓰이는 중립적인 차가운 회색입니다. 낮은 채도(0.04)가 시각적으로 중립을 유지해 줍니다.

#64748b oklch(0.55 0.04 257)

slate는 다크 모드 친화 테마용 정규 중립 램프입니다. 모든 slate 셰이드가 매우 낮은 채도에 자리해 파랑 끼가 아니라 회색으로 읽힙니다.

RGB, HSL, CMYK, 색역 경고, 코드 내보내기까지 갖춘 전체 색상 피커가 필요하신가요? 통합 색상 변환기를 시도해 보십시오. 모든 형식을 동시에 편집 가능합니다.

Tailwind gray-500

#6b7280 oklch(0.55 0.03 258)

Tailwind CSS 기본 gray-500입니다. slate의 진정한 중립 대응물입니다. 더 무채색에 가까운 모습을 위해 slate보다 약간 낮은 채도(0.04 대비 0.03)입니다.

#6b7280 oklch(0.55 0.03 258)

gray와 slate는 거의 동일한 L(0.55)에 자리합니다. 지각 밝기가 일치하며, 아주 작은 채도 차이만이 둘을 구별해 줍니다.

RGB, HSL, CMYK, 색역 경고, 코드 내보내기까지 갖춘 전체 색상 피커가 필요하신가요? 통합 색상 변환기를 시도해 보십시오. 모든 형식을 동시에 편집 가능합니다.

Tailwind red-500

#ef4444 oklch(0.64 0.21 25)

Tailwind CSS 기본 red-500입니다. 정규 파괴적 액션 / 오류 빨강입니다. 높은 채도(0.21)가 중립 배경 대비 두드러짐을 유지해 줍니다.

#ef4444 oklch(0.64 0.21 25)

red-500은 L=0.64에 자리해 blue-500의 L=0.63과 일치합니다. v4 램프는 v3의 HSL 기반 팔레트와 달리 색조 전반에 지각적으로 균형이 잡혀 있습니다.

RGB, HSL, CMYK, 색역 경고, 코드 내보내기까지 갖춘 전체 색상 피커가 필요하신가요? 통합 색상 변환기를 시도해 보십시오. 모든 형식을 동시에 편집 가능합니다.

Tailwind orange-500

#f97316 oklch(0.71 0.19 42)

Tailwind CSS 기본 orange-500입니다. 따뜻한 강조와 CTA 색조입니다. 색조 원 위에서 빨강과 amber 사이(42°)에 자리합니다.

#f97316 oklch(0.71 0.19 42)

orange-500의 L(0.71)이 red-500의 L(0.64)보다 높은 것은 의도된 것입니다. 노랑과 주황은 빨강보다 낮은 지각 L에서도 밝아 보입니다.

RGB, HSL, CMYK, 색역 경고, 코드 내보내기까지 갖춘 전체 색상 피커가 필요하신가요? 통합 색상 변환기를 시도해 보십시오. 모든 형식을 동시에 편집 가능합니다.

Tailwind amber-500

#f59e0b oklch(0.76 0.16 70)

Tailwind CSS 기본 amber-500입니다. 경고 / 주의 색조이며, 휠 위에서 주황과 노랑 사이에 자리합니다.

#f59e0b oklch(0.76 0.16 70)

amber-500은 어떤 500 수준 Tailwind 색상보다 가장 높은 L(0.76)에 도달합니다. 노랑은 자연히 '중간 톤'으로 보이려면 더 높은 L이 필요합니다.

RGB, HSL, CMYK, 색역 경고, 코드 내보내기까지 갖춘 전체 색상 피커가 필요하신가요? 통합 색상 변환기를 시도해 보십시오. 모든 형식을 동시에 편집 가능합니다.

Tailwind green-500

#22c55e oklch(0.72 0.19 149)

Tailwind CSS 기본 green-500입니다. 성공 / 확인 색조입니다. 색조 휠 위에서 149°, 시안-초록 영역에 자리합니다.

#22c55e oklch(0.72 0.19 149)

L=0.72의 green-500은 L=0.64의 red-500보다 살짝 밝습니다. 이는 지각 현실(초록이 밝아 보임)과 일치하며 팔레트에 균형 잡힌 시각 가중치를 부여합니다.

RGB, HSL, CMYK, 색역 경고, 코드 내보내기까지 갖춘 전체 색상 피커가 필요하신가요? 통합 색상 변환기를 시도해 보십시오. 모든 형식을 동시에 편집 가능합니다.

Tailwind teal-500

#14b8a6 oklch(0.7 0.13 184)

Tailwind CSS 기본 teal-500입니다. 초록과 시안 사이의 차가운 강조 색조입니다. 고채도 청록은 sRGB를 쉽게 밀어내기 때문에 green-500보다 낮은 채도입니다.

#14b8a6 oklch(0.7 0.13 184)

teal-500의 H=184°는 시안(180°) 바로 너머에 자리합니다. 순수 시안은 OKLCH에서 채도 클리핑 없이 sRGB로 표현하기 어렵습니다. teal이 실질적 절충안입니다.

RGB, HSL, CMYK, 색역 경고, 코드 내보내기까지 갖춘 전체 색상 피커가 필요하신가요? 통합 색상 변환기를 시도해 보십시오. 모든 형식을 동시에 편집 가능합니다.

Tailwind blue-500

#3b82f6 oklch(0.63 0.19 263)

Tailwind CSS 기본 blue-500입니다. 2020년대의 정규 '웹 파랑'이며, v4 팔레트와 shadcn/ui 기본 테마의 브랜드 앵커 색상입니다.

#3b82f6 oklch(0.63 0.19 263)

blue-500은 Tailwind v4 OKLCH 이주 시작점으로 가장 자주 쓰이는 레퍼런스 색상입니다. #3b82f6을 여기에 붙여넣어 변환을 공개된 값과 대조해 검증하십시오.

RGB, HSL, CMYK, 색역 경고, 코드 내보내기까지 갖춘 전체 색상 피커가 필요하신가요? 통합 색상 변환기를 시도해 보십시오. 모든 형식을 동시에 편집 가능합니다.

Tailwind indigo-500

#6366f1 oklch(0.59 0.21 277)

Tailwind CSS 기본 indigo-500입니다. 파랑의 차가운 강조 동반자이며, 277°(보라 쪽)에 자리합니다. 높은 채도(0.21)가 두드러짐을 부여합니다.

#6366f1 oklch(0.59 0.21 277)

indigo-500은 blue-500보다 낮은 L(0.63 대비 0.59)에 자리합니다. 더 깊은 색조가 더 많은 명백한 밝기를 흡수하며, v4 램프가 지각적으로 이를 반영합니다.

RGB, HSL, CMYK, 색역 경고, 코드 내보내기까지 갖춘 전체 색상 피커가 필요하신가요? 통합 색상 변환기를 시도해 보십시오. 모든 형식을 동시에 편집 가능합니다.

Tailwind violet-500

#8b5cf6 oklch(0.6 0.24 295)

Tailwind CSS 기본 violet-500입니다. 295°의 보라 강조 색조입니다. 어떤 Tailwind 500 수준 색상보다 가장 높은 채도(0.24)이며, AI / 창작 제품 브랜딩에 흔히 쓰입니다.

#8b5cf6 oklch(0.6 0.24 295)

violet-500의 높은 C=0.24는 sRGB 색역 천장 근처에 자리합니다. 더 높이 밀면 P3 전용 광색역 영역으로 넘어갑니다.

RGB, HSL, CMYK, 색역 경고, 코드 내보내기까지 갖춘 전체 색상 피커가 필요하신가요? 통합 색상 변환기를 시도해 보십시오. 모든 형식을 동시에 편집 가능합니다.

HEX OKLCH 변환기 사용 방법

  1. 1

    HEX 입력란에 HEX 코드 붙여넣기

    어떤 HEX 값이든 HEX 입력란에 떨어뜨리십시오. 앞의 `#` 포함 여부, 3자리 축약 (`#F73`), 6자리 완전형 (`#3b82f6`), 4자리 알파 축약 (`#F738`), 또는 8자리 알파 완전형 (`#FF573380`) 모두 가능합니다. 파서는 다섯 가지 입력 형태를 OKLCH 도출 전에 모두 동일한 내부 색상으로 정규화합니다. 대소문자는 무관합니다 (`#3b82f6`과 `#3B82F6`은 동일하게 파싱됩니다). 잘못된 문자나 자릿수는 조용한 인라인 오류를 만들어 내고, 유효한 HEX는 OKLCH를 포함한 다른 모든 형식 입력란을 실시간으로 업데이트합니다.

  2. 2

    OKLCH 입력란에서 OKLCH 트리플 읽기

    OKLCH 입력란은 CSS Color 4의 최신 형식으로 값을 노출합니다. 불투명 색상에는 `oklch(0.629 0.193 263.4)`, 알파가 포함된 색상에는 `oklch(0.629 0.193 263.4 / 0.5)`. L은 소수점 셋째 자리까지 반올림되며(Tailwind v4 공개 정밀도와 일치), C는 셋째 자리까지, H는 1도 소수점 한 자리까지입니다. 본 도구의 내부 OKLCH 단일 사실 출처는 그 아래의 부동소수점 정밀도가 다른 모든 입력란에 걸쳐 보존된다는 뜻입니다. HEX로 되돌리는 왕복이 비트 안정적으로 유지되며, 왕복마다 1-2도씩 드리프트하는 레거시 HSL 피벗 변환기와 다릅니다.

  3. 3

    복사를 클릭해 OKLCH 문자열 가져오기

    각 형식 카드의 오른쪽에는 복사 버튼이 있습니다. 한 번 클릭하면 값이 클립보드로 들어가고, 버튼 레이블이 잠시 "복사되었습니다!"로 바뀌어 알려 줍니다. 복사된 문자열은 정규 CSS Color 4 구문(`oklch(0.629 0.193 263.4)`)이며, Tailwind v4 `@theme` 블록이나 shadcn/ui CSS 변수 정의에 그대로 떨어뜨릴 수 있습니다. 플랫폼별 출력(CSS 사용자 정의 속성, Tailwind v4 토큰, SwiftUI, Compose, Flutter)은 피커 아래의 코드로 복사 섹션을 사용하십시오. 해당 스니펫은 각 플랫폼이 네이티브로 기대하는 형식을 내보냅니다.

  4. 4

    Display P3 / Rec2020 색역 배지 확인

    세 색역 배지(sRGB, Display P3, Rec2020)는 현재 색상이 각 공간의 재현 가능 범위 안에 들어가는지를 보여 줍니다. sRGB 배지가 빨갛게 켜지지만 P3가 초록이라면, 그 색상은 Apple 하드웨어(2017년 이후의 iPhone, iPad, MacBook)에서는 채도를 살려 렌더링되지만 레거시 24비트 모니터에서는 채도가 떨어지는 광색역 OKLCH입니다. **Snap to sRGB** 버튼은 이진 채도 축소(CSS Color 4 §13 정보 알고리즘)를 사용해 L과 H를 보존한 채 색상을 sRGB로 줄여 줍니다. `@supports not (color: oklch(0 0 0))`를 통해 배포할 수 있는 HEX 폴백이 만들어집니다.

  5. 5

    함께 표시되는 형식: RGB, HSL, OKLAB, HSV, HWB, CMYK, 이름 있는 색상

    붙여넣은 동일한 HEX가 다른 여덟 형식 입력란도 함께 채웁니다. canvas 호출과 하드웨어용 RGB, 레거시 CSS 변수용 HSL, 팔레트 수학과 색각 이상 행렬용 OKLAB, 디자이너 색상 피커 작업 흐름용 HSV와 HWB, 인쇄 견적용 CMYK, 그리고 문서 산문용 가장 가까운 CSS 이름 있는 색상까지. HEX → OKLCH 한 방향에 묶이지 않습니다. 피커(SL 정사각형 + 색조 슬라이더 + 알파 슬라이더)가 아홉 개를 동시에 구동하며, Chromium 브라우저에서는 EyeDropper 버튼이 브라우저 바깥을 포함한 화면 어디든 픽셀을 샘플링합니다.

자주 발생하는 HEX / OKLCH 실수

OKLCH 채도를 HSL 채도처럼 읽기

OKLCH의 Chroma는 한계가 없습니다(sRGB에 들어맞는 색상의 경우 0부터 약 0.4까지, 광색역의 경우 더 높음) — HSL의 S 같은 0-100% 채도 백분율이 아닙니다. C=0.3이 "30% 채도"를 뜻한다고 가정하는 것은 척도를 잘못 읽는 일입니다. 0.3은 매우 채도가 높으며, 어떤 색조에서는 sRGB 천장에 가깝고 다른 색조에서는 한참 그것을 지나갑니다. 최대 C는 L과 H에 따라 달라집니다. L=0.7의 초록은 L=0.3의 파랑보다 훨씬 높은 C를 지원합니다. C를 상대 백분율이 아니라 회색으로부터의 절대 거리로 다루십시오.

✗ 오류
OKLCH C = 0.3을 "30% 채도"로 기대하며 설정:
oklch(0.7 0.3 250) → 파랑에 대해서는 sRGB 색역을 벗어날 수 있음
광색역 색상이 레거시 디스플레이에서 채도가 떨어져 렌더링됨.
✓ 정상
C를 절대 채도로 다루고 색역 배지 확인:
oklch(0.7 0.15 250) → 이 L+H 쌍에서 sRGB에 편안하게 들어맞음
배지를 사용해 타깃 색역에 들어맞는 최대 C를 찾으십시오.

OKLCH L을 HSL L과 동일하게 다루기

두 공간 모두 명도를 0-1(또는 0-100%) 축으로 보고하지만, 측정하는 것이 다릅니다. HSL L은 기하학적입니다. 감마 인코딩된 sRGB의 RGB 최대/최소 평균에서 도출됩니다. OKLCH L은 지각적입니다. OKLAB 모델에 고정됩니다. HSL 기반 팔레트를 `oklch(L%, C, H)`로 이식하면서 일치하는 밝기를 기대하면, 두 공간 사이의 L 관계가 비선형이기 때문에 균일하지 않은 결과가 나옵니다. 중간 톤 색상의 경우 OKLCH L = 0.6은 대략 HSL L = 50%이지만, 그 곡선은 어두운 끝과 밝은 끝에서 드리프트합니다.

✗ 오류
HSL L 백분율을 OKLCH에 직접 복사:
hsl(220 50% 30%)을 oklch(0.30 0.10 220)으로 이식
두 색상이 밝기에서 눈에 띄게 다르게 보임.
✓ 정상
HSL을 이식하지 말고 원본 HEX에서 OKLCH 재도출:
HEX 원본 → OKLCH 변환 → oklch(0.34 0.08 254)
지각 L이 정확하게 유지되고 팔레트가 균일하게 느껴짐.

광색역 OKLCH가 sRGB에서 표시되지 않는다는 것을 잊기

OKLCH는 한계가 없습니다. `oklch(0.7 0.4 30)`을 작성할 수 있고 구문은 유효하지만, 채도가 sRGB의 채널당 256 바이트 공간이 인코딩할 수 있는 한계를 초과합니다. sRGB 모니터에서는 그 색상이 가장 가까운 색역 내 근사(보통 채도가 떨어진 버전)로 클립됩니다. Display P3 모니터에서는 올바르게 렌더링됩니다. 색역 배지를 확인하지 않고 광색역 OKLCH를 배포하면 디스플레이에 따라 다르게 보이는 색상이 만들어집니다. 미묘하지만 실재하는 크로스 플랫폼 일관성 버그입니다.

✗ 오류
sRGB 색역을 확인하지 않고 oklch(0.7 0.4 30) 배포:
P3 디스플레이는 채도가 살아 있는 빨강으로 렌더링하고, sRGB 디스플레이는 채도가 떨어진 채로 렌더링
사용자 하드웨어에 따라 브랜드 색상이 일관되지 않게 보임.
✓ 정상
sRGB 색역 배지 확인, 필요하면 Snap to sRGB, @supports로 계층화:
@supports (color: oklch(0 0 0)) { --primary: oklch(0.7 0.4 30); }
@supports not (color: oklch(0 0 0)) { --primary: #ef6b50; }
P3 하드웨어는 광색역 값을 받고, sRGB 하드웨어는 스냅된 폴백을 받음.

oklch()에 대한 브라우저 지원 누락

네이티브 `oklch()` 파싱은 Chrome과 Edge 111(2023년 3월), Safari 15.4(2022년 3월), Firefox 113(2023년 5월)에 도착했습니다. caniuse 결합 커버리지는 94% 이상이지만, 나머지 6%에는 IE 11, iOS 15.3 이전의 구형 Safari, 구형 Android Chrome, 그리고 임베디드 웹뷰가 포함됩니다. 폴백 없이 `oklch()`를 그 긴 꼬리에 배포하면 CSS `inherit` 값으로 렌더링되거나 완전히 실패합니다. 넓은 청중을 가진 운영 사이트에서는 항상 `@supports`로 기능 감지를 하십시오.

✗ 오류
브랜드 색상을 OKLCH로만 정의:
:root { --primary: oklch(0.629 0.193 263.4); }
IE 11과 구형 iOS Safari가 색상을 전혀 렌더링하지 않음.
✓ 정상
우아한 폴백을 위해 @supports로 계층화:
:root { --primary: #3b82f6; }
@supports (color: oklch(0 0 0)) { :root { --primary: oklch(0.629 0.193 263.4); } }
최신 브라우저는 OKLCH를, 레거시 브라우저는 HEX 폴백을 받음.

OKLCH와 LCH(CIE-LAB 극형식) 혼동

CSS Color 4는 `oklch()`와 `lch()` 둘 다 탑재합니다. 모양은 동일해 보이지만(L / C / H) 기반 공간이 다릅니다. `lch()`는 CIE-LAB(1976)의 극형식이고, `oklch()`는 OKLAB(Ottosson 2020)의 극형식입니다. 둘은 호환되지 않습니다. `lch(60% 50 240)`과 `oklch(0.6 0.15 240)`은 서로 다른 색상을 기술합니다. CIE-LAB의 지각 균일성은 채도가 높은 파랑 부근에서 깨지며, Ottosson이 OKLAB을 다시 도출한 이유가 바로 그것입니다. 새 디자인 시스템 작업에는 `lch()`보다 `oklch()`를 선호하십시오.

✗ 오류
동일한 결과를 기대하며 lch()를 oklch()로 대체:
lch(60% 50 240) ≠ oklch(0.6 0.15 240) — 전혀 다른 색상
공간 사이에 복사·붙여넣기를 하면 값이 조용히 잘못됨.
✓ 정상
한 공간을 선택하고 그 안에 머무르십시오:
최신 디자인 시스템에는 oklch(0.629 0.193 263.4)
또는 lch(60% 50 240) — 단, 재변환 없이 함수 이름을 바꾸지 말 것

누가 HEX OKLCH를 사용하나요

Tailwind v4 OKLCH 토큰으로 이주하는 프런트엔드 개발자
Tailwind v4는 2025년 1월 기본 팔레트의 정규 형식으로 OKLCH를 표준화했습니다. HEX 기반 브랜드 색상을 가진 v3 코드베이스를 이주한다는 것은 각 HEX를 OKLCH로 변환해 새 `@theme` 블록에 떨어뜨리는 일을 뜻합니다. 여기에 각 HEX를 붙여넣고, `oklch()` 값을 복사하고, `--color-primary: oklch(0.629 0.193 263.4)` 등을 정의하십시오. 실시간 색역 배지가 sRGB를 벗어나는 색상을 표시해 주므로, Display P3 사용자를 위해 광색역 값을 유지할지 sRGB로 스냅할지 결정할 수 있습니다.
사용자 정의 팔레트를 구축하는 shadcn/ui 테마 작성자
shadcn/ui의 CSS 변수 테마는 모든 토큰(`--background`, `--foreground`, `--primary` 등)에 OKLCH를 사용합니다. 사용자 정의 테마는 기본 브랜드 HEX를 OKLCH로 변환한 뒤 라이트/다크 변형용으로 L을 회전시켜 도출합니다. 브랜드 HEX를 붙여넣고, OKLCH 트리플을 읽고, C와 H를 고정한 채 L을 단계적으로 움직여 나머지 테마를 구축하십시오. 정규 shadcn 작업 흐름과 정확히 일치합니다.
지각적으로 균일한 램프를 생성하는 디자인 시스템 작성자
C와 H를 고정한 채 L 채널을 동일한 OKLCH 증분으로 움직여 50/100/200/.../900 램프를 생성하십시오. 인접한 단계 사이의 시각적 간격이 모든 색조에 걸쳐 동일해 보이며, 이는 브랜드 색상 팔레트가 실제로 필요로 하는 속성입니다. Tailwind v4는 기본 팔레트에 정확히 이 구성을 사용하며, shadcn/ui도 이를 반영합니다. 각 브랜드 HEX를 붙여넣고, OKLCH를 읽고, 알고리즘적으로 또는 피커 아래의 틴트/셰이드/톤 패널을 통해 램프를 생성하십시오.
OKLCH 공간에서 명암비를 검증하는 접근성 엔지니어
WCAG 2.1과 APCA 명암비 모두 OKLCH 트리플이 아닌 해석된 sRGB 색상에 대해 보고하지만, 브랜드 색상의 OKLCH L을 아는 것은 명암비 튜닝을 예측 가능하게 만들어 줍니다. L을 0.1 올려 흰색 대비 AA를 통과시키고, L을 0.1 낮춰 검은색 대비 AA를 통과시키는 식입니다. OKLCH + WCAG + APCA 동시 뷰가 그 관계를 보이게 만들어 줍니다. 브랜드 HEX를 붙여넣고, 명암비 배지를 지켜보고, OKLCH에서 L을 조정해(HSL보다 더 예측 가능합니다) 쌍이 두 지표 모두를 통과할 때까지 진행하십시오.
최신 디스플레이용 광색역 색상 토큰을 구축하는 웹 개발자
2017년 이후 대부분의 Apple 기기(그리고 많은 최신 Android 기기)는 Display P3를 네이티브로 렌더링합니다. OKLCH로 브랜드 강조 색상을 정의하면 어떤 HEX 코드로도 인코딩할 수 없는 P3 전용 채도가 높은 빨강과 초록을 가리킬 수 있습니다. 기존 HEX를 붙여넣어 OKLCH를 읽고, sRGB 천장 위로 C 채널을 밀어 올려 추가 P3 채도를 청구하십시오. 색역 배지가 새 값이 P3에 들어맞음을 확인해 줍니다(그리고 브라우저 채도 압축을 통해 sRGB 전용 화면에서 우아하게 폴백됩니다).
지각 명도와 기하학적 명도를 가르치는 교육자
OKLCH + HSL 동시 뷰는 지각 명도와 기하학적 명도의 차이를 명확하게 만듭니다. 동일한 HSL L=50%에서 채도가 높은 초록과 채도가 높은 파랑을 붙여넣으십시오. OKLCH L 값이 눈에 띄게 다르며, OKLCH가 실제 지각 밝기를 측정하기 때문입니다. HSL 색조 슬라이더를 드래그하고 HSL L을 고정한 채 OKLCH L이 흔들리는 것을 지켜보십시오. 그 곡선이 시각화된 감마 특이성입니다. 디자인 시스템이 왜 OKLCH로 이주했는지에 대한 교실 준비 시연입니다.
토큰 문서를 현대화하는 오픈 소스 유지보수자
구형 디자인 시스템 문서는 보통 브랜드 색상을 HEX 코드로만 나열합니다. OKLCH로 현대화한다는 것은 동일한 색상을 두 공간 모두에 보여 준다는 뜻입니다. 코드 블록 호환성을 위한 HEX, 명세 표와 최신 토큰 정의를 위한 OKLCH. 각 HEX를 붙여넣고, OKLCH 출력을 복사하고, 문서를 업데이트하십시오. 공유 가능한 URL 해시는 또한 기여자가 GitHub 이슈에서 논의 중인 정확한 색상을 모호함 없이 연결할 수 있게 해 줍니다.

HEX OKLCH 수학과 파이프라인

HEX → OKLCH는 7단계 파이프라인
변환은 다섯 개의 중간 표현을 거칩니다. HEX → 정수 sRGB → 정규화 sRGB(0-1) → 선형 sRGB(감마 디코딩) → CIE XYZ D65 → OKLAB → OKLCH. 각 단계는 1차 출처에서 정의된 행렬 또는 조각별 함수입니다. 본 도구는 키 입력마다 전체 파이프라인을 실행합니다. 디바운싱이 필요 없을 만큼(마이크로초 단위) 수학이 충분히 빠릅니다. OKLCH와 함께 중간 RGB 튜플을 노출한다는 것은 RGB 채널을 검사해 예상치 못한 OKLCH 값을 디버깅할 수 있다는 뜻입니다.
CSS Color 4 §11.2 감마 함수
sRGB → 선형 sRGB 변환은 CSS Color 4 §11.2 조각별 함수를 사용합니다: `v ≤ 0.04045 ? v/12.92 : ((v + 0.055) / 1.055)^2.4`. 조각별 형태(0 근처의 작은 선형 구간 포함)는 매우 어두운 색상에서 순수 지수 형태의 수치 불안정성을 피해 줍니다. ICC 프로필이 sRGB를 인코딩할 때 사용하는 동일한 함수이며, HEX 코드를 렌더링할 때 브라우저가 내부적으로 사용하는 동일한 함수입니다. OKLCH → HEX의 역변환은 동일한 함수를 거꾸로 적용합니다: `v ≤ 0.0031308 ? v * 12.92 : 1.055 * v^(1/2.4) - 0.055`.
CSS Color 4 §15.1 행렬: 선형 sRGB ↔ XYZ D65
CSS Color 4 §15.1의 행렬은 선형 sRGB를 D65 백점 하의 CIE XYZ로 변환합니다: `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`. Y 행이 sRGB 휘도 공식을 제공합니다. 이 행렬은 ICC, Adobe Color Engine, 그리고 LCMS 오픈 소스 파이프라인을 포함한 모든 색상 관리 라이브러리가 사용하는 동일한 행렬입니다. OKLCH → HEX용 역행렬은 §15.1 역행렬을 적용합니다.
Ottosson 2020 OKLAB 행렬과 세제곱근 단계
XYZ D65 → OKLAB 변환은 Björn Ottosson의 2020년 OKLAB 논문에 공개된 두 행렬과 세제곱근 단계를 사용합니다. 첫 번째 행렬은 XYZ를 LMS 원추 응답 공간(사람의 L/M/S 원추 감도를 느슨하게 모델링)으로 변환합니다. 각 채널의 세제곱근을 취해 동적 범위를 비선형적으로 압축합니다(지각 균일성을 보정하는 단계). 두 번째 행렬은 세제곱근을 취한 LMS를 OKLAB의 L/a/b 좌표로 변환합니다. 세 연산 모두 논문의 레퍼런스 구현에 공개된 정확한 값을 사용합니다. 재도출이나 반올림이 없습니다. OKLCH → HEX의 역변환은 이 행렬들을 거꾸로 적용합니다.
OKLAB ↔ OKLCH는 직교 → 극좌표 변환
OKLAB의 `a`와 `b` 축은 L 축에 수직인 채도(chroma, OKLCH C 채널) 평면을 이룹니다. OKLCH는 그 평면을 극좌표로 인코딩합니다: `C = sqrt(a² + b²)`(회색으로부터의 유클리드 거리), `H = atan2(b, a) * 180 / π`(0-360°로 감긴 각도). 역변환: `a = C * cos(H * π / 180)`, `b = C * sin(H * π / 180)`. 극형식이 디자인 토큰 저장에 OKLAB보다 선호되는 이유는 색조가 안정적인 축이기 때문입니다. 색조를 회전해도 OKLAB에서 `a`나 `b`를 회전할 때처럼 실수로 회색을 통과해 크로스페이드되는 일이 없습니다.
채널 범위 검사를 통한 색역 감지
한 색상은 그 공간의 원색으로 변환된 후 모든 채널이 `[-ε, 1 + ε]` 안에 들어갈 때 타깃 공간(sRGB, Display P3, Rec2020)에 대해 색역 내로 간주됩니다. 여기서 `ε = 1e-7`은 경계 부근의 부동소수점 정밀도 잡음을 흡수합니다. 어떤 채널이든 범위를 벗어나면 각 공간의 색역 배지가 빨갛게 변합니다. OKLCH는 색역에 한계가 없습니다. `oklch(0.7 0.4 30)`은 유효한 좌표이지만 sRGB의 채널당 256 바이트 공간을 초과할 수 있습니다. 검사는 키 입력마다 실행됩니다. Snap to sRGB와 결합되어, 가장 흔한 도입 함정(레거시 화면에서 올바르게 표시되지 않는 광색역 OKLCH)을 잡아 줍니다.
Snap to sRGB 이진 채도 축소
Snap to sRGB는 CSS Color 4 §13의 정보 색역 매핑 알고리즘과 일치합니다. L과 H를 현재 값에 고정한 채, C ∈ [0, currentC]에서 sRGB 변환이 색역 안에 머무는 가장 큰 C를 이진 탐색합니다. 탐색은 최대 30회 반복(정밀도 약 10⁻⁹)으로 실행되며, 시각적 정확성을 위해서는 충분히 많습니다. L과 H 보존은 스냅된 색상이 동일한 색조 가족, 동일한 밝기로 읽힌다는 뜻입니다. 채도만 잃을 뿐입니다. RGB 채널을 직접 클립하지 않는 이유는 그것이 색조를 눈에 띄게 왜곡하기 때문입니다(특히 파랑이 보라 쪽으로 클립됩니다).

HEX / OKLCH 작업 모범 사례

새 코드에서 정규 토큰 형식으로 OKLCH 사용
2025년 이후 출시되는 디자인 시스템에서는 브랜드 색상과 팔레트 램프를 OKLCH로 정의하십시오. L 축이 자동으로 지각적으로 균일한 램프를 만들어 주며, Chroma 축은 HEX가 인코딩할 수 없는 광색역 색상을 가리킬 수 있습니다. 구형 브라우저용으로 `@supports not (color: oklch(0 0 0))`나 빌드 타임 PostCSS를 통해 HEX 폴백을 유지하되, 토큰 저장소에서는 OKLCH를 단일 사실 출처로 만드십시오. Tailwind v4와 shadcn/ui 모두 이 방식으로 출시되며, 새 프로젝트도 마찰 없이 이를 따를 수 있습니다.
C와 H를 고정한 채 L을 움직여 램프 생성
정규 OKLCH 램프 구성: C와 H를 잠그고 L을 동일한 증분으로 휩쓰십시오. L = 0.1, 0.2, …, 0.9에 대한 9단계 램프 `oklch(L 0.15 263)`은 모든 단계에 걸쳐 시각적으로 균일한 간격을 만들어 냅니다. Tailwind v4가 내부적으로 정확히 이렇게 합니다. 램프의 채도 강도를 의도적으로 변화시키고 싶지 않다면(드뭅니다) L과 함께 C를 휩쓸지 마십시오. 5°의 드리프트만 있어도 램프가 뒤죽박죽으로 느껴지므로 단계 사이에서 H를 흘리지 마십시오.
Tailwind v4 정밀도 일치: L+C 셋째 자리, H 첫째 자리
Tailwind v4의 기본 팔레트는 L과 C에 소수점 셋째 자리, H에 소수점 첫째 자리로 OKLCH 값을 공개합니다 — blue-500에 대해 `oklch(0.629 0.193 263.4)`. 자신의 토큰에서 이 정밀도와 일치시킨다는 것은 설정 붙여넣기 작업 흐름이 Tailwind가 배포하는 값과 동일한 값을 만들어 낸다는 뜻이며, diff 도구가 거짓 차이를 표시하지 않는다는 뜻입니다. 본 도구의 기본 반올림은 이 관례를 따릅니다. `@theme` 블록에 복사·붙여넣기 하면 비트 단위로 정확합니다.
광색역 OKLCH를 Display P3 색역 검사로 실행
최신 Apple 하드웨어(2017년 이후의 iPhone, iPad, MacBook)를 타기팅하거나 HDR 인식 콘텐츠를 배포한다면, 색역 배지는 sRGB 천장 위로 C를 밀어 추가 P3 채도를 청구할 수 있게 해 줍니다. 브라우저가 적용하는 채도 압축이 sRGB 전용 화면에서 색상이 클립되지 않게 막아 줍니다. 청중 전체가 레거시 디스플레이에 있다는 것을 알지 못한다면 기본적으로 미리 sRGB로 스냅하지 마십시오. 그것은 P3 하드웨어가 렌더링할 수 있는 채도의 30% 이상을 잃는 일입니다.
2023년 이전 브라우저용으로 @supports를 통해 HEX 폴백 제공
`oklch()`의 에버그린 브라우저 지원이 이제 94% 이상이지만, 긴 꼬리(IE 11, 구형 Android Chrome, 임베디드 웹뷰)는 여전히 폴백을 필요로 합니다. 토큰을 `@supports (color: oklch(0 0 0))`로 감싸고 대안 브랜치에 HEX 변형을 제공하십시오. Snap to sRGB 출력이 정확히 그 폴백이며, L과 H를 보존한 채 현재 OKLCH 트리플로부터 자동으로 생성됩니다. `postcss-oklab-function` 같은 빌드 타임 PostCSS 플러그인도 컴파일 시점에 sRGB 근사를 인라인으로 끼워 넣을 수 있습니다.
토큰에 OKLCH와 원본 HEX 모두 문서화
`--color-primary: oklch(0.629 0.193 263.4)` 같은 CSS 변수를 배포할 때, 원본 HEX와 함께 주석을 포함하십시오: `/* source: #3b82f6 (Tailwind blue-500) */`. 6개월 후 누군가 관련 셰이드를 도출하거나 브랜드 가이드라인 PDF에 대해 값을 확인해야 할 때, 원본 HEX가 완전한 출처 추적을 보존해 줍니다. OKLCH 단독으로도 의미가 있지만 눈으로 알아보기가 더 어렵습니다. 원본 HEX가 대부분의 동료가 가장 먼저 찾는 식별자입니다.
실시간 색상 결정 공유에 URL 해시 사용
모든 색상 변경은 URL 해시를 `#hex=3b82f6` 또는 `#oklch=...` 형태로 자동 업데이트합니다. URL을 Slack 스레드나 GitHub 이슈에 복사하면, 그것을 여는 모든 사람이 동일한 OKLCH 트리플의 동일한 색상에 도달합니다. 채팅에 OKLCH 문자열을 붙여넣는 것보다 더 안정적이며(수신자가 가끔 소수점을 잘못 입력하거나 잘못된 정밀도로 감쌉니다), 디자인 리뷰 스레드가 "화요일에 논의한 그 브랜드 파랑"이 아니라 정확한 색상을 참조할 수 있게 해 줍니다. 해시는 서버로 전송되지 않습니다.

자주 묻는 질문

OKLCH 색상이란 무엇인가요?
OKLCH는 Björn Ottosson이 2020년 발표한 지각적으로 균일한 색 공간 OKLAB의 극형식입니다. 채널은 Lightness(0-1, 0-100%로도 표기 가능), Chroma(0부터 색조와 L에 따라 약 0.4까지, 위로는 한계 없음), 그리고 Hue(0-360°, 개념적으로 HSL의 색조와 동일)입니다. CIE-LAB에서 LMS 원추 응답 단계를 거쳐 세제곱근 단계로 도출됩니다. CSS Color 4가 2022년에 `oklch()` 구문을 추가했습니다. Tailwind v4는 2025년 기본 팔레트의 정규 형식으로 OKLCH를 표준화했습니다. 예: `oklch(0.629 0.193 263.4)`는 Tailwind blue-500입니다.
OKLCH가 HSL보다 더 좋은가요?
디자인 시스템 관점에서는 그렇습니다. HSL의 L(명도)은 기하학적입니다. RGB 최대와 최소의 평균에서 도출되며 sRGB의 감마 곡선을 물려받기 때문에, `hsl(60 100% 50%)`(노랑)이 `hsl(240 100% 50%)`(파랑)보다 시각적으로 더 밝아 보이며 둘 다 L=50%로 보고함에도 그렇습니다. OKLCH의 L은 지각적이며 Ottosson 2020 OKLAB 모델에 고정되어 있습니다. 실질적인 결론은, 균일한 L의 OKLCH 램프가 모든 색조에 걸쳐 시각적으로 균일하게 보이는 반면 HSL 램프는 균일해 보이려면 색조별 수작업 보정이 필요하다는 점입니다. Tailwind v4가 기본 팔레트를 HSL 기반에서 OKLCH 기반 생성으로 이주한 이유가 바로 이것입니다.
어떤 브라우저가 oklch()를 지원하나요?
2023년 중반 시점에 모든 에버그린 브라우저: Chrome과 Edge 111(2023년 3월), Safari 15.4(2022년 3월, 가장 이른 도착), Firefox 113(2023년 5월). caniuse 결합 커버리지는 94%를 넘습니다. 긴 꼬리(IE 11, 구형 Safari, 레거시 하드웨어의 Android Chrome)에는 토큰을 `@supports (color: oklch(0 0 0))`로 감싸고 대안 브랜치에 HEX 또는 `hsl()` 폴백을 제공하십시오. PostCSS `postcss-oklab-function` 같은 빌드 타임 도구도 컴파일 시점에 OKLCH 값 옆에 sRGB 근사를 인라인으로 끼워 넣을 수 있습니다.
Tailwind v4에서 OKLCH를 쓰는 이유는 무엇인가요?
Tailwind v4(2025년 1월 출시)는 기본 팔레트를 HSL 기반에서 OKLCH 기반 생성으로 옮겼는데, 그 이유는 OKLCH가 지각적으로 균일한 램프를 자동으로 만들어 주기 때문입니다. v3의 HSL 시스템에서는 `red-500`과 `blue-500`이 동일한 HSL L%에도 불구하고 시각적으로 다른 지각 가중치를 가졌고, 이로 인해 디자이너가 개별 단계를 수작업으로 보정해야 했습니다. v4에서는 둘 모두 동일한 OKLCH L에 자리하기 때문에 균형이 잡혀 보입니다. OKLCH는 또한 어떤 HEX 코드로도 인코딩할 수 없는 Display P3 광색역 색상을 열어 줍니다. `oklch(0.65 0.25 30)` 같은 Tailwind v4 토큰은 sRGB를 벗어나는 P3 빨강을 가리킬 수 있습니다. 빌드는 구형 브라우저를 위해 여전히 HEX 폴백을 내보냅니다.
OKLCH는 지각적으로 균일한가요?
네. 그것이 설계 의도입니다. OKLCH는 Björn Ottosson의 2020년 색 공간 OKLAB으로부터 지각 균일성을 물려받으며, OKLAB은 CIE-LAB(그 이전의 가장 우수한 지각 균일 공간)의 비균일성을 고치기 위해 설계되었습니다. L 채널의 고정된 단계는 고정된 지각 밝기 단계에 대응합니다. C의 고정된 단계는 고정된 지각 채도(chroma, OKLCH C 채널) 단계에 대응합니다. CIELAB 근사는 매우 채도가 높은 색상 부근에서 깨지지만, OKLAB과 그 극형식 OKLCH는 색역 전반에 걸쳐 정확함을 유지합니다. 모든 최신 디자인 시스템 도구(Tailwind v4, shadcn/ui, Radix Colors v3)가 이를 표준화한 이유입니다.
OKLCH 값은 어떻게 읽나요?
`oklch(L C H)` — 세 숫자이며, 알파를 위해 `/ A`를 선택적으로 붙입니다. L은 Lightness로 0(검정)부터 1(흰색)까지입니다. 숫자형과 백분율형이 동등합니다(`0.6`과 `60%`). C는 Chroma로 0(회색)부터 가장 채도가 높은 sRGB 색상의 경우 약 0.4까지입니다. 단단한 상한은 없으며 광색역 색상은 이를 초과할 수 있습니다. H는 Hue로 0부터 360까지의 각도이며 HSL과 동일합니다(0/360 = 빨강, 120 = 초록, 240 = 파랑). 예: `oklch(0.629 0.193 263.4)`은 Tailwind blue-500입니다. 밝고, 매우 채도가 높으며, 파랑 호에 자리합니다.
OKLCH와 LCH의 차이는 무엇인가요?
둘 다 CIE-LAB 계열 색 공간의 극형식(Lightness / Chroma / Hue)입니다. LCH는 1976년 지각 균일 공간 CIE-LAB의 극형식이고, OKLCH는 Ottosson의 2020년 업데이트 OKLAB의 극형식입니다. 차이점: CIE-LAB의 지각 균일성은 매우 채도가 높은 파랑과 보라 부근에서 깨지므로(모델의 문서화된 약점), 채도가 높은 색상을 가로지르는 LCH 램프는 미묘하게 균일하지 않게 보입니다. OKLAB은 수정된 LMS 원추 응답 단계로부터 행렬을 다시 도출해 이를 고칩니다. 둘 다 CSS Color 4에 탑재됩니다(`lch()`와 `oklch()` 구문). 2025년 새 디자인 시스템 작업에는 OKLCH를 선호하십시오.
HEX를 OKLCH로 어떻게 변환하나요?
파이프라인은 다음과 같습니다. `parseInt(hex, 16)`을 통해 HEX `#RRGGBB`를 정수 sRGB 채널로 파싱하고, 0-1로 정규화하고, CSS Color 4 §11.2 조각별 함수를 통해 선형 sRGB로 감마 디코딩하고, §15.1 행렬을 곱해 CIE XYZ D65를 얻고, Ottosson의 LMS 행렬을 곱한 뒤 각 채널의 세제곱근을 취하고, Ottosson의 OKLAB 행렬을 곱해 L/a/b를 얻고, 직교 좌표를 극좌표로 변환합니다: `C = sqrt(a² + b²); H = atan2(b, a) * 180 / π`. 전체 파이프라인은 마이크로초 단위로 실행됩니다. 본 도구는 입력하는 동안 이를 실시간으로 실행합니다. `#3b82f6`은 즉시 `oklch(0.629 0.193 263.4)`로 떨어집니다.