HTML 压缩
HTML 压缩是把网页源码里的注释、缩进、换行和多余空白删掉、压成紧凑一行的在线工具。粘贴源码或拖入 .html 即可:块级标签两侧的空白删光,内联文字之间留一个空格,不会把「价格 ¥9.9 起」粘成一团;pre、textarea、script 与条件注释原样保留,汉字之间的换行保留为换行。实时显示压缩率与 gzip 体积,HTML 不上传。
块级标签两侧的空白删光,内联文字之间留一个空格。
请粘贴 HTML,或点「填入示例」先看效果。
🔒 HTML 在你的浏览器内压缩,未上传任何服务器;结果只以纯文本显示,不做渲染预览。只记住压缩选项,源码不落盘。
如何使用HTML 压缩
HTML 怎么压缩:在上方文本框粘贴网页源码,或把 .html / .htm / .vue 文件拖进来(浏览器本地处理、HTML 不上传),也可以先点「填入示例」看效果。
默认「标准」档加「删除注释」「压缩内联 CSS」,粘贴即出结果;菜单用了 inline-block 的页面改选「保守」档,需要更小体积再打开进阶选项里的去属性引号、布尔属性简写等开关。超过 200KB 时改为点「开始压缩」。
核对体积账本:压缩前后字节数、按注释 / 空白 / 内联 CSS / 属性拆开的节省明细与 gzip 估算;确认无误后点「复制结果」或「下载 .min.html」。
关于HTML 压缩的常见问题
- HTML 压缩会上传我的网页源码吗?
- 不会。HTML 压缩全程在你的浏览器里完成,源码不发到任何服务器,所以后台模板、邮件 HTML、带内网地址的页面都可以放心粘。本页只把压缩选项(标准还是保守、开了哪些开关)记在本机 localStorage,源码和结果一律不落盘,关掉页面就没了。想验证可以断网再压一次,照样出结果。
- 手机上能用 HTML 在线压缩吗?
- 能。HTML 在线压缩是纯网页实现,手机、平板、电脑浏览器打开即用,免安装免注册。窄屏上输入框、选项和结果框上下排列,选项按钮都按手指点按的尺寸做;压缩完可以直接复制结果,或下载成 .min.html 文件。
- HTML 压缩后页面显示会变吗?
- 按浏览器默认样式不会变,这是本工具的底线。默认的「标准」档只删块级标签(div、p、li、tr 等)两侧的空白,内联内容(文字、b、a、span、img、select 下拉框、自定义组件)之间的一串空白折成一个空格而不是删光;pre 与 textarea 原样;两侧都是汉字的换行保留为一个换行。例外是页面用 CSS 改了 display 或 white-space,见下一条。
- HTML 压缩后菜单间距变了怎么办?
- 多半是 li 被设成了 display:inline-block。这种写法下,标签之间的换行会被渲染成大约 4px 的缝,压缩把它删掉后菜单就挤紧了。两个解法:改用「保守」档(块级标签之间也留一个空格),或者用 htmlmin:ignore 注释把这一段前后包起来,中间整段原样不动。
- HTML 压缩会改 script 和 style 里的代码吗?
- script 一律不动,本页不压缩也不混淆 JavaScript,连里面的空格都原样。style 标签默认做一遍保守压缩:删 CSS 注释(感叹号开头的版权注释保留)、折叠多余空白、去掉花括号分号逗号两侧的空格和最后一个分号;字符串、url() 和 CSS 转义一个字符不碰,冒号两侧的空格也不动。不想动 CSS 就把「压缩内联 CSS」关掉。
- HTML 压缩能保留条件注释和版权注释吗?
- 能,而且不受「删除注释」开关影响。IE 条件注释、感叹号开头的版权 / 许可注释、井号开头的 SSI 指令(include virtual 那种)、Knockout 的 ko 注释、Vue SSR 和 React SSR 的标记注释,这 6 类删了会出问题的注释一律保留;只有普通说明性注释才会被删。
- HTML 压缩去掉属性引号会出错吗?
- 进阶选项默认全关,打开后才改写属性。HTML 去属性引号只对安全的值生效:class="nav" 变成 class=nav,而值里含空格、引号、等号、尖括号、反引号,或以斜杠结尾(比如 href="https://x.cn/")时引号一律保留,避免浏览器把属性截断。另外三个开关:checked="checked"、disabled="" 简写成 checked、disabled;script 上的 type="text/javascript" 与样式表 link 上的 type="text/css" 删掉;br、img、input 这类空元素末尾的斜杠去掉。冒号、@、v-、x- 开头的框架属性不参与改写。这几项各省几个字节,gzip 后收益更小,追求极致体积时再开。
- HTML 压缩支持 Vue 和模板语法吗?
- 支持。文本里的双花括号插值、花括号百分号控制语句、花括号井号注释,以及 PHP、ASP / EJS 风格的尖括号百分号片段都整段原样,片段外的空白才照常折叠;属性里出现模板语法的标签整个原样输出,计入「原样标签」。冒号、@ 开头和 v-、x- 开头的框架属性不参与去引号与布尔简写。
- HTML 压缩能省多少体积?开了 gzip 还要压吗?
- 用本页「填入示例」那份源码实测:777 字节压到 576 字节,省 25.9%;各自 gzip 之后是 555 字节对 487 字节,仍然少 12.3%。服务器开了 gzip 时收益会变小但不归零,两者可以叠加。邮件 HTML 不走 gzip,Gmail 正文超过约 102KB 还会被截断,这种场景先压缩最直接。
- HTML 压缩支持多大的文件?
- 单次上限约 2MB(按 UTF-8 字节计),常见网页、模板和邮件 HTML 都够用。200KB 以内边输入边压缩;超过 200KB 会关掉自动压缩,改成选好选项后点「开始压缩」,gzip 估算在结果出来后再算,避免每次击键都卡住页面;超过 2MB 会直接提示,请拆分后再来。
- HTML 压缩后能再格式化回来吗?
- 能。把压缩结果贴进下方相关工具里的「HTML 格式化」,就能按标签层级重新展开缩进。但被删掉的普通注释回不来,原来的缩进风格也不会还原成一模一样;需要保留注释的话,压缩前先把「删除注释」关掉。
HTML 压缩去空格为什么不能全删光
HTML 里换行就是空白,而空白在内联上下文会被渲染成一个空格,所以「把空白全删光」的 HTML 去空格 做法会改坏页面。本工具把 HTML 去除空白这件事分成三种位置来处理,标准档与保守档的差别只在中间那一行:
| 空白所在位置 | 标准档(默认) | 保守档 | 为什么 |
|---|---|---|---|
| 文档首尾、head 内部、html / head / body / 表格结构之间、select 下拉框内部 | 删除 | 删除 | 这些位置的空白在默认渲染下不出现 |
| div、p、ul、li、h1、br 等块级标签两侧 | 删除 | 留一个空格 | 默认样式下不渲染;但被改成 inline-block 时会渲染成一条缝 |
| 文字、b、a、span、img、select 外侧、自定义组件之间 | 留一个空格 | 留一个空格 | 这里的空格是内容的一部分,删光会让文字粘连 |
| pre、textarea、script、title 内部 | 原样 | 原样 | 这里的空白会照原样渲染或属于代码 |
对照着看「填入示例」那份源码:标准档输出 576 字节(省 25.9%), 保守档输出 590 字节(省 24.1%)——保守档多出来的那几个字节, 就是块级标签之间留下的空格。内联元素之间的那一个空格两档都留,例如:
<!-- 原文 -->
<p>
价格 <b>¥9.9</b> 起
</p>
<!-- 本工具(标准档):p 两侧删,b 两侧各留一个空格 -->
<p>价格 <b>¥9.9</b> 起</p>
<!-- 删光空白的压缩器:页面上变成「价格¥9.9起」 -->
<p>价格<b>¥9.9</b>起</p>HTML 压缩为什么把中文之间的换行留成换行
CSS 规范允许浏览器把「两侧都是中日文字符的换行」直接去掉而不渲染成空格。Firefox 实现了这一条, Chrome 与 Safari 目前仍渲染成空格。如果压缩器把所有换行统一折成空格,Firefox 用户就会在中文之间 看到凭空多出来的空格。本工具的规则是:一串要折成一个字符的空白,只要原文里含换行、且左右最近的可见 字符都是中日文(汉字、假名、全角标点,含扩展区汉字),就输出一个换行;否则输出空格。韩文不在此列, 因为 Firefox 对韩文保留空格。
换行与空格同样是 1 个字节,这条规则不增加体积,只是输出可能不是严格的「一行」。查找可见字符时会跨过 b、span 这类内联标签继续找,遇到块级标签、img 这类空元素或 script 就停。结果区的体积账本会标出 保留了几处中文换行。
HTML 压缩去注释哪些注释不能删
「删除注释」只删普通说明性注释。下面 6 类注释承担着功能,删了页面或构建流程就会出问题, 所以即使开着 HTML 去注释开关也一律保留:
| 类型 | 写法示例 | 删掉会怎样 |
|---|---|---|
| IE 条件注释 | <!--[if lt IE 9]> … <![endif]--> | 老 IE 的兼容脚本或提示不再加载 |
| 版权 / 许可注释 | <!--! © 2026 作者 --> | 开源许可要求保留的声明丢失 |
| SSI 指令 | <!--#include virtual="/header.html" --> | 服务器端包含失效,页头页脚整块消失 |
| Knockout 无容器绑定 | <!-- ko if: show --> … <!-- /ko --> | 绑定失效,条件块常显或报错 |
| Vue SSR 片段锚点 | <!--[--> … <!--]--> | 客户端激活对不上,整页重新渲染 |
| React SSR Suspense 边界 | <!--$--> … <!--/$--> | 流式渲染的边界错乱 |
另有一对特殊标记:用两个 htmlmin:ignore 注释把一段 HTML 包起来,中间整段原样不压, 两个标记本身会被删掉(与社区里 html-minifier 的约定兼容)。只写了一个时,从它开始到文末全部原样, 并在结果旁提示。
HTML 文件压缩体积实测:开了 gzip 还要不要压
用页面里「填入示例」那份 777 字节的源码,在三种设置下实测(gzip 为 level 6 估算值):
| 版本 | 字节 | 节省 | gzip 后字节 |
|---|---|---|---|
| 压缩前 | 777 | — | 555 |
| 标准档(默认) | 576 | 25.9% | 487 |
| 保守档 | 590 | 24.1% | 489 |
| 标准档 + 进阶选项全开 | 540 | 30.5% | 464 |
结论:gzip 本来就很擅长压缩重复的缩进,所以开了 gzip 之后 HTML 压缩的收益会缩水,但不会归零—— 示例里 gzip 后仍少 12.3%,而且浏览器解析的是解压后的源码,少一些空白节点也能少一点 DOM 开销。没有 gzip 的场景收益最直接:邮件 HTML 压缩就是典型,Gmail 对超过约 102KB 的邮件正文 会截断并显示「查看完整邮件」;嵌进 JS 字符串、JSON 配置或小程序 / 设备固件里的页面也一样。
HTML 代码压缩能做什么、不做什么
HTML 怎么压缩才不出事,归结起来就三条:内联内容之间留一个空格、保真区一个字符不碰、 功能性注释不删。英文资料里这类工具叫 HTML minifier 或 HTML compressor,搜 HTML minify、 minify HTML online 找到的都是同一件事;本页的区别是 HTML 压缩不上传、按中文页面的习惯处理了中文换行。 要把压缩过的源码重新展开,用下方相关工具里的 HTML 格式化。