본문 바로가기

CSS 코드 압축

주석과 공백을 없애고 값을 짧게 줄입니다. 그리고 파일 안에 압축기가 처리할 수 없는 부분이 있으면, 규칙이 빠진 스타일시트를 조용히 돌려주는 대신 그렇다고 알려 드립니다.

  • 저장되지 않음
  • 대기열 없음, 기다림 없음
  • 회원가입 없음, 워터마크 없음
압축 결과

압축된 CSS 코드가 여기에 표시돼요.

사용 방법

1

CSS 붙여넣기

파일을 끌어다 놓아도 됩니다. 아무것도 저장하지 않습니다.

2

결과 확인

최소화된 스타일시트와 줄어든 정도를 보여 주거나, 처리할 수 없었던 부분을 설명해 드립니다.

3

복사 또는 다운로드

빌드에 바로 넣을 수 있습니다.

용량이 실제로 줄어드는 곳

절약되는 용량의 대부분은 공백과 주석이고, 직접 작성한 스타일시트에서는 그 양이 상당합니다. 들여쓰기, 규칙 사이의 빈 줄, 큰 파일을 찾아보기 쉽게 해 주는 섹션 제목은 배포되는 순간 모두 순수한 군더더기입니다. 그 외에는 의미가 바뀔 수 없는 방식으로 값을 줄입니다. #ffffff로 쓴 색상은 #fff가 되고, 0에는 단위가 필요 없으니 0px는 0이 되며, 0.5em의 앞자리 0은 빠지고, margin: 10px 10px 10px 10px는 margin: 10px로 줄어듭니다.

위험한 작업은 일부러 하지 않습니다. 선언이 같은 규칙을 합치거나 순서를 바꾸면 캐스케이드가 달라집니다. 캐스케이드는 우선순위가 같은 두 규칙을 나중에 온 쪽으로 결정하는 CSS의 핵심입니다. 공격적으로 순서를 바꾸는 압축기는 파일은 작게 만들지만, 큰 스타일시트에서는 미묘하게 다른 페이지를 만들어 냅니다. 중복 선언도 의도적인 경우가 많습니다. 두 번째 선언을 무시하는 오래된 브라우저를 위한 대비책으로 남겨 둔 것입니다.

중첩 규칙과 최신 미디어 범위 문법은 압축하지 않고 거부합니다. 대부분의 도구와 정반대로 동작하는 부분이라 이유를 밝혀 둘 필요가 있습니다. 이 도구의 바탕이 된 파서는 두 기능보다 먼저 만들어졌고, 이해하지 못하는 것을 만나면 오류를 내지 않고 소리 없이 지워 버립니다. 그래서 중첩 블록이 결과에서 그냥 사라지고, 페이지는 아무 경고도 없이 스타일을 잃습니다. 파일을 거부하는 것이 정직한 답입니다. 스타일시트에 네이티브 중첩이나 @media (400px <= width <= 700px)가 쓰였다면 아래 도구 중 하나를 사용하세요.

마크업과 마찬가지로 결과는 압축 후를 기준으로 판단하세요. 스타일시트는 gzip이나 brotli로 압축되어 전송되고, 이 알고리즘은 이미 반복되는 공백을 매우 잘 처리합니다. 그래서 최소화로 30% 줄어든 파일도 실제 전송량은 5%만 줄어들 수 있습니다. 절약은 실제로 있지만, 표시된 숫자보다는 작습니다.

다른 작업이 필요할 때

최신 스타일시트에는 Lightning CSS가 맞는 도구입니다. 중첩, 미디어 범위, 색상 함수 등 최근 몇 년 사이 추가된 모든 기능을 이해하고, 어떤 오래된 도구보다 더 강하게 압축하며, 새 문법을 오래된 브라우저용으로 변환까지 해 줍니다. esbuild --minify style.css도 거의 같은 수준이며 매우 빠릅니다. 둘 다 브라우저 탭이 아니라 빌드 단계에서 쓰는 도구입니다.

훨씬 큰 효과는 대개 쓰지 않는 규칙을 제거하는 것에서 나옵니다. 유틸리티 프레임워크나 컴포넌트 라이브러리로 만든 사이트는 파일 대부분이 페이지의 어떤 요소와도 일치하지 않는 스타일시트를 배포하는 경우가 흔합니다. PurgeCSS나 프레임워크 자체 빌드를 쓰면 이를 몇 분의 일로 줄일 수 있습니다. 쓰지 않는 CSS를 최소화하면 쓰지 않는 CSS가 작아질 뿐이고, 지우는 것이 진짜 해결책입니다.

자주 묻는 질문

제 CSS가 어딘가에 저장되나요?

아니요. 소스 코드라면 바로 그 점이 핵심입니다. 아무것도 저장하지 않으며 어떤 서버도 코드를 보지 않습니다. 사내 소스 코드를 어딘가로 전송하는 온라인 압축 도구에 붙여 넣는 것은, 그 사이트가 보관 정책에 대해 뭐라고 하든 유출입니다. 그리고 이런 일은 급할 때 아무 생각 없이 저지르기 쉽습니다.

왜 제 파일을 거부했나요?

압축하면 규칙이 사라졌을 것이기 때문입니다. 이 페이지의 압축기는 2022년에 만들어져, 지금은 평범한 CSS가 된 두 가지 기능을 모릅니다. 네이티브 중첩, 즉 다른 규칙 안에 쓴 규칙("&"가 있든 없든)을 받으면 바깥 규칙만 돌려주고 중첩된 규칙은 소리 없이 버립니다. @media (width >= 400px) 같은 최신 미디어 범위 쿼리를 받으면 빈 스타일시트를 돌려줍니다. 어느 쪽도 오류를 내지 않습니다. 저희는 실제로 배포 중인 바로 그 버전에서 두 경우를 모두 측정했고, 스타일이 빠진 스타일시트를 건네는 것이 거절하는 것보다 나쁘다고 판단해 두 경우를 감지해 거부합니다. 아직 아무도 발견하지 못한 세 번째 경우에 대비해, 압축 전후의 규칙 수도 세어 전반적으로 확인합니다.

그럼 중첩 CSS는 어떻게 압축하나요?

먼저 중첩을 컴파일해 풀어 주세요. 중첩을 지원하는 빌드 도구(Sass, PostCSS, Lightning CSS, 번들러)는 모두 빌드하면서 중첩을 평평하게 펼치고, 펼쳐진 결과는 여기서 문제없이 압축됩니다. 중첩을 직접 작성해 그대로 배포한다면, 최신 브라우저는 지원하지만 압축 도구 생태계는 아직 완전히 따라잡지 못한 기능에 기대고 있는 셈입니다.

실제로 무엇을 하나요?

주석과 공백을 제거하고, 색상을 줄이고(#ffffff는 #fff, #ff0000은 red), 불필요한 단위와 세미콜론을 없애며, 안전하게 합칠 수 있는 것은 합칩니다. 사용되지 않는다고 판단되는 규칙은 제거하지 않습니다. 그러려면 HTML을 알아야 하고, 잘못 추측하면 필요한 스타일이 지워지기 때문입니다.

얼마나 작아지나요?

직접 작성한 CSS라면 보통 15~30% 줄어듭니다. 빌드 도구로 이미 컴파일된 결과물은 거의 최소 상태인 경우가 많아 거의 줄지 않습니다. 서버의 gzip이 최소화보다 더 큰 효과를 내며, 두 효과는 겹칩니다.

운영 중인 스타일시트를 여기서 압축해도 안전한가요?

네. 아무것도 저장하지 않으며, 처리할 수 없는 두 경우는 몰래 망가뜨리지 않고 거부하므로, 돌아오는 것은 올바른 결과이거나 거부된 이유에 대한 설명 둘 중 하나입니다.

참고: 중첩 규칙과 최신 미디어 범위 문법은 압축하지 않고 거부합니다. 이 압축기의 바탕이 된 파서는 두 기능보다 먼저 만들어졌으며, 이해하지 못하는 부분을 만나면 오류를 내는 대신 소리 없이 지워 버립니다. 중첩 블록이 결과에서 그냥 사라지는 것입니다. 그 파서가 따라잡기 전까지는 파일을 거부하는 것이 정직한 답입니다.

내 웹사이트에 이 도구 넣기

블로그, 수업 페이지, 도움말 글 어디에나 무료로 넣을 수 있습니다. 코드 한 줄만 붙여 넣으면 방문자가 페이지에서 바로 사용할 수 있습니다.