본문으로 바로가기

색상 변환기 & 명도 대비 검사기

색상 코드를 HEX·RGB·HSL·HWB·LAB·LCH·OKLCH로 한꺼번에 바꾸고, 글자색과 배경색의 WCAG 명도 대비가 AA·AAA 기준을 통과하는지 확인합니다.

모든 형식

  • HEX#3366ff
  • RGBrgb(51, 102, 255)
  • HSLhsl(225, 100%, 60%)
  • HWBhwb(225 20% 0%)
  • LABlab(47.4 26.93 -82.47)
  • LCHlch(47.4 86.76 288.08)
  • OKLCHoklch(0.5726 0.2338 265.28)

명도 대비 검사

명도 대비14.67:1
AA · 일반 텍스트 (4.5:1)
✓ 통과
AA · 큰 텍스트 (3:1)
✓ 통과
AAA · 일반 텍스트 (7:1)
✓ 통과
AAA · 큰 텍스트 (4.5:1)
✓ 통과

큰 텍스트 미리보기 (Aa)

일반 텍스트로 대비를 확인하는 예시 문장입니다.

입력한 내용은 이 브라우저 안에서만 처리되며 서버로 전송되지 않습니다. 어떻게 동작하나요?

동일한 초록색을 HEX #47765F와 RGB 71, 118, 95로 나타내는 색상 변환

사용 방법

화면은 위쪽의 색상 변환기와 아래쪽의 명도 대비 검사로 나뉘고, 둘은 서로 영향을 주지 않습니다.

색상 변환기

  1. 색상 칸에 CSS 색상 값을 넣거나 왼쪽의 색상 선택기로 고릅니다. HEX는 3·4·6·8자리를 모두 읽고 #을 빼도 됩니다. rgb(51, 102, 255)와 rgb(51 102 255) 두 가지 쓰기 방식, rebeccapurple 같은 색 이름도 읽습니다.
  2. 색상 견본 옆의 알파(불투명도) 슬라이더로 투명도를 바꿉니다. 견본 뒤의 체크무늬가 비치는 정도로 확인할 수 있습니다.
  3. 모든 형식에 HEX, RGB, HSL, HWB, LAB, LCH, OKLCH 일곱 줄이 나오고 줄마다 복사할 수 있습니다. 알파가 100%보다 낮으면 8자리로 적은 “HEX (알파 포함)” 줄이 하나 더 생깁니다.

명도 대비 검사

  1. 글자색과 배경색을 넣습니다. “색상 바꾸기”를 누르면 둘이 뒤바뀝니다.
  2. 명도 대비에 비율이 나오고, 그 아래 네 칸에 기준별로 “통과” 또는 “실패”가 표시됩니다.
  3. 맨 아래 미리보기에서 두 색을 큰 글자와 보통 글자로 확인합니다.

한 가지 색, 일곱 가지 표기

처음 들어 있는 #3366ff는 이렇게 바뀝니다.

형식 결과 숫자의 뜻
HEX #3366ff 빨강·초록·파랑을 두 자리 16진수로
RGB rgb(51, 102, 255) 빨강·초록·파랑을 0 ~ 255로
HSL hsl(225, 100%, 60%) 색상각, 채도, 명도
HWB hwb(225 20% 0%) 색상각, 섞은 흰색의 양, 섞은 검정의 양
LAB lab(47.4 26.93 -82.47) 명도, 초록-빨강 축, 파랑-노랑 축
LCH lch(47.4 86.76 288.08) 명도, 채도, 색상각
OKLCH oklch(0.5726 0.2338 265.28) 명도, 채도, 색상각

HEX와 RGB는 같은 숫자를 다른 진법으로 적은 것이고, HSL과 HWB는 그 숫자를 사람이 다루기 쉬운 축으로 다시 나눈 것입니다. LAB·LCH·OKLCH는 사람이 색을 느끼는 방식에 맞춰 만든 색공간이며, OKLCH는 LCH를 지각적으로 더 균일하게 다듬은 것으로 CSS에서 oklch()로 바로 쓸 수 있습니다. 같은 파란색인데 색상각이 HSL에서는 225, LCH에서는 288.08, OKLCH에서는 265.28로 서로 다릅니다. 색공간마다 각도의 기준이 다르기 때문이며, 한 형식의 숫자를 다른 형식에 옮겨 적으면 다른 색이 됩니다.

HSL의 명도와 OKLCH의 명도

HSL의 명도는 빨강·초록·파랑 가운데 가장 큰 값과 가장 작은 값의 평균이라 눈에 보이는 밝기와 잘 맞지 않습니다. 순수한 노랑 hsl(60 100% 50%)와 순수한 파랑 hsl(240 100% 50%)는 HSL 명도가 똑같이 50%입니다. 이 둘을 변환기에 넣으면 다음과 같습니다.

  • 노랑은 oklch(0.968 0.211 109.77)로, OKLCH 명도가 0.968입니다.
  • 파랑은 oklch(0.452 0.3132 264.05)로, OKLCH 명도가 0.452입니다.

흰 배경 위에서 재 보면 차이가 그대로 드러납니다. 명도 대비 검사에서 배경색을 #ffffff로 두면 노랑 #ffff00은 1.07:1로 거의 보이지 않고, 파랑 #0000ff는 8.59:1입니다. 색상만 다르고 밝기가 비슷한 색 묶음을 만들 때는 HSL 명도가 아니라 OKLCH 명도를 맞추는 편이 결과가 고릅니다.

WCAG 명도 대비는 이렇게 계산합니다

WCAG 2의 공식을 씁니다. 각 색의 상대 휘도(relative luminance, 선형으로 바꾼 빨강·초록·파랑 값에 가중치를 곱해 더한 값)를 구하고, 밝은 쪽을 L1, 어두운 쪽을 L2로 두어 (L1 + 0.05) ÷ (L2 + 0.05)를 계산합니다. 두 색이 같으면 1:1, 검정과 흰색이면 21:1입니다.

화면의 기준 필요한 비율
AA · 일반 텍스트 4.5:1
AA · 큰 텍스트 3:1
AAA · 일반 텍스트 7:1
AAA · 큰 텍스트 4.5:1

“큰 텍스트”는 보통 굵기로 18pt(약 24px) 이상이거나 굵은 글씨로 14pt(약 19px) 이상인 글자입니다. AA는 대부분의 접근성 지침이 요구하는 수준이고 AAA는 그보다 엄격한 수준입니다.

  • 처음 들어 있는 글자색 #1f2937, 배경색 #ffffff는 14.67:1로 네 기준을 모두 통과합니다.
  • 회색 #767676은 흰 배경에서 4.54:1로 AA 일반 텍스트를 통과합니다. 한 단계 밝은 #777777은 4.47:1로 실패합니다.

화면의 비율은 소수 둘째 자리 아래를 반올림하지 않고 버립니다. 4.499:1인 조합이 4.50:1로 보이면서 실패로 표시되는 일이 없도록 한 것입니다. 통과 여부는 버리기 전의 값으로 판정합니다.

반투명한 색의 대비

WCAG 공식은 불투명한 색만 다룹니다. 그래서 알파가 있는 색은 화면에 실제로 보일 색으로 먼저 합친 뒤 계산합니다.

  • 배경색이 반투명하면 흰 바탕 위에 올린 색으로 봅니다.
  • 글자색이 반투명하면 그렇게 정해진 배경색 위에 올린 색으로 봅니다.

글자색 rgb(0 0 0 / 50%), 배경색 #ffffff는 회색 글자가 되어 3.97:1이고 AA 큰 텍스트만 통과합니다. 실제 페이지에서 반투명한 배경 뒤에 흰색이 아닌 색이나 사진이 깔려 있다면 결과가 다릅니다. 그런 경우에는 화면에 최종으로 보이는 배경색을 불투명한 값으로 넣어 재세요.

sRGB 색역을 벗어난 색

LAB·LCH·OKLCH로는 보통의 sRGB 화면이 낼 수 없는 색까지 적을 수 있습니다. oklch(70% 0.3 150)이 그런 색입니다. 이 값을 넣으면 색역 밖이라는 안내가 뜨고 결과는 다음과 같이 나옵니다.

  • HEX는 #00cb00, RGB는 rgb(0, 203, 0)입니다. 입력한 색이 아니라 sRGB 범위에 맞춰 잘라 낸 색입니다.
  • LAB·LCH·OKLCH 줄은 잘라 내지 않은 원래 색을 그대로 적습니다.
  • HSL과 HWB 줄은 HEX·RGB와 마찬가지로 잘라 낸 색을 그 형식으로 옮긴 것입니다. hsl(120, 100%, 39.84%)와 hwb(120 0% 20.32%)로 나오고, 범위를 벗어난 숫자는 나오지 않습니다.

색상 견본과 색상 선택기에 보이는 색도 잘라 낸 색입니다.

참고 자료

자주 묻는 질문

알파 슬라이더를 움직였더니 입력해 둔 값이 rgb()로 바뀌었습니다.

슬라이더는 입력 칸의 값을 알파가 들어간 rgb() 표기로 다시 씁니다. oklch(62% 0.19 259)를 넣고 슬라이더를 50%로 옮기면 입력 칸이 rgba(53, 129, 246, 0.5)가 됩니다. 원래 표기로 돌아가지 않으니, 알파가 들어간 OKLCH 값이 필요하면 슬라이더를 옮긴 뒤 "모든 형식"의 OKLCH 줄을 복사하세요. sRGB 색역 밖의 색은 이때 색역 안의 값으로 잘립니다.

#3366ff80을 넣으면 알파가 0.5로 나옵니다. 정확히 50%인가요?

8자리 HEX의 마지막 두 자리 80은 255단계 중 128이라 128 ÷ 255 = 0.50196…입니다. 정확히 50%가 아닙니다. RGB·HSL·HWB·LAB·LCH·OKLCH 줄은 모두 알파를 소수 둘째 자리까지 반올림해 0.5로 보여 줍니다. 정확히 0.5가 필요하면 rgb(51 102 255 / 50%)처럼 알파를 퍼센트나 소수로 입력하세요.

글자색과 배경색을 서로 바꾸면 명도 대비가 달라지나요?

두 색이 모두 불투명하면 같습니다. #3366ff와 #ffffff는 어느 쪽을 글자색으로 두어도 4.68:1입니다. 반투명한 색이 있으면 달라질 수 있습니다. 글자색 rgb(255 255 255 / 50%), 배경색 #000000은 5.28:1이지만, "색상 바꾸기"로 뒤집으면 반투명한 흰색 배경이 흰 바탕 위에서 그냥 흰색이 되어 21:1이 됩니다.

oklab()이나 color(display-p3 …)로 쓴 값은 왜 읽지 못하나요?

이 도구가 읽는 것은 HEX, rgb(), hsl(), hwb(), lab(), lch(), oklch(), 색 이름, transparent입니다. oklab()과 color() 함수, currentColor 같은 키워드, var()로 쓴 변수는 읽지 못하고 "색상 형식을 알아볼 수 없습니다."라는 안내가 나옵니다. OKLab 값은 같은 색을 oklch()로 바꿔 적어서 넣어야 합니다.

사용한 오픈소스: culori (MIT)

최종 수정일: