ToolDeck

CSS 压缩工具

通过删除空白和注释来压缩 CSS

加载示例

CSS 输入

压缩后的 CSS

本地运行 · 粘贴密钥安全无忧
压缩后的 CSS 将显示在此处…

什么是 CSS 压缩?

CSS 压缩是在不改变样式表行为的前提下,移除所有不必要字符的过程。具体包括:删除空白字符、换行符、注释,以及尾部分号、多余引号等冗余语法。浏览器解析压缩后的 CSS 与解析原始格式的 CSS 完全一致。W3C CSS 语法模块定义了相关语法规则:标记之间的空白字符是可选的,仅在分隔标识符时必须保留。压缩正是利用了这一特性,将样式表精简到最少所需字符。

在线 CSS 压缩工具接收你格式化后的样式表,输出针对传输大小优化的紧凑版本。典型压缩率在 15% 到 40% 之间,具体取决于源文件中空白字符和注释的数量。对于一个 50 KB 的样式表,这意味着每次页面加载可减少 7–20 KB 的网络传输。配合服务器端的 gzip 或 Brotli 压缩,效果更佳——已压缩 CSS 的二次压缩比格式化原文件的压缩效果更好。

CSS 压缩是前端构建流水线中的标准步骤。cssnano、clean-css、esbuild 等工具均在构建过程中执行压缩。但在开发阶段,你经常需要对单个代码片段进行压缩测试、内联关键 CSS 块,或在将样式表加入打包配置前估算压缩效果。这正是基于浏览器的 CSS 压缩工具的用武之地:粘贴 CSS,获取压缩输出,复制结果,继续工作。

Before · css
After · css
/* Main navigation styles */
.nav {
  display: flex;
  align-items: center;
  padding: 1rem 2rem;
  background-color: #1e293b;
}

/* Links inside nav */
.nav a {
  color: #e2e8f0;
  text-decoration: none;
  margin-right: 1.5rem;
  transition: color 0.2s ease;
}

.nav a:hover {
  color: #818cf8;
}
.nav{display:flex;align-items:center;padding:1rem 2rem;background-color:#1e293b}.nav a{color:#e2e8f0;text-decoration:none;margin-right:1.5rem;transition:color .2s ease}.nav a:hover{color:#818cf8}

为什么使用这款 CSS 压缩工具?

粘贴任意 CSS,毫秒内即可获得压缩输出。无需配置构建工具,无需执行命令行命令,无需创建账户。

即时压缩
输出随着你的输入或粘贴实时更新。无需等待构建步骤,即刻看到压缩结果和节省的字节数。
🔒
隐私优先处理
所有压缩操作均在浏览器中使用 JavaScript 本地运行。你的 CSS 不会离开你的设备,也不会上传到任何服务器。
📦
精确的大小报告
并排显示原始大小、压缩后大小和压缩百分比。在提交构建流水线变更前,可用于估算性能收益。
📋
无需登录
打开页面,粘贴 CSS,复制结果。无需注册,无频率限制,无功能门槛。每次访问均可使用完整工具。

CSS 压缩工具使用场景

前端性能优化
在将关键 CSS 内联到 HTML head 元素前先进行压缩。更小的内联 CSS 意味着更快的首次内容绘制(FCP),在移动网络环境下尤为明显。
后端邮件模板
邮件客户端不支持外部样式表,且对文件大小有严格限制。压缩内联 CSS 可使邮件 HTML 保持在截断阈值以下(Gmail 为 102 KB)。
DevOps 与构建验证
将构建工具的压缩输出与本工具的结果进行对比,以验证 cssnano 或 clean-css 的配置是否正确并输出了最优结果。
性能预算评估
粘贴第三方样式表,对照性能预算检查其压缩后的大小,在添加到项目前判断是否需要做 tree-shaking 或寻找替代方案。
数据工程与网页抓取
从抓取的页面中提取 CSS 时,先压缩以消除来源间的空白字符差异,再进行比对或存储。
学习 CSS 优化
学生可以粘贴 CSS,直观地看到压缩工具移除了哪些字符。对比输入和输出,了解哪些 CSS 语法对浏览器有意义,哪些只是纯粹的格式装饰。

CSS 压缩技术

CSS 压缩工具通过多种转换方式减小文件大小,每种方式针对源码中不同类型的冗余。下表列出了主要技术及其在格式化样式表上的典型压缩效果:

技术作用说明典型节省
Whitespace removalStrips spaces, tabs, and newlines between tokens15–25%
Comment strippingRemoves /* ... */ block comments5–15%
Zero shortening0px → 0, 0.5 → .51–3%
Shorthand colors#ffffff → #fff, #aabbcc → #abc1–2%
Semicolon removalDrops the last semicolon before }<1%
Quote removalfont-family: "Arial" → font-family: Arial<1%

具体压缩率因输入内容而异。注释较多的文件从注释删除中获益更大,而已较为紧凑的 CSS 收益则较小。最稳定的优化来自空白字符删除和简写属性优化。cssnano 等高级压缩工具还能合并重复选择器、将完整属性折叠为简写形式(如将 margin-top + margin-right + margin-bottom + margin-left 合并为 margin),并删除被覆盖的声明。

压缩与 Gzip 的对比

CSS 压缩与服务器压缩是互补关系,而非可互换的替代方案。两者在不同层级运作,可叠加使用:

CSS 压缩(本工具)
在 CSS 语法层面运作。删除空白字符、注释,并重写简写属性值。在构建时执行一次。输出结果是浏览器可直接解析的有效 CSS。典型压缩率:原始文件大小的 15–40%。
Gzip / Brotli 压缩
在字节层面使用通用压缩算法运作。由 Web 服务器在每次响应时应用(或在部署时预压缩)。适用于任何文件类型。典型压缩率:压缩后大小的 60–80%。两者结合使用可获得最小的传输体积。

代码示例

如何在不同语言和环境中以编程方式压缩 CSS:

JavaScript (cssnano + PostCSS)
import postcss from 'postcss'
import cssnano from 'cssnano'

const input = `
.nav {
  display: flex;
  padding: 0px 1rem;
  color: #ffffff;
  /* TODO: update color */
}
`

const result = await postcss([cssnano]).process(input, { from: undefined })
console.log(result.css)
// → ".nav{display:flex;padding:0 1rem;color:#fff}"
Python (csscompressor)
import csscompressor

css = """
.nav {
  display: flex;
  padding: 0px 1rem;
  color: #ffffff;
  /* navigation styles */
}
"""

minified = csscompressor.compress(css)
print(minified)
# → ".nav{display:flex;padding:0 1rem;color:#fff}"
Go (tdewolff/minify)
package main

import (
	"fmt"
	"github.com/tdewolff/minify/v2"
	"github.com/tdewolff/minify/v2/css"
)

func main() {
	m := minify.New()
	m.AddFunc("text/css", css.Minify)

	input := ".nav { display: flex; padding: 0px 1rem; color: #ffffff; }"
	output, _ := m.String("text/css", input)
	fmt.Println(output)
	// → ".nav{display:flex;padding:0 1rem;color:#fff}"
}
CLI (cssnano / clean-css)
# Using cssnano via PostCSS CLI
npx postcss styles.css --use cssnano -o styles.min.css

# Using clean-css CLI
npx clean-css-cli styles.css -o styles.min.css

# Quick one-liner with Node.js
node -e "const CleanCSS=require('clean-css');console.log(new CleanCSS().minify('body { margin: 0px; }').styles)"
# → "body{margin:0}"

常见问题

CSS 压缩和 CSS 压缩编码有什么区别?
CSS 压缩是对 CSS 源代码的重写,通过删除不必要的字符(空白、注释、冗余语法)来减小文件大小,同时保持完全相同的行为。压缩编码(gzip、Brotli)则在传输层将文件字节编码为更紧凑的二进制格式。压缩减小磁盘上的 CSS 文件大小,压缩编码减少 HTTP 传输的字节数。最佳实践是两者结合使用:先压缩 CSS,再由服务器对压缩结果进行编码。
压缩 CSS 会破坏样式效果吗?
标准压缩会完整保留 CSS 行为。字符串属性值内部的空白字符(如 content 属性)在所有主流压缩工具中都会被保留。但是,合并选择器或重排属性等激进优化可能改变优先级或覆盖顺序。如果使用 cssnano 的默认预设,这些高风险转换会被禁用。本工具仅执行安全压缩:删除空白字符、移除注释和优化简写属性。
CSS 压缩后能缩小多少?
通常可压缩原始格式文件大小的 15–40%。注释丰富、空白字符较多的文件处于该区间的上端。没有注释、已较为紧凑的 CSS 可能只缩小 10–15%。具体收益取决于编码风格、注释密度,以及源码是否使用了可折叠为简写形式的完整属性写法。
应该手动压缩 CSS 还是使用构建工具?
生产构建应始终使用构建工具(PostCSS 配合 cssnano、esbuild,或 webpack 的 css-minimizer-webpack-plugin)。自动化压缩在每次构建时运行,覆盖所有文件。浏览器端压缩工具适合一次性任务:内联关键 CSS 片段、检查第三方样式表的压缩大小,或在分享前快速压缩原型代码。
这款工具可以压缩 SCSS 或 LESS 吗?
本工具压缩标准 CSS。SCSS 和 LESS 是需要编译为 CSS 的预处理器语言。请先使用 sass 或 lessc 将 SCSS 或 LESS 编译为 CSS,再将编译输出粘贴到此处。直接压缩原始 SCSS 语法可能删除控制编译行为的注释,例如 //! 保留注释或 @use 注解。
压缩后的 CSS 是否难以调试?
是的,压缩后的 CSS 是单行无格式代码,在 DevTools 中难以阅读。标准解决方案是 Source Map。PostCSS、esbuild 等构建工具会生成 .map 文件,让浏览器 DevTools 在浏览器加载压缩版本的同时,显示原始格式化源码。如果在生产环境调试时没有 Source Map,可将压缩后的 CSS 粘贴到 CSS 格式化工具中恢复可读性。
CSS 压缩工具和 CSS 压缩器有什么区别?
在日常使用中,这两个词可以互换。两者都指删除 CSS 中不必要的字符以减小文件大小。有些工具在名称中使用 "compressor"(如 Python 的 csscompressor),但实际执行的是标准压缩操作。"compression" 一词有时也指 gzip/Brotli 编码,那是服务器层面独立的处理过程。如果你看到 "CSS compressor",几乎可以确定它指的是压缩优化,而不是 gzip。