디자이너가 보내준 #3B82F6, 나는 어떻게 CSS에 넣어야 하나 — HEX·RGB·HSL 색상 코드 변환 완전 정복
HEX만 보내주면 끝인 줄 알았는데, RGB가 필요하다고? HSL은 뭔데? 실무에서 색상 코드 때문에 헤맨 경험 있다면 이 글 하나로 정리하세요.
디자이너한테 피그마 링크 받았는데 버튼 색이 #3B82F6이에요. CSS에 그냥 붙여넣으면 되나 싶었더니, 백엔드 개발자가 'RGB 값으로 주세요'라고 하고, 브랜드 팀은 'HSL도 필요해요'라고 합니다. 같은 파란색인데 포맷이 세 개나 나왔어요. 처음 겪으면 당황스럽죠. 저도 그랬거든요.
이 글에서 알 수 있는 것
- ✅HEX·RGB·HSL 각 포맷이 실제로 어떻게 다른지, 언제 어느 걸 써야 하는지
- ✅색상 코드 변환 방법과 CSS에서 바로 쓸 수 있는 코드 예시
- ✅디자인 시스템용 팔레트를 HSL로 깔끔하게 만드는 방법
HEX, RGB, HSL — 뭐가 다른 건데요?
세 포맷 모두 '화면에 표시되는 색'을 표현하는 방식이에요. 다만 사고방식이 달라요. HEX는 웹 브라우저가 1990년대부터 써온 16진수 표기법. RGB는 빛의 삼원색을 각각 얼마나 섞을지 수치로 말하는 방식. HSL은 색상환 위치(Hue), 선명도(Saturation), 밝기(Lightness) — 그림 그리는 사람 관점에서 색을 설명하는 방식이에요.
| 포맷 | 예시 | 범위 | 주로 쓰는 상황 |
|---|---|---|---|
| HEX | #3B82F6 | 채널당 00–FF | HTML, CSS, 디자인 핸드오프 |
| RGB | rgb(59, 130, 246) | 채널당 0–255 | CSS 애니메이션, JS 색상 연산 |
| HSL | hsl(217, 91%, 60%) | H: 0–360, S/L: 0–100% | 디자인 시스템, 팔레트 생성 |
| RGBA | rgba(59, 130, 246, 0.8) | RGB + 투명도 0–1 | CSS 반투명 처리 |
| HSLA | hsla(217, 91%, 60%, 0.8) | HSL + 투명도 | 디자인 시스템 토큰 + 투명도 |
HEX: 웹 표준이 된 이유가 있어요
#3B82F6을 분해하면 이렇게 돼요. 3B는 빨강 채널(10진수로 59), 82는 초록(130), F6는 파랑(246). 16진수 두 글자가 0~255 사이 숫자 하나를 표현해요. 그래서 여섯 글자면 RGB 세 채널을 모두 담을 수 있고요.
#FFF처럼 세 글자 축약형도 있어요. #FFF는 #FFFFFF와 완전히 같은 색이에요. 각 글자를 두 번 반복하는 방식이거든요. 투명도는 HEX로 표현하기 좀 어색해요. 8자리 HEX(#3B82F6CC)를 쓰거나, 아니면 RGBA로 전환하는 게 낫습니다.
HEX 값만 봐도 색 분위기를 파악하는 법
#FFFFFF처럼 모든 채널이 FF에 가까우면 밝고 하얀 계열, 00에 가까우면 어둡고 검은 계열이에요. #3B82F6처럼 세 채널이 고르게 중간쯤이면 채도 높은 원색 계열. #8B8B8B처럼 세 값이 비슷하면 무채색 회색이에요.
RGB: 개발자가 실제로 선호하는 이유
RGB는 프로그래밍할 때 훨씬 다루기 편해요. 빨간 채널을 20 줄이고 싶다? 숫자에서 그냥 빼면 돼요. 자바스크립트에서 색을 동적으로 바꾸고 싶다? RGBA의 네 번째 숫자(알파값)를 조절하면 투명도가 바뀌어요. HEX로 이걸 하려면 문자열 파싱이 필요한데, RGB는 숫자 세 개니까 계산이 직관적입니다.
/* HEX — 간결하고 범용적 */
.button { background: #3B82F6; }
/* RGB — 숫자 조작이 쉬움 */
.button { background: rgb(59, 130, 246); }
/* RGBA — 반투명 오버레이 */
.overlay { background: rgba(59, 130, 246, 0.15); }
/* CSS 변수 + HSL — 디자인 시스템에서 가장 유지보수 편함 */
:root { --brand-hue: 217; }
.button { background: hsl(var(--brand-hue), 91%, 60%); }
.button:hover { background: hsl(var(--brand-hue), 91%, 50%); }HSL: 디자이너가 제일 좋아하는 포맷
HSL은 사람이 색을 인식하는 방식과 가장 비슷해요. Hue는 색상환에서 어디에 있는지(0°=빨강, 120°=초록, 240°=파랑), Saturation은 얼마나 선명한지(0%=무채색, 100%=원색), Lightness는 얼마나 밝은지(0%=검정, 100%=흰색, 50%=본래 색) 나타내요.
디자인 시스템 만들 때 HSL이 빛나는 이유가 있어요. 브랜드 블루의 밝은 버전이 필요하다? Hue랑 Saturation 고정하고 Lightness만 올리면 돼요. 호버 상태가 좀 더 어두웠으면 한다? Lightness를 10 내리면 끝. HEX 계산 없이, 감으로 조절할 수 있어요.
CSS 변수 하나로 전체 팔레트 관리하는 방법
--brand-hue: 217 변수 하나 선언해두면, hsl(var(--brand-hue), 91%, 60%)가 프라이머리 색, hsl(var(--brand-hue), 91%, 45%)가 호버 상태, hsl(var(--brand-hue), 30%, 95%)가 연한 배경 색이 돼요. 브랜드 컬러를 바꿀 때 변수 숫자 하나만 고치면 전체가 바뀝니다.
세 포맷 간 변환 — 직접 하는 법
HEX에서 RGB 변환은 비교적 쉬워요. 두 글자씩 끊어서 16진수를 10진수로 바꾸면 돼요. #3B82F6 → (0x3B, 0x82, 0xF6) → (59, 130, 246). 계산기에서 16진수 모드로 바꾸면 바로 나오죠.
RGB에서 HSL은 좀 복잡해요. 값을 0~1 범위로 정규화하고, 최댓값·최솟값 차이로 명도를 구하고, 거기서 채도를 계산하고, 최댓값이 어느 채널인지에 따라 색상각을 구해요. 공식이 4단계 이상이라 실수하기 쉬워요. 도구 쓰는 게 훨씬 현명합니다.
지금 이 도구를 사용해 보세요:
색상 선택기 & 변환기 →실무에서 쓸 수 있는 팔레트 만들기
프로젝트 하나에 색이 하나면 충분하지 않아요. 배경색, 테두리, 비활성 상태, 호버, 텍스트용 색이 따로 필요하죠. HSL로 이걸 하면 Hue와 Saturation을 고정하고 Lightness만 바꿔서 전체 스케일을 만들 수 있어요.
- 50: hsl(217, 91%, 97%) — 페이지 배경, 아주 연한 틴트
- 100: hsl(217, 91%, 93%) — 카드 배경, 서브 섹션
- 200: hsl(217, 91%, 85%) — 테두리, 구분선
- 300: hsl(217, 91%, 75%) — 비활성 상태, 플레이스홀더
- 400: hsl(217, 91%, 65%) — 보조 액션, 덜 중요한 요소
- 500: hsl(217, 91%, 60%) — 프라이머리 브랜드 색 (#3B82F6 기준)
- 600: hsl(217, 91%, 50%) — 호버 상태
- 700: hsl(217, 91%, 40%) — 프레스 상태, 강조
- 800: hsl(217, 91%, 30%) — 다크 배경, 반전 텍스트
- 900: hsl(217, 91%, 20%) — 최대 대비, 다크 모드 프라이머리
색상 대비 — 접근성 기준 꼭 확인하세요
WCAG AA 기준에서 일반 텍스트는 배경 대비 4.5:1 이상이 필요해요. #3B82F6을 흰 배경에 쓰면 대비가 3.0:1 정도라 본문 텍스트로는 부적합해요. 큰 제목이나 굵은 텍스트(3:1 기준)엔 쓸 수 있지만, 본문 글씨엔 700~800 계열을 써야 해요. 배포 전에 대비 검사기 꼭 돌려보세요.
실제 프로젝트에서 어떤 포맷을 쓸까
상황마다 맞는 포맷이 달라요. 디자인 핸드오프 문서나 HTML 속성에는 HEX가 깔끔하고 범용적이에요. CSS 커스텀 프로퍼티나 Tailwind 설정 파일에는 HSL이 변수 조합이 쉬워서 좋고요. 자바스크립트에서 색상을 계산하거나 동적으로 바꿀 때는 RGB/RGBA가 편해요. SVG fill 속성이나 HTML 이메일 템플릿에는 HEX가 제일 안전합니다.
자주 묻는 질문
피그마에서 복사한 색이 브라우저에서 미묘하게 달라 보이는데 왜 그런가요?
색상 프로파일 차이 때문이에요. 피그마는 기본적으로 sRGB로 작동하는데, 맥북 같은 고급 모니터는 Display P3 색공간을 쓰고 색역이 더 넓어요. HEX 값은 같은데 렌더링이 다르게 보일 수 있어요. 실제 타깃 기기와 브라우저에서 직접 비교하는 게 가장 확실합니다.
RGBA의 알파값이 정확히 뭘 하는 건가요?
투명도를 조절해요. 1이면 완전 불투명, 0이면 완전 투명, 0.5면 반투명이에요. rgba(59, 130, 246, 0.5)는 배경이 반쯤 비치는 파란색이에요. 다크 모드 오버레이나 glassmorphism 효과 만들 때 자주 써요.
HEX 색상 코드가 대문자냐 소문자냐가 중요한가요?
기능적으로는 완전히 동일해요. #3b82f6과 #3B82F6은 같은 색이에요. 다만 팀 컨벤션을 맞추는 게 중요해서, ESLint나 Stylelint 규칙으로 대소문자 통일을 강제할 수 있어요. Tailwind는 소문자를 주로 쓰는 편이에요.
웹사이트에서 쓰는 색상 코드를 어떻게 알아낼 수 있나요?
브라우저 개발자 도구(F12)에서 Elements 탭 열고, 색상이 있는 요소를 클릭하면 CSS 패널에 색상값이 나와요. 색상 스와치를 클릭하면 HEX/RGB/HSL 간 전환도 되고요. 이미지 안의 색을 뽑고 싶을 때는 컬러 피커 도구를 쓰면 됩니다.
CSS에서 HEX, RGB, HSL 중 어느 걸 쓰는 게 성능에 유리한가요?
사실 성능 차이는 없어요. 브라우저가 렌더링 단계에서 모두 같은 내부 값으로 변환하거든요. 어느 포맷을 쓰든 렌더링 속도에는 영향이 없으니 가독성과 유지보수 편의에 따라 골라요.
▶이 글에서 다룬 도구 바로 사용하기
민재
개발자 겸 테크 라이터. 개발 도구와 파일 변환 기술을 깊이 있게 다룹니다.
이 글이 도움이 되셨나요? 새 가이드 알림 받기
스팸 없이, 새 소식만 보내드립니다. 언제든 취소 가능. · 구독 시 개인정보처리방침에 동의합니다.