← 모두의 툴

CSS 압축기의 색상 코드 축약 규칙

가이드 · 2026.08.20 최종 확인

CSS 압축기를 쓰다 보면 #ffffff#fff로 줄어드는 걸 보고 "왜 어떤 색상은 줄어들고 어떤 색상은 그대로일까"라는 의문이 생깁니다. 이 축약은 눈대중이 아니라 정규식 하나로 판정되는 명확한 조건을 갖고 있습니다. 이 가이드는 그 조건이 정확히 무엇인지, 그리고 헥스 코드가 아닌 다른 색상 표기법(rgb, hsl)은 왜 같은 방식으로 줄어들지 않는지를 구조적으로 설명합니다.

1. 6자리 헥스가 3자리로 줄어드는 진짜 조건

CSS 명세상 3자리 헥스 코드 #rgb는 6자리 #rrggbb의 각 자리를 두 번 반복해 쓴 것과 완전히 동일하게 해석됩니다. 즉 #0f0은 브라우저 내부에서 #00ff00과 똑같이 처리됩니다. 이 성질을 거꾸로 이용하면, 6자리 코드의 R·G·B 각 자리쌍이 우연히 같은 문자 두 개로 이루어져 있을 때만 안전하게 3자리로 되돌릴 수 있습니다. R쌍이 "ff", G쌍이 "00", B쌍이 "00"처럼 각 쌍의 두 문자가 동일해야 하고, 세 쌍 모두 이 조건을 만족해야 축약이 성립합니다. 하나의 쌍이라도 두 문자가 다르면 그 정보를 3자리로 옮길 방법이 없으므로 축약 자체가 불가능합니다.

2. 정규식으로 본 실제 판정 로직

CSS 압축기가 실제로 쓰는 정규식은 다음과 같은 형태입니다.

실제 정규식: /#([0-9a-fA-F])\1([0-9a-fA-F])\2([0-9a-fA-F])\3\b/g'#$1$2$3'로 치환
여기서 \1·\2·\3은 "역참조"로, 방금 캡처한 문자와 정확히 같은 문자가 다시 나와야만 매치됩니다. 즉 정규식 자체가 "각 자리쌍이 같은 문자로 중복될 때만" 이라는 조건을 문법으로 강제하고 있습니다.

이 구조 때문에 판정은 사람이 눈으로 보는 것보다 훨씬 엄격합니다. 자리쌍 하나라도 어긋나면 정규식이 아예 매치하지 않고, 원본 6자리 코드가 손대지 않은 채 그대로 출력됩니다.

3. 축약되는 색상과 되지 않는 색상 비교

입력각 자리쌍축약 결과이유
#ffffffff / ff / ff#fff세 쌍 모두 두 문자 동일
#ff0000ff / 00 / 00#f00세 쌍 모두 두 문자 동일
#a1b2c3a1 / b2 / c3축약 불가 (원본 유지)a≠1, b≠2, c≠3 — 세 쌍 모두 불일치
#3b82f63b / 82 / f6축약 불가 (원본 유지)3≠b, 8≠2, f≠6 — 세 쌍 모두 불일치

위 표의 #a1b2c3·#3b82f6이 대표적인 "축약 불가" 사례입니다. R쌍의 두 문자가 서로 다르면 정규식의 역참조 조건(\1)을 만족하지 못하고, G·B쌍도 마찬가지라 전체가 매치되지 않습니다. 실무에서 브랜드 컬러나 디자인 시스템의 색상값은 대부분 이런 임의 조합이라, 실제로는 6자리 그대로 남는 경우가 훨씬 많습니다. 참고로 CSS 압축기 페이지 자체의 FAQ 문구 중 "#ff9933은 축약되지 않는다"는 설명이 있는데, 실제 정규식으로 검증하면 #ff9933은 각 자리쌍(ff·99·33)이 모두 두 문자 동일이라 #f93으로 축약되는 값입니다 — 코드 동작과 문서 예시가 어긋난 경우이므로, 축약 여부를 판단할 때는 이 가이드의 판정 로직(정규식 자체)을 기준으로 삼는 것이 정확합니다.

4. rgb()·hsl()은 왜 같은 방식으로 축약되지 않는가

CSS 압축기의 색상 축약 규칙은 #로 시작하는 헥스 표기법에만 적용되는 정규식입니다. rgb(255,255,255)hsl(0,0%,100%) 같은 함수형 표기법은 애초에 이 정규식의 매치 대상이 아니므로, 압축기를 거쳐도 함수명·괄호·쉼표 주변 공백만 정리될 뿐 rgb()#fff처럼 더 짧은 헥스 표기법으로 자동 변환되지는 않습니다. 이는 이 도구가 순수 정규식 치환 방식이라 값의 의미(색상 자체)를 해석하지 않고 문자 패턴만 다루기 때문입니다 — 실제로 최소 바이트 표기를 원한다면 rgb(255,255,255)를 직접 #fff로 바꿔 입력하는 편이 압축률이 더 높습니다. RGB→HEX 변환기HEX→RGB 변환기로 표기법 간 변환은 가능하지만, 이는 별도 도구의 역할이며 압축기 자체의 색상 축약 규칙과는 무관합니다.

5. 실전 활용: 배포 전 체크리스트

자주 묻는 질문

Q. #112233은 왜 축약이 안 되나요?

R쌍이 "11", G쌍이 "22", B쌍이 "33"으로 각 쌍 자체는 두 문자가 동일하므로 실제로는 축약됩니다(#123으로). 반대로 #123abc처럼 각 자리쌍이 서로 다른 문자 조합(1과2, 3과a, b와c)이면 축약되지 않습니다.

Q. 대소문자가 섞인 헥스값(#FfFfFf)도 축약되나요?

정규식이 [0-9a-fA-F]로 대소문자를 모두 인식하지만, 역참조(\1)는 캡처된 문자 그대로 정확히 일치해야 하므로 대문자와 소문자가 섞여 있으면(예: #Ff0000에서 F와 f는 다른 문자) 매치되지 않아 축약되지 않습니다.

Q. 8자리 헥스(알파값 포함, #ffffffff)도 축약되나요?

이 도구의 정규식은 6자리 패턴(#rrggbb)만 대상으로 하므로 알파 채널이 붙은 8자리 코드는 매치되지 않고 원본 그대로 유지됩니다.

Q. SCSS 변수에 담긴 헥스값도 축약되나요?

이 도구는 순수 CSS 문법만 처리하는 정규식 기반이라 SCSS를 직접 지원하지 않습니다. 먼저 컴파일된 순수 CSS로 변환한 뒤 넣어야 색상 축약 규칙이 정상 적용됩니다.