HTML 格式化与预览
粘一段 HTML 源码即可缩进美化、压缩成一行或转义成实体,并在一侧实时预览渲染结果。脚本与样式内容原样保留,列表与表格的省略闭合标签自动补齐缩进。
格式化做了什么
只调整缩进与换行,不改标签、不加标签、不删属性:文本节点原样保留,只丢掉「带换行的纯空白节点」(也就是源码里为了好看敲出来的缩进)。
同一行的单个空格会留着,所以 <code><b>甲</b> <b>乙</b></code> 里的空格不会被吃掉。
哪些内容绝对不碰
<code>script</code>、<code>style</code>、<code>pre</code>、<code>textarea</code> 里的内容按原样输出 —— JS 里的换行和缩进有语义,CSS 里的空白也可能影响选择器。
所以你会看到 <code><script></code> 内部还是挤在一行,这不是没格式化,是故意不动。
列表与表格的隐式闭合
HTML 允许 <code><li></code> 不写闭合标签,格式化时按同名元素自动补齐缩进;表格里的 <code><tr></code>、<code><td></code>、<code><th></code> 以及定义列表的 <code><dt></code>、<code><dd></code> 同理。
<code><p></code> 遇到块级标签会自动闭合。这些是常见写法,遇到非常规嵌套仍建议自己核对一遍。
压缩与转义
压缩会去掉注释、把连续空白压成一个空格,并删掉标签之间带换行的空白 —— 同一行的单个空格仍然保留,所以视觉上不会变。
转义把 <code>& < > " '</code> 全换成实体,用来把代码贴进文章或评论而不被当成标签解析。想直接看到渲染结果就用预览区。
常见问题
预览里为什么脚本不生效?
预览用的 iframe 带 sandbox 且不带 allow-scripts,页面里的脚本与表单提交都会被浏览器拦掉;渲染前还会先把整块 script 剥掉,省得控制台报一串被拦截的错。这是故意的:预览区渲染的是你粘进来的任意源码,放开脚本等于在你自己的页面里执行别人的代码。图片和样式表仍会按源码里写的地址去取,粘别人写的 HTML 时留意一下它引了哪些外链。
格式化会改变渲染结果吗?
正常写法不会。它只动源码里带换行的纯空白节点;如果你的 CSS 依赖某个元素开头的空格(少见但存在,比如 inline 元素之间的分隔),格式化后请对照预览确认。
能处理很长的文档吗?
几千行没问题。整页复制粘贴进来时会连预览一起重绘,节点特别多时预览会明显变慢,这时可以先把预览区折叠着只看格式化结果。