跳到主要内容

CSS 压缩到底压掉了什么:从去空格到颜色折叠的完整账

讲清楚 CSS 压缩做的几件事:去空格去注释、缩短颜色、合并简写,并用一段真实样式给出压缩前后的字节对比,同时说清它和构建工具的分工。

发布于 作者 李雷
#css #前端优化 #压缩 #性能 #加载速度

CSS 压缩到底压掉了什么:从去空格到颜色折叠的完整账

很多人对「压缩 CSS」的理解停留在「把代码挤成一行」。其实挤成一行只是其中最不起眼的一步。一段写得规整的样式表,真正占体积的是缩进、换行、解释性注释,以及那些可以写得更短却写成了长形式的颜色和数值。把这些逐项收掉,一个文件常常能瘦下 30% 到 60%。

下面按「压缩器实际做的事」拆开讲,每一项都说清楚它省在哪、有没有风险,最后给一段真实样例看压缩前后的字节账。

去空白和换行:占比最大的一项

源码里的缩进、空行、属性之间的空格、选择器和大括号之间的换行,浏览器一个都不需要。它们是写给人看的。压缩器把连续空白塌成一个或干脆删掉,规则之间、属性之间、冒号分号两侧的空白全部收紧。

对一份手写、缩进规整的样式表来说,这一项往往就是大头。我自己测过站内一份 9400 字节的组件样式,单独只开「压缩空白」一项,输出降到 6100 字节,省掉的三千多字节里绝大部分就是缩进和换行。后面的颜色折叠、零值处理加起来反而只动了几十字节。这也提醒一件事:先看清哪项真正省字节,别在收益最小的转换上纠结。

去注释:默认要留一类例外

注释对浏览器同样是死重量。但删注释有个不能一刀切的地方:以 /*! 开头的注释是「重要注释」的长期约定,通常是 License 头、版权声明、署名。cssnano、csso、esbuild 这些主流压缩器默认都保留它,因为擅自删除可能违反开源协议条款,MIT 和 Apache 都要求在分发时保留声明。

所以一个合格的 CSS 压缩流程是:删掉普通注释,保留 /*! 注释。只有你确认整段没有需要保留的声明,才整体清空。

缩短颜色和数值:折叠成等价短形式

这一类不是删东西,而是把同一个值写成更短的等价形式:

  • hex 颜色长形式折叠成短形式,#ffffff 写成 #fff#FF6600 写成 #f60
  • 完全不透明的 rgb(255, 255, 255) 转成 #fff,18 字节变 3 字节。
  • 零值去掉单位,0px 写成 0
  • 小数去掉前导零,0.5 写成 .5
  • 完全相同的四值简写折叠,margin: 5px 5px 5px 5px 折成 margin: 5px

要注意的是颜色名不该被改写。red#f00 还短一个字节,把颜色名转成 hex 既不省体积也改了风格,靠谱的工具不会动它。带非不透明 alpha 的 rgba() 也没有等价短形式,同样不该动。

一段真实的压缩前后对比

下面这段是常见的卡片样式,写法很普通:

压缩前(约 178 字节):

/* card component */
.card {
  margin: 8px 8px 8px 8px;
  padding: 0px;
  color: #ffffff;
  background: rgb(255, 255, 255);
  opacity: 0.5;
}

压缩后(约 78 字节):

.card{margin:8px;padding:0;color:#fff;background:#fff;opacity:.5}

注释删了,空白收了,四值 margin 折成一个值,0px0,两处白色都折成 #fff0.5.5,块尾多余的分号也去掉。178 到 78,省了大概 56%。短样例的比例会偏高,真实大文件落在 30% 到 60% 这个区间更常见。

体积小了,加载到底快在哪

CSS 是渲染的阻塞资源,浏览器要先拿到并解析完才会画首屏。文件越小,下载越快,解析越快,首次内容绘制就越早。在限速 3G 这种弱网下差别尤其明显:一个 19KB 的内嵌样式压到 8KB,嵌入的 iframe 能从「卡在加载」变成两百毫秒内画完。压缩还叠加在 gzip 之上,去掉重复空白后压缩算法的字典命中也更干净。

和构建工具是什么关系

如果你的项目里已经接了 Vite、esbuild 或 cssnano,CSS 压缩本来就是 build 的一环,不必手动做。在线压缩工具补的是另一种场景:群里有人甩来一段六百行 CSS,你想小一半再丢进邮件模板或 CodePen,但不想专门起一个沙箱配 devDependency。或者同事说 cssnano 能压掉 40%,你本地没配 build,想要个真实数字带进 PR 讨论。这时贴进去看实时节省百分比,比拍脑袋靠谱。

可以直接试试 CSS 压缩工具:它的转换都是独立开关,可以一项项打开看各自省了多少。想还原回可读 CSS,用共用同一个解析器的 CSS Formatter 粘回去 Format 即可,除了被剥离的注释和空白本身,往返无损。HTML 那边的同类需求可以看 HTML 压缩工具


Made by Toolora · Updated 2026-06-13