ToolDeck

ตัวจัดรูปแบบ HTML

จัดรูปแบบและทำให้ HTML สวยงามด้วยการย่อหน้าที่เหมาะสม

ลองตัวอย่าง

ข้อมูล HTML

HTML ที่จัดรูปแบบแล้ว

ประมวลผลในเครื่อง · ปลอดภัยในการวางข้อมูลลับ
HTML ที่จัดรูปแบบแล้วจะปรากฏที่นี่…

การจัดรูปแบบ HTML คืออะไร?

ตัวจัดรูปแบบ HTML คือเครื่องมือที่ทำการจัดรูปแบบ HTML (เรียกอีกอย่างว่า beautification หรือ pretty-printing): เพิ่มการย่อหน้า การขึ้นบรรทัดใหม่ และการเว้นวรรคที่สม่ำเสมอให้กับ HTML markup เพื่อให้โครงสร้างการซ้อนมองเห็นได้ชัดเจน เบราว์เซอร์ไม่สนใจ whitespace เมื่อแสดงผล HTML ดังนั้นเอกสารที่เขียนในบรรทัดเดียวจะให้ผลลัพธ์เดียวกับเอกสารที่มีการย่อหน้าอย่างระมัดระวัง ความแตกต่างอยู่ที่มนุษย์ทั้งหมด: HTML ที่จัดรูปแบบแล้วอ่านง่ายกว่า แก้ไขข้อผิดพลาดได้ง่ายกว่า และดูแลรักษาได้ง่ายกว่า

HTML specification (ดูแลโดย WHATWG ในชื่อ HTML Living Standard) กำหนดองค์ประกอบมากกว่า 110 ประเภท แต่ละประเภทมี content model ของตัวเอง องค์ประกอบระดับบล็อก เช่น <div>, <section> และ <article> มักขึ้นบรรทัดใหม่และย่อหน้าสำหรับเนื้อหาย่อย Void element เช่น <br>, <img> และ <input> ไม่มีแท็กปิดและไม่มีเนื้อหาย่อยที่ต้องย่อหน้า ตัวจัดรูปแบบที่ดีเข้าใจความแตกต่างเหล่านี้และใช้กฎการย่อหน้าตามนั้น แทนที่จะเพิ่ม whitespace หลังทุกแท็กอย่างไม่เลือก

การจัดรูปแบบมีความสำคัญมากที่สุดในระหว่างการพัฒนา HTML ที่ถูก minify หรือสร้างโดยเครื่อง ผลลัพธ์จากแพลตฟอร์ม CMS และ markup ที่คัดลอกจาก browser DevTools มักมาในรูปแบบบรรทัดเดียวที่หนาแน่น หากไม่มีการย่อหน้าที่เหมาะสม การค้นหาแท็กปิดที่หายไปหรือติดตามโครงสร้างที่ซ้อนลึกจะใช้เวลานานกว่ามาก ตัวจัดรูปแบบ HTML แปลงกำแพงข้อความนั้นให้กลายเป็นโครงสร้างแบบต้นไม้ที่ย่อหน้าอย่างเหมาะสมและอ่านได้ในขั้นตอนเดียว

ทำไมต้องใช้ตัวจัดรูปแบบ HTML นี้?

วาง HTML ใดก็ได้แล้วรับผลลัพธ์ที่ย่อหน้าอย่างถูกต้องทันที ไม่ต้องติดตั้ง plugin ไม่ต้องเขียนไฟล์ config ไม่ต้องสร้างบัญชี

จัดรูปแบบทันที
ผลลัพธ์อัปเดตขณะที่คุณพิมพ์ วาง HTML ที่ถูก minify จากแหล่งใดก็ได้แล้วดูผลลัพธ์ที่ย่อหน้าแล้วโดยไม่ต้องรอขั้นตอน build หรือคำสั่ง CLI
🔒
ประมวลผลโดยให้ความสำคัญกับความเป็นส่วนตัว
การจัดรูปแบบทั้งหมดทำงานในเบราว์เซอร์ของคุณโดยใช้ JavaScript HTML ของคุณไม่เคยออกจากอุปกรณ์ ดังนั้นจึงปลอดภัยที่จะวาง markup ที่มี API key, token หรือ URL ภายใน
🎯
การย่อหน้าที่ปรับได้
สลับระหว่างการย่อหน้า 2 ช่องว่างและ 4 ช่องว่างด้วยการคลิกเดียว ตัวจัดรูปแบบใช้การตั้งค่าของคุณอย่างสม่ำเสมอในทุกระดับการซ้อน
📋
คัดลอกด้วยคลิกเดียว
คัดลอกผลลัพธ์ที่จัดรูปแบบแล้วไปยัง clipboard ด้วยปุ่มเดียว วางลงใน editor, PR review หรือเอกสารของคุณได้โดยตรง

กรณีการใช้งานของตัวจัดรูปแบบ HTML

การพัฒนา Frontend
จัดรูปแบบ HTML template ก่อน commit ไปยัง version control การย่อหน้าที่สม่ำเสมอช่วยลด diff noise ใน pull request และทำให้การ code review รวดเร็วขึ้น
การแก้ไขข้อผิดพลาด Backend Template
HTML ที่แสดงผลจากฝั่งเซิร์ฟเวอร์จาก framework เช่น Django, Rails หรือ PHP มักสร้าง markup ที่ไม่มีการย่อหน้า วางผลลัพธ์ที่แสดงผลแล้วที่นี่เพื่อตรวจสอบการซ้อนและค้นหาแท็กที่ไม่ได้ปิด
DevOps และ CI Pipeline
ตรวจสอบว่าเครื่องมือ build สร้าง HTML ที่มีโครงสร้างดี จัดรูปแบบผลลัพธ์ของ static site generator หรือตัวสร้าง HTML email ก่อนการตรวจสอบด้วยสายตา
QA และการทดสอบ
เปรียบเทียบ snapshot ที่จัดรูปแบบแล้วของผลลัพธ์ HTML ระหว่างการทดสอบ การย่อหน้าที่เหมาะสมทำให้ความแตกต่างทางโครงสร้างชัดเจนเมื่อ diff สองเวอร์ชันของหน้า
Data Engineering
pipeline การ web scraping สร้าง HTML ดิบที่ต้องการการตรวจสอบ จัดรูปแบบหน้าที่ดึงมาเพื่อทำความเข้าใจโครงสร้าง DOM ก่อนเขียน selector สำหรับการดึงข้อมูล
การเรียน HTML
นักเรียนสามารถวาง source code ของเว็บไซต์ใดก็ได้แล้วดูว่าองค์ประกอบซ้อนกันอย่างไร มุมมองแบบต้นไม้ที่จัดรูปแบบแล้วทำให้ความสัมพันธ์ parent-child ระหว่างแท็กชัดเจนขึ้น

กฎการย่อหน้า HTML

วิธีที่ตัวจัดรูปแบบ HTML จัดการกับองค์ประกอบแต่ละประเภทขึ้นอยู่กับ content model ของมัน ตารางด้านล่างแสดงองค์ประกอบทั่วไปและวิธีที่ถูกย่อหน้าด้วยการตั้งค่า 2 ช่องว่างและ 4 ช่องว่าง ทั้งสองให้ผลลัพธ์การแสดงผลเหมือนกันในเบราว์เซอร์ ความแตกต่างคือความอ่านง่าย

แท็กประเภทองค์ประกอบย่อหน้า 2 ช่องว่างย่อหน้า 4 ช่องว่าง
<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

ตัวจัดรูปแบบ vs. Minifier vs. Linter

เครื่องมือทั้งสามทำงานกับ HTML แต่มีวัตถุประสงค์ต่างกัน การจัดรูปแบบและการ minify เป็นการแปลงที่ตรงข้ามกัน ส่วน linting ตรวจสอบข้อผิดพลาดโดยไม่เปลี่ยน whitespace

ตัวจัดรูปแบบ (เครื่องมือนี้)
เพิ่มการย่อหน้าและการขึ้นบรรทัดใหม่เพื่อทำให้ HTML อ่านได้ ไม่เปลี่ยนโครงสร้าง DOM หรือลบเนื้อหาใดๆ ผลลัพธ์แสดงผลเหมือนกับข้อมูลอินพุตในเบราว์เซอร์
Minifier
ลบ whitespace, comment และแท็กปิดที่เป็นตัวเลือกเพื่อลดขนาดไฟล์ ตรงข้ามกับการจัดรูปแบบ ใช้สำหรับ production build ไม่ใช่สำหรับการอ่านหรือแก้ไข
Linter (HTMLHint / W3C)
ตรวจสอบ HTML สำหรับข้อผิดพลาด เช่น แอตทริบิวต์ alt ที่หายไป ID ที่ซ้ำกัน หรือแท็กที่เลิกใช้แล้ว รายงานปัญหาแต่ไม่เปลี่ยนการย่อหน้าหรือการจัดรูปแบบ

ตัวอย่างโค้ด

วิธีจัดรูปแบบ HTML โดยอัตโนมัติในภาษาและเครื่องมือยอดนิยม:

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

คำถามที่พบบ่อย

ความแตกต่างระหว่างการจัดรูปแบบ HTML และการตรวจสอบความถูกต้อง HTML คืออะไร?
การจัดรูปแบบเพิ่มการย่อหน้าและการขึ้นบรรทัดใหม่เพื่อให้ markup อ่านได้ การตรวจสอบความถูกต้องตรวจสอบว่า markup เป็นไปตาม HTML specification หรือไม่ โดยรายงานข้อผิดพลาด เช่น แอตทริบิวต์ที่จำเป็นที่หายไปหรือองค์ประกอบที่ซ้อนไม่ถูกต้อง ตัวจัดรูปแบบไม่แก้ไขข้อผิดพลาด ตัวตรวจสอบความถูกต้องไม่เปลี่ยน whitespace
การจัดรูปแบบ HTML เปลี่ยนวิธีที่หน้าแสดงผลหรือไม่?
ในกรณีส่วนใหญ่ ไม่ เบราว์เซอร์ยุบลำดับ whitespace เป็นช่องว่างเดียวเมื่อแสดงผล ข้อยกเว้นคือองค์ประกอบที่มี white-space: pre หรือกฎ CSS ที่คล้ายกัน และองค์ประกอบ <pre> กับ <textarea> ซึ่ง whitespace มีความสำคัญ ตัวจัดรูปแบบที่สร้างมาดีจะเก็บรักษาเนื้อหาขององค์ประกอบเหล่านี้ไว้ตามเดิม
ควรใช้ช่องว่างกี่ช่องสำหรับการย่อหน้า HTML?
สองช่องว่างและสี่ช่องว่างเป็นที่นิยมทั้งคู่ Google's HTML/CSS Style Guide แนะนำ 2 ช่องว่าง Prettier ใช้ค่าเริ่มต้น 2 ช่องว่าง สี่ช่องว่างตรงกับแนวปฏิบัติ PEP 8 ของ Python และทีมบางทีมชอบใช้เพื่อความสม่ำเสมอข้ามภาษา เลือกหนึ่งแบบและบังคับใช้ด้วยตัวจัดรูปแบบหรือ editor config
สามารถจัดรูปแบบ HTML ที่มี JavaScript หรือ CSS ฝังอยู่ได้หรือไม่?
เครื่องมือนี้จัดรูปแบบโครงสร้าง HTML (แท็กและแอตทริบิวต์) บล็อก <script> และ <style> แบบ inline จะถูกเก็บรักษาไว้ตามเดิม สำหรับการจัดรูปแบบ JavaScript และ CSS ที่ฝังอยู่ ใช้ตัวจัดรูปแบบเฉพาะทาง เช่น Prettier ซึ่งสามารถ parse และจัดรูปแบบทั้งสามภาษาในครั้งเดียว
การถกเถียงระหว่าง tabs กับ spaces ยังคงมีอยู่สำหรับ HTML หรือไม่?
HTML style guide และตัวจัดรูปแบบส่วนใหญ่ใช้ spaces เป็นค่าเริ่มต้น การสำรวจ Stack Overflow Developer Survey ปี 2023 แสดงว่า spaces ถูกใช้โดยประมาณ 55% ของผู้ตอบแบบสอบถามสำหรับการพัฒนาเว็บ Tabs มีข้อได้เปรียบด้านการเข้าถึงที่ให้นักพัฒนาแต่ละคนตั้งค่าความกว้างที่ต้องการ ทั้งสองใช้ได้ ความสม่ำเสมอภายในโครงการสำคัญกว่าการเลือก
ทำไม HTML ของฉันถึงดูแตกต่างหลังการจัดรูปแบบ?
ตัวจัดรูปแบบเพิ่ม whitespace (ช่องว่างและบรรทัดใหม่) ที่ไม่มีอยู่ใน markup ต้นฉบับ ซึ่งเปลี่ยนลักษณะของ source code แต่ไม่เปลี่ยนผลลัพธ์ที่แสดงผล หากคุณเห็นความแตกต่างที่มองเห็นได้ในเบราว์เซอร์ น่าจะเกิดจาก inline element ที่ whitespace ที่เพิ่มเข้ามาสร้างอักขระช่องว่างเพิ่มเติมระหว่างแท็ก ซึ่งแก้ได้ด้วย CSS (font-size: 0 บน parent หรือ flexbox layout)
จะบังคับใช้การจัดรูปแบบ HTML ที่สม่ำเสมอในทีมได้อย่างไร?
ใช้ตัวจัดรูปแบบอัตโนมัติใน CI pipeline ของคุณ Prettier รองรับ HTML และสามารถรันเป็น pre-commit hook ผ่าน Husky หรือ lint-staged เพิ่มไฟล์ .prettierrc config ในที่เก็บโค้ดของคุณที่ระบุ tabWidth, printWidth และ htmlWhitespaceSensitivity ทุก commit จะปฏิบัติตามกฎการจัดรูปแบบเดียวกันโดยไม่คำนึงถึงการตั้งค่า editor ของนักพัฒนาแต่ละคน
ความแตกต่างระหว่าง HTML formatter กับ HTML beautifier คืออะไร?
เป็นการดำเนินการเดียวกัน 'Formatter' และ 'beautifier' ทั้งสองหมายถึงการเพิ่มการย่อหน้าและการขึ้นบรรทัดใหม่ให้กับ HTML markup บางเครื่องมือใช้ 'beautify' (js-beautify) บางเครื่องมือใช้ 'format' (Prettier) ผลลัพธ์เหมือนกัน: HTML ที่ย่อหน้าอย่างถูกต้องและอ่านได้ง่าย 'Pretty-print' เป็นคำพ้องอีกคำที่ใช้บ่อยในเอกสารและ search query