ToolDeck

Trình Định Dạng HTML

Định dạng và làm đẹp HTML với thụt lề chuẩn

Thử ví dụ

Đầu vào HTML

HTML đã định dạng

Chạy cục bộ · An toàn để dán thông tin bí mật
HTML đã định dạng sẽ hiển thị ở đây…

Định Dạng HTML là gì?

Trình định dạng HTML là công cụ thực hiện việc định dạng HTML (còn gọi là làm đẹp hoặc pretty-printing): nó thêm thụt lề, ngắt dòng và khoảng cách nhất quán vào mã HTML để cấu trúc lồng nhau trở nên rõ ràng. Trình duyệt bỏ qua khoảng trắng khi hiển thị HTML, vì vậy một tài liệu viết trên một dòng cho ra kết quả giống hệt một tài liệu có thụt lề cẩn thận. Sự khác biệt hoàn toàn dành cho con người: HTML đã định dạng dễ đọc, gỡ lỗi và bảo trì hơn.

Đặc tả HTML (được WHATWG duy trì dưới dạng HTML Living Standard) định nghĩa hơn 110 phần tử, mỗi phần tử có mô hình nội dung riêng. Các phần tử cấp khối như <div>, <section> và <article> thường bắt đầu trên một dòng mới và thụt lề các phần tử con. Các phần tử rỗng như <br>, <img> và <input> không có thẻ đóng và không có phần tử con để thụt lề. Một trình định dạng tốt hiểu những sự khác biệt này và áp dụng các quy tắc thụt lề phù hợp, thay vì mù quáng thêm khoảng trắng sau mỗi thẻ.

Định dạng quan trọng nhất trong quá trình phát triển. HTML đã được rút gọn hoặc do máy tạo ra, đầu ra từ nền tảng CMS, và mã đánh dấu được sao chép từ DevTools của trình duyệt thường xuất hiện dưới dạng một dòng dày đặc. Nếu không có thụt lề thích hợp, việc tìm thẻ đóng còn thiếu hoặc theo dõi cấu trúc lồng nhau sâu sẽ mất nhiều thời gian hơn đáng kể. Trình định dạng HTML biến bức tường văn bản đó thành cấu trúc cây được thụt lề đúng cách, dễ đọc chỉ trong một bước.

Tại sao dùng Trình Định Dạng HTML này?

Dán bất kỳ HTML nào và nhận ngay kết quả được thụt lề đúng cách. Không cần cài plugin, không cần viết file cấu hình, không cần tạo tài khoản.

Định Dạng Tức Thì
Kết quả cập nhật khi bạn gõ. Dán HTML đã rút gọn từ bất kỳ nguồn nào và xem kết quả được thụt lề ngay mà không cần chờ bước build hay lệnh CLI.
🔒
Xử Lý Ưu Tiên Quyền Riêng Tư
Tất cả quá trình định dạng chạy trong trình duyệt của bạn bằng JavaScript. HTML của bạn không bao giờ rời khỏi thiết bị, vì vậy bạn có thể an toàn dán mã đánh dấu chứa khóa API, token hoặc URL nội bộ.
🎯
Thụt Lề Có Thể Cấu Hình
Chuyển đổi giữa thụt lề 2 khoảng và 4 khoảng chỉ với một cú nhấp. Trình định dạng áp dụng lựa chọn của bạn nhất quán cho mọi cấp độ lồng nhau.
📋
Sao Chép Một Cú Nhấp
Sao chép kết quả đã định dạng vào clipboard chỉ với một nút. Dán trực tiếp vào editor, PR review hoặc tài liệu của bạn.

Các Trường Hợp Sử Dụng Trình Định Dạng HTML

Phát Triển Frontend
Định dạng các template HTML trước khi commit vào version control. Thụt lề nhất quán giúp giảm nhiễu diff trong pull request và đẩy nhanh quá trình code review.
Gỡ Lỗi Template Backend
HTML được render bởi server từ các framework như Django, Rails hoặc PHP thường xuất ra mã đánh dấu không thụt lề. Dán kết quả render vào đây để xác minh cấu trúc lồng nhau và phát hiện thẻ chưa đóng.
DevOps & CI Pipeline
Xác thực rằng các công cụ build tạo ra HTML có cấu trúc tốt. Định dạng đầu ra của các static site generator hoặc HTML email builder trước khi kiểm tra trực quan.
QA & Kiểm Thử
So sánh các snapshot HTML đã định dạng giữa các lần chạy kiểm thử. Thụt lề đúng cách giúp các sự khác biệt về cấu trúc trở nên rõ ràng khi so sánh hai phiên bản của một trang.
Kỹ Thuật Dữ Liệu
Các pipeline web scraping tạo ra HTML thô cần được kiểm tra. Định dạng các trang đã scrape để hiểu cấu trúc DOM trước khi viết selector để trích xuất dữ liệu.
Học HTML
Sinh viên có thể dán mã nguồn của bất kỳ trang web nào và xem các phần tử lồng vào nhau như thế nào. Dạng xem cây đã định dạng làm rõ mối quan hệ cha-con giữa các thẻ.

Quy Tắc Thụt Lề HTML

Cách một trình định dạng HTML xử lý từng loại phần tử phụ thuộc vào mô hình nội dung của nó. Bảng dưới đây cho thấy các phần tử phổ biến và cách chúng được thụt lề với cài đặt 2 khoảng và 4 khoảng. Cả hai đều cho kết quả hiển thị giống hệt nhau trong trình duyệt; sự khác biệt là khả năng đọc.

ThẻLoại Phần TửThụt Lề 2 KhoảngThụt Lề 4 Khoảng
<div>Block elementNew line, indent childrenNew line, indent children
<span>Inline elementNew line, indent childrenInline with parent text
<br>Void elementNew line, same levelNew line, same level
<img>Void elementNew line, same levelNew line, same level
<!-- -->CommentNew line, same levelNew line, same level
<!DOCTYPE>Document typeFirst line, no indentFirst line, no indent
<script>Script blockNew line, preserve innerNew line, preserve inner
<pre>PreformattedNew line, preserve innerNew line, preserve inner

Trình Định Dạng so với Minifier so với Linter

Ba công cụ này đều hoạt động trên HTML nhưng phục vụ các mục đích khác nhau. Định dạng và rút gọn là các phép biến đổi ngược chiều nhau; linting kiểm tra lỗi mà không thay đổi khoảng trắng.

Trình Định Dạng (Công Cụ Này)
Thêm thụt lề và ngắt dòng để làm cho HTML dễ đọc. Không thay đổi cấu trúc DOM hoặc xóa bất kỳ nội dung nào. Kết quả hiển thị giống hệt đầu vào trong trình duyệt.
Minifier
Xóa khoảng trắng, chú thích và các thẻ đóng tùy chọn để giảm kích thước file. Ngược lại với định dạng. Sử dụng cho bản build sản xuất, không phải để đọc hay chỉnh sửa.
Linter (HTMLHint / W3C)
Kiểm tra HTML để phát hiện lỗi như thiếu thuộc tính alt, ID trùng lặp hoặc thẻ đã lỗi thời. Báo cáo vấn đề nhưng không thay đổi thụt lề hay định dạng.

Ví Dụ Mã

Cách định dạng HTML theo chương trình trong các ngôn ngữ và công cụ phổ biến:

JavaScript (js-beautify)
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>
Python (BeautifulSoup)
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>
Go (goquery + x/net/html)
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
}
CLI (Prettier)
# 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

Câu Hỏi Thường Gặp

Sự khác biệt giữa định dạng HTML và xác thực HTML là gì?
Định dạng thêm thụt lề và ngắt dòng để mã đánh dấu dễ đọc. Xác thực kiểm tra xem mã đánh dấu có tuân thủ đặc tả HTML hay không, báo cáo các lỗi như thiếu thuộc tính bắt buộc hoặc các phần tử lồng nhau không đúng cách. Trình định dạng không sửa lỗi; trình xác thực không thay đổi khoảng trắng.
Định dạng HTML có làm thay đổi cách trang hiển thị không?
Trong hầu hết các trường hợp, không. Trình duyệt thu gọn các chuỗi khoảng trắng thành một khoảng trắng duy nhất khi hiển thị. Các ngoại lệ là các phần tử có white-space: pre hoặc các quy tắc CSS tương tự, và các phần tử <pre> và <textarea>, nơi khoảng trắng có ý nghĩa. Một trình định dạng được xây dựng tốt bảo toàn nội dung của các phần tử này đúng như ban đầu.
Tôi nên dùng bao nhiêu khoảng cách để thụt lề HTML?
Hai khoảng và bốn khoảng đều phổ biến. Hướng dẫn phong cách HTML/CSS của Google khuyến nghị 2 khoảng. Trình định dạng Prettier mặc định là 2 khoảng. Bốn khoảng phù hợp với quy ước PEP 8 của Python và được một số nhóm ưa thích để thống nhất giữa các ngôn ngữ. Hãy chọn một và thực thi nó bằng trình định dạng hoặc cấu hình editor.
Tôi có thể định dạng HTML chứa JavaScript hoặc CSS nhúng không?
Công cụ này định dạng cấu trúc HTML (thẻ và thuộc tính). Các khối <script> và <style> nội tuyến được giữ nguyên như cũ. Để định dạng JavaScript và CSS nhúng, hãy dùng trình định dạng chuyên dụng như Prettier, có thể phân tích và định dạng cả ba ngôn ngữ trong một lần.
Việc dùng tab hay khoảng cách cho HTML còn là chủ đề tranh luận không?
Hầu hết các hướng dẫn phong cách HTML và trình định dạng mặc định sử dụng khoảng cách. Khảo sát Nhà phát triển Stack Overflow 2023 cho thấy khoảng cách được sử dụng bởi khoảng 55% người được hỏi trong phát triển web. Tab có lợi thế về khả năng tiếp cận vì cho phép mỗi nhà phát triển đặt độ rộng hiển thị ưa thích của họ. Cả hai đều hoạt động; sự nhất quán trong một dự án quan trọng hơn là lựa chọn bản thân.
Tại sao HTML của tôi trông khác sau khi định dạng?
Trình định dạng thêm các ký tự khoảng trắng (khoảng cách và ngắt dòng) không có trong mã đánh dấu gốc. Điều này thay đổi giao diện mã nguồn nhưng không thay đổi kết quả hiển thị. Nếu bạn thấy sự khác biệt trực quan trong trình duyệt, có thể do các phần tử nội tuyến mà khoảng trắng được thêm vào tạo ra một ký tự khoảng trắng thừa giữa các thẻ, điều này có thể được giải quyết bằng CSS (font-size: 0 trên phần tử cha, hoặc bố cục flexbox).
Làm thế nào để thực thi định dạng HTML nhất quán trong một nhóm?
Sử dụng trình định dạng tự động trong CI pipeline của bạn. Prettier hỗ trợ HTML và có thể chạy như một pre-commit hook thông qua Husky hoặc lint-staged. Thêm file cấu hình .prettierrc vào repository của bạn chỉ định tabWidth, printWidth và htmlWhitespaceSensitivity. Mọi commit sau đó sẽ tuân theo các quy tắc định dạng giống nhau bất kể cài đặt editor của từng nhà phát triển.
Sự khác biệt giữa trình định dạng HTML và HTML beautifier là gì?
Chúng là cùng một thao tác. 'Trình định dạng' và 'beautifier' đều đề cập đến việc thêm thụt lề và ngắt dòng vào mã HTML. Một số công cụ dùng 'beautify' (js-beautify), số khác dùng 'format' (Prettier). Kết quả giống hệt nhau: HTML được thụt lề đúng cách, dễ đọc cho con người. 'Pretty-print' là một từ đồng nghĩa khác thường được dùng trong tài liệu và truy vấn tìm kiếm.