Skip to content

HTML 文件架構:DOCTYPE、根元素、檔頭與內容區

HTML 文件架構:DOCTYPE、根元素、檔頭與內容區

HTML 文件架構不難懂,只要分清楚各區塊的作用為何,就不會有誤用的情況發生了。一份 HTML 文件固定由四個部分組成:文件類型宣告、根元素、檔頭與內容區。文件類型宣告決定瀏覽器用標準模式解析,根元素上的 lang 則標示這一頁的語言。

html
<!DOCTYPE html>
<html lang="zh-Hant-TW">
  <head>
    <!-- 給機器看的資訊 -->
  </head>
  <body>
    <!-- 給使用者看的內容 -->
  </body>
</html>

文件類型(doctype)

此宣告會在整份文件最上端,它是用來告訴瀏覽器:我是哪一個版本的 HTML!不同的文件宣告,會造成版面上的某些差異性!現階段,Away 將會以 HTML5 為主。

html
<!DOCTYPE html>

DANGER

沒宣告 DOCTYPE 會造成瀏覽器無法預期的行為。

少了這一行,瀏覽器會退回 怪異模式(Quirks Mode),改用早期的解析規則排版,CSS 的盒模型與行高計算都可能跑掉。HTML5 的宣告之所以這麼短,是因為它不再需要指定 DTD 網址,只是單純告訴瀏覽器:請用標準模式解析。

根元素

用來告訴伺服器,這個網站是用 HTML 寫的。此元素會包裹住整個網頁的內容,也被稱為 根元素

html
<!DOCTYPE html>
<html>
  ...
</html>

整份文件就是從這裡開始往下展開成 樹狀結構,瀏覽器依此建立 DOM 樹。

lang

lang 屬性指定頁面內容的自然語言。它是 HTML 標籤的一個屬性,用於設定頁面上所有文字的語言。倘若頁面上的部分文字使用不同語言,您可以給環繞文字的元素的語言屬性賦一個不同的值。

html
<html lang="zh-Hant-TW">
  ...
</html>
  • en:英文。
  • zh-Hant-TW:臺灣使用的繁體中文。
  • zh-Hant:繁體中文。
  • zh-Hans:簡體中文。

小提醒

規則組成為 語言-字體-地區

  • 語言:全小寫。
  • 字體:首字大寫。
  • 地區:全大寫。

lang 會影響螢幕閱讀器的發音、瀏覽器的翻譯提示,也是搜尋引擎判斷語系的依據之一,對 SEO 與無障礙都有幫助,別省略它。

檔頭

主要是放置一些給機器運作、搜尋引擎搜尋的爬蟲所看,不是給一般使用者檢視的區塊。

html
<!DOCTYPE html>
<html lang="zh-Hant-TW">
  <head>
    ...
  </head>
</html>

常見放在這裡的有 網頁標題 <title><meta>網站圖示 faviconCSS 樣式JavaScript 程式碼,細節可參考 檔頭區域介紹

內容區

此區為網頁內容,是網站要給使用者檢視資料的區塊。

html
<!DOCTYPE html>
<html>
  <head>
    ...
  </head>
  <body>
    <!-- 給使用者看的內容 -->
  </body>
</html>

所有看得到的內容都寫在這裡,例如:標題段落圖片超連結,完整說明可參考 網頁內容區介紹

常見問題

DOCTYPE 一定要寫嗎?不寫會怎樣?

一定要寫,而且要放在文件最上面。少了它,瀏覽器會切換到 怪異模式(Quirks Mode),改用早期的解析規則來排版,盒模型與行高的計算都可能跟你預期的不同。

HTML5 的 DOCTYPE 為什麼這麼短?

HTML4 與 XHTML 的宣告需要附上 DTD 網址,用來指定文件要依循哪一份規格。HTML5 不再依賴 DTD,宣告只剩下告訴瀏覽器請用標準模式解析這件事,所以短短一行就夠了。

lang 屬性該填什麼?可以不填嗎?

台灣的繁體中文網站建議填 zh-Hant-TW。它會影響螢幕閱讀器的發音、瀏覽器的翻譯提示與搜尋引擎判斷語系,雖然不填也能顯示,但對 SEO 與無障礙都是扣分。

head 與 body 有什麼不同?

<head> 放的是給機器看的資訊,例如:網頁標題、<meta>、CSS 與腳本,不會直接顯示在畫面上;<body> 放的才是使用者看得到的內容,例如:標題、段落、圖片與連結。

一份文件可以有多個 html 或 body 嗎?

不行。<html> 是整份文件唯一的根元素,<head><body> 各自也只能有一個,而且順序固定是先 <head><body>。寫多個時瀏覽器會自行合併或忽略,結果通常不是你要的。

延伸閱讀