CSS 格式化工具
用统一的缩进格式化 CSS、SCSS 和 Less,或者把它压缩成最小的有效输出。使用真正的解析,所以嵌套规则、媒体查询和自定义属性都能完整保留。
- 文件永不离开你的设备
- 免费,无需注册
- 无水印
- 加载后可离线使用
如何CSS 格式化工具
- 1
粘贴你的 CSS
普通 CSS、SCSS 或 Less 都能正确解析。
- 2
格式化或压缩
美化以提高可读性,或压缩用于生产环境。
- 3
复制或下载
结果可以直接粘贴回你的项目里。
为什么 CSS 需要真正的解析器,而不是一遍正则匹配
CSS 看起来简单到只需要几条查找替换规则就能重新格式化——在每个分号后加换行、在大括号内缩进——直到文件里真正出现嵌套、媒体查询,以及自定义属性和容器查询这类现代特性。基于正则表达式的方案对嵌套深度没有真正的概念,所以它无法正确缩进一个包含多个嵌套选择器的媒体查询,也没有办法区分一个结束声明的分号,和一个出现在字符串值或包含任意文本的自定义属性内部的分号。先把样式表解析成真正的结构——理解哪条规则嵌套在哪条规则里面,每个代码块从哪里开始、到哪里结束——才是让格式化在真实、非简单的 CSS 上也能正确工作,而不只是在玩具示例上工作的关键。
压缩改变了什么,又刻意保留了什么
这个工具的压缩仅限于去除空白和注释——样式表里那些纯粹是给人读的、对浏览器渲染引擎没有任何意义的部分。它刻意不去合并重复的选择器、不重新排列声明,也不缩短颜色值(比如把 `#ffffff` 改写成 `#fff`),尽管一个更激进的压缩工具可以把这三件事都做了,产出更小的文件。这些改动可能会以容易被忽视的方式改变实际表现:合并两条选择器相同但写在层叠顺序不同位置的规则,可能会改变冲突时哪条声明胜出,重新排列声明也有同样的风险。单纯去除空白则没有这种风险——它不可能改变浏览器渲染出的结果,只会改变描述这个结果需要多少字节。
为什么压缩节省的体积在 gzip 之后比人们预期的要少
Web 服务器几乎都会在通过网络发送文本资源之前先用 gzip 或 brotli 压缩,这两种压缩算法都非常擅长利用空白和统一缩进所代表的那种冗余——重复的空格序列本来就压缩得非常好。这意味着一份格式化的样式表和一份压缩过的样式表,一旦都经过 gzip 处理,两者的差距会比未压缩时的体积差异所暗示的要小得多。压缩仍然有帮助,尤其是因为它会直接去掉注释而不只是压缩它们,但值得知道的是,现代工具链所承诺的大部分网络传输收益,其实来自压缩算法本身,压缩 CSS 只是在此之上贡献了一个较小的额外层。
SCSS 和 Less 的格式化与编译的区别
格式化一份 Sass 或 Less 文件,意味着按原样对源代码应用统一的缩进和间距——嵌套、变量、mixin 和控制指令都保持完整,维持在它们原本的预处理器语法里。这和编译完全是两回事,编译会把变量解析成实际的值,把嵌套选择器展平成独立的纯 CSS 规则,并执行任何 mixin 产出它们展开后的输出。期待从 SCSS 输入得到编译后 CSS 的人,会惊讶地发现同样嵌套、带变量的源码只是被格式化了,而不是被解析求值了——这个工具是预处理器语言的格式化工具,不是它的编译器。
常见问题
压缩实际上能节省多少体积?
对手写的 CSS 来说,在 gzip 压缩之前通常能节省 20%–30%,而对已经经过构建工具处理的输出来说,能节省的就少得多。在网络传输层面,gzip 或 brotli 本来就承担了大部分的工作——压缩主要的作用是在此之前先去掉注释和多余的空白。
压缩会改变我的样式表现吗?
不会。只有空白和注释被去除,选择器、属性和值都不会被触碰。这个工具不会合并规则、重新排列声明或缩短颜色值,因为这些改动可能会以很难察觉的方式改变实际表现。
支持 SCSS 和 Less 吗?
支持,两者都用各自的语法解析,所以嵌套、变量和 mixin 在格式化后都能完整保留。注意这只是格式化——并不会把它们编译成 CSS。
为什么我的 CSS 被拒绝了?
通常是因为有未闭合的大括号或多余的字符。错误信息会包含行号,方便你定位。混入样式表里的模板语法同样会导致失败,因为那不是合法的 CSS。