什么是 HTML 格式化?
HTML 格式化工具(也称为 HTML 美化工具或 HTML 整理工具)是一种为 HTML 标记添加一致缩进、换行和间距的工具,使其嵌套结构清晰可见。浏览器在渲染 HTML 时会忽略空白字符,因此写在单行的文档与精心缩进的文档渲染结果完全相同。区别完全在于人的阅读体验:格式化后的 HTML 更易于阅读、调试和维护。
HTML 规范(由 WHATWG 以 HTML Living Standard 形式维护)定义了 110 余个元素,每个元素都有其内容模型。块级元素(如 <div>、<section> 和 <article>)通常从新行开始,并对其子元素进行缩进。空元素(如 <br>、<img> 和 <input>)没有结束标签,也没有需要缩进的子元素。好的格式化工具能理解这些区别,按规则应用缩进,而不是在每个标签后盲目添加空白。
格式化在开发阶段最为重要。压缩或机器生成的 HTML、CMS 平台输出的内容、以及从浏览器开发者工具复制的标记,通常都是密集的单行文本。缺乏适当缩进时,找到缺失的结束标签或追踪深层嵌套结构会耗费大量时间。HTML 格式化工具能一步将这堵文字墙转换为缩进整齐、结构清晰的树形视图。
为什么使用这款 HTML 格式化工具?
粘贴任意 HTML,立即获得正确缩进的输出。无需安装插件,无需编写配置文件,无需创建账号。
HTML 格式化工具使用场景
HTML 缩进规则
HTML 格式化工具对每种元素类型的处理方式取决于其内容模型。下表列出了常见元素在 2 个空格和 4 个空格设置下的缩进方式。两种设置在浏览器中的渲染效果完全相同,区别仅在于可读性。
| 标签 | 元素类型 | 2 个空格缩进 | 4 个空格缩进 |
|---|---|---|---|
| <div> | Block element | New line, indent children | New line, indent children |
| <span> | Inline element | New line, indent children | Inline with parent text |
| <br> | Void element | New line, same level | New line, same level |
| <img> | Void element | New line, same level | New line, same level |
| <!-- --> | Comment | New line, same level | New line, same level |
| <!DOCTYPE> | Document type | First line, no indent | First line, no indent |
| <script> | Script block | New line, preserve inner | New line, preserve inner |
| <pre> | Preformatted | New line, preserve inner | New line, preserve inner |
格式化工具 vs. 压缩工具 vs. 代码检查工具
这三种工具都作用于 HTML,但用途不同。格式化与压缩是相反的操作;代码检查工具在不改变空白的情况下检查错误。
代码示例
如何在主流语言和工具中以编程方式格式化 HTML:
import { html as beautify } from 'js-beautify'
const ugly = '<div><p>Hello</p><ul><li>One</li><li>Two</li></ul></div>'
const formatted = beautify(ugly, {
indent_size: 2,
indent_char: ' ',
wrap_line_length: 80,
preserve_newlines: false,
})
// → <div>
// → <p>Hello</p>
// → <ul>
// → <li>One</li>
// → <li>Two</li>
// → </ul>
// → </div>from bs4 import BeautifulSoup ugly = '<div><p>Hello</p><ul><li>One</li><li>Two</li></ul></div>' soup = BeautifulSoup(ugly, 'html.parser') print(soup.prettify(formatter='minimal')) # → <div> # → <p> # → Hello # → </p> # → <ul> # → <li>One</li> # → <li>Two</li> # → </ul> # → </div>
package main
import (
"bytes"
"fmt"
"golang.org/x/net/html"
"strings"
)
func main() {
ugly := "<div><p>Hello</p></div>"
doc, _ := html.Parse(strings.NewReader(ugly))
var buf bytes.Buffer
html.Render(&buf, doc)
fmt.Println(buf.String())
// renders normalized HTML — pair with indent logic for pretty output
}# Format a single file in place npx prettier --write index.html # Format and print to stdout (pipe-friendly) npx prettier --parser html index.html # Format with 4-space indentation npx prettier --tab-width 4 --parser html index.html # Format HTML from stdin echo '<div><p>Hello</p></div>' | npx prettier --parser html