HEX·RGB·HSL 차이, 같은 색인데 표기가 다른 이유

같은 파란색인데 시안에는 #3B82F6, CSS에는 rgb(59, 130, 246), 디자인 도구에는 hsl(217, 91%, 60%)으로 적혀 있어 헷갈린 적 있으실 겁니다. 결론부터 말하면 세 값은 전부 같은 색입니다.

다른 건 색이 아니라 적는 방식입니다. 셋 다 화면이 내는 빨강·초록·파랑 빛의 세기를 가리키는데, HEX는 16진수로, RGB는 0~255 숫자로, HSL은 색상환 각도와 백분율로 옮겨 적을 뿐입니다.

요약#3B82F6 = rgb(59, 130, 246) = hsl(217, 91%, 60%) — 표기만 다른 같은 색입니다. ② HEX는 두 자리씩 끊어 16진수로 읽으면 곧바로 RGB가 됩니다. 3B는 59, 82는 130, F6은 246입니다. ③ HSL은 색상(0~360도)·채도(%)·밝기(%)라, "같은 색인데 조금 더 연하게" 같은 조정에 강합니다. ④ 8자리 HEX(#RRGGBBAA)의 마지막 두 자리는 색이 아니라 투명도입니다.

왜 한 색이 세 가지로 적혀 있을까

디자인 시안에서는 #3B82F6 하나만 받았는데, 개발자가 보낸 CSS에는 rgb(59, 130, 246)이 적혀 있는 상황이 대표적입니다. 두 값이 같은 색인지 눈으로는 확신이 서지 않습니다.

여기에 디자인 도구의 색상 패널이 hsl(217, 91%, 60%)처럼 세 번째 표기를 보여주면 더 혼란스러워집니다. "채도 91%"라는 숫자가 HEX 어디에도 안 보이기 때문입니다.

이 세 표기는 같은 색을 서로 다른 좌표계로 부르는 이름입니다. 어느 쪽이 더 정확하거나 더 최신인 것이 아니라, 쓰기 편한 상황이 다를 뿐입니다.

각 표기가 실제로 나타내는 값

HEX — 빛 세기를 16진수 두 자리씩

#3B82F6# 뒤 여섯 자리를 두 자리씩 셋으로 끊어 읽습니다. 앞에서부터 빨강(3B)·초록(82)·파랑(F6) 순서입니다.

각 두 자리는 16진수이고, 00(0)부터 FF(255)까지 256단계를 나타냅니다. 그래서 HEX가 담는 정보는 RGB와 완전히 같습니다.

#39F처럼 세 자리로 적힌 것도 자주 보입니다. 이건 각 자리를 두 번 반복한 축약형이라 #3399FF와 같은 색입니다.

RGB — 같은 값을 10진수로

rgb(59, 130, 246)은 위의 16진수를 10진수로 바꿔 적은 것뿐입니다. 각 채널은 0~255 범위이고, 세 값이 모두 0이면 검정, 모두 255면 흰색입니다.

최근 CSS에서는 쉼표 없이 rgb(59 130 246)처럼 띄어쓰기로 적어도 됩니다. 표기 방식만 다르고 같은 색입니다.

HSL — 색상환 각도·채도·밝기

hsl(217, 91%, 60%)의 첫 숫자는 색상(H)으로, 색상환 위의 각도입니다. 0도는 빨강, 120도는 초록, 240도는 파랑 근처라 217도면 파랑 계열이라는 걸 숫자만 보고 알 수 있습니다.

두 번째 채도(S)는 색의 선명함입니다. 0%면 회색이 되고 100%에 가까울수록 쨍해집니다.

세 번째 밝기(L)는 0%가 검정, 100%가 흰색이며 50% 부근이 색이 가장 진하게 보이는 지점입니다. 이 구조 덕분에 "색은 그대로 두고 밝기만 10% 올리기" 같은 조정이 HSL에서는 숫자 하나만 바꾸면 됩니다.

도구 없이 직접 바꿔 보는 법

HEX → RGB : 두 자리를 16진수로 읽습니다

16진수 두 자리의 값은 앞자리 × 16 + 뒷자리입니다. A는 10, B는 11, ... F는 15로 셉니다.

3B  →  3 × 16 + 11 = 59
82  →  8 × 16 +  2 = 130
F6  →  15 × 16 + 6 = 246

그래서 #3B82F6rgb(59, 130, 246)입니다. 반대로 갈 때는 각 숫자를 16으로 나눈 몫과 나머지를 16진수 한 자리씩으로 적으면 됩니다(59 ÷ 16 = 3 … 11 → 3B).

RGB → HSL : 최댓값과 최솟값만 있으면 됩니다

세 채널을 255로 나눠 0~1로 만든 뒤, 그중 최댓값(max)·최솟값(min)과 그 차이(d)로 계산합니다.

L = (max + min) / 2
S = d / (1 - |2L - 1|)        (d 가 0이면 S = 0)
H = 60 × ((G-B)/d mod 6)      max 가 R 일 때
H = 60 × ((B-R)/d + 2)        max 가 G 일 때
H = 60 × ((R-G)/d + 4)        max 가 B 일 때

rgb(59, 130, 246)으로 직접 해보면 이렇게 나옵니다. 0.231(R), 0.510(G), 0.965(B)이므로 max는 0.965, min은 0.231, d는 0.734입니다.

  • L = (0.965 + 0.231) / 2 = 0.598 → 60%
  • S = 0.734 ÷ (1 − |2×0.598 − 1|) = 0.734 ÷ 0.804 = 0.912 → 91%
  • max가 B이므로 H = 60 × ((0.231 − 0.510)/0.734 + 4) = 60 × 3.620 → 217도

계산은 이렇게 끝나지만, 색 하나 확인하려고 매번 나눗셈을 세 번씩 하기는 번거롭습니다. 크롬·엣지 개발자 도구의 Styles 패널에서 색상 미리보기 네모를 Shift+클릭하면 HEX·RGB·HSL 표기가 차례로 바뀌기도 하지만, 그 색이 이미 페이지에 적용돼 있어야 쓸 수 있습니다.

저희 도구로 확인하기. HEX 칸에 값을 붙여 넣으면 RGB 세 칸과 HSL 줄이 동시에 채워지고, 위쪽 미리보기 띠에 실제 색이 나옵니다. 반대로 RGB 숫자만 고쳐도 나머지가 따라옵니다.

색상 코드 변환기 (HEX·RGB·HSL)

설치·회원가입 없이 브라우저 안에서 바로 변환되며, 입력한 색상 값은 서버로 전송되지 않습니다.

각 줄 오른쪽의 "복사" 버튼을 누르면 #3B82F6, rgb(59, 130, 246), hsl(217, 91%, 60%) 형태 그대로 복사됩니다.

8자리 HEX — 마지막 두 자리는 색이 아닙니다

#3B82F680처럼 여덟 자리로 적힌 값을 보면 색이 하나 더 있는 것처럼 보이지만, 뒤의 두 자리는 색이 아니라 알파(투명도)입니다. 앞 여섯 자리는 그대로 #3B82F6입니다.

읽는 법은 다른 채널과 같습니다. 00이 완전 투명, FF가 완전 불투명이고, 그 사이는 값을 255로 나눈 비율입니다. 80은 128 ÷ 255 ≈ 0.50, CC는 204 ÷ 255 = 0.80입니다.

반대로 원하는 불투명도를 두 자리로 적으려면 255를 곱해 반올림한 뒤 16진수로 바꿉니다. 0.5 × 255 = 127.5 → 128 → 80입니다. 네 자리 축약 #RGBA도 같은 규칙으로 각 자리를 두 번 반복합니다.

그래서 8자리 값을 세 표기로 맞춰볼 때는 뒤 두 자리를 떼고 앞 여섯 자리만 넣으면 됩니다. 투명도는 색 좌표가 아니라 겹칠 때의 비율이라, HEX·RGB·HSL 어느 표기로 바꿔도 따로 붙는 값입니다.

자주 막히는 지점

상황실제로 일어나는 일
#39F 같은 세 자리각 자리를 두 번 반복 → #3399FF와 같은 색
HSL을 다시 RGB로 되돌림정수 반올림 때문에 원래 값과 1 정도 어긋날 수 있음
#80FF0000 형태환경에 따라 알파가 에 오는 #AARRGGBB 순서일 수 있음
rgb(59 130 246)쉼표 없는 최신 CSS 표기. 쉼표 표기와 같은 색

가장 자주 겪는 건 두 번째입니다. HSL은 각 값을 정수로 반올림해 표시하는 경우가 많아서, hsl(217, 91%, 60%)을 다시 RGB로 되돌리면 59·130·246과 한두 단위 차이가 날 수 있습니다. 색을 최종 저장할 때는 HEX나 RGB 원본을 기준으로 두는 편이 안전합니다.

세 번째도 조심할 지점입니다. 웹(CSS)에서는 알파가 뒤에 붙는 #RRGGBBAA가 표준이지만, 안드로이드 앱 개발처럼 알파를 앞에 두는 표기를 쓰는 환경도 있어 같은 여덟 자리라도 순서가 다를 수 있습니다.

정리

  • #3B82F6, rgb(59, 130, 246), hsl(217, 91%, 60%)같은 색의 다른 표기입니다.
  • HEX는 두 자리씩 16진수로 읽으면 RGB가 됩니다(3B=59, 82=130, F6=246).
  • HSL은 색상 각도(0~360)·채도(%)·밝기(%)라 색을 유지한 채 밝기만 조정하기 좋습니다.
  • 8자리 HEX의 마지막 두 자리는 투명도이며, 색은 앞 여섯 자리로 판단합니다.
  • HSL은 반올림 표시라 왕복 변환 시 1 정도 차이가 날 수 있어, 원본은 HEX·RGB로 두는 편이 안전합니다.
색상 코드 변환기 (HEX·RGB·HSL)

설치·회원가입 없이 브라우저 안에서 바로 변환되며, 입력한 색상 값은 서버로 전송되지 않습니다.

자주 묻는 질문

#3B82F6과 rgb(59, 130, 246)은 정말 같은 색인가요?

같습니다. HEX는 각 색 채널을 16진수 두 자리로, RGB는 같은 값을 10진수로 적은 것뿐입니다. 3B는 3×16+11로 59, 82는 8×16+2로 130, F6은 15×16+6으로 246이 됩니다. 담고 있는 정보가 동일하므로 화면에 찍히는 색도 동일합니다.

HSL은 언제 쓰는 게 편한가요?

같은 색 계열로 밝기나 선명도만 조절할 때입니다. HEX나 RGB에서는 세 숫자를 모두 다시 계산해야 하지만, HSL은 색상(H)을 고정한 채 밝기(L)나 채도(S) 하나만 바꾸면 됩니다. 버튼의 기본·호버 색을 같은 계열로 맞출 때 자주 쓰입니다.

8자리 HEX에서 50% 투명은 어떻게 적나요?

0.5에 255를 곱하면 127.5이고, 반올림하면 128이라 16진수로 80입니다. 그래서 #3B82F6을 절반 투명하게 하면 #3B82F680이 됩니다. 0.8은 204이므로 CC, 완전 불투명은 FF, 완전 투명은 00입니다.

변환기에서 나온 HSL 값을 다시 넣었더니 RGB가 1 차이 나요.

반올림 때문입니다. HSL의 세 값은 보통 정수(각도, 정수 %)로 표시되는데, 실제 계산값은 217.2도나 59.8% 같은 소수입니다. 표시 단계에서 잘린 소수가 되돌아올 때 복원되지 않아 한두 단위 차이가 생깁니다. 색 정의는 HEX나 RGB 쪽을 원본으로 관리하면 이 문제가 사라집니다.

가격 보기카톡 무료 상담