理解怪異模式和標準模式

在 Web 的早期,頁面通常會寫成兩個版本:一個用於 Netscape Navigator,一個用於 Microsoft Internet Explorer。當 W3C 制定 Web 標準時,瀏覽器不能立即開始使用它們,因為這樣做會破壞 Web 上大多數現有網站。因此,瀏覽器引入了兩種模式來區分遵循新標準的網站和舊的遺留網站。

現在 Web 瀏覽器中的佈局引擎使用三種模式:怪異模式 (quirks mode)、有限怪異模式 (limited-quirks mode) 和無怪異模式 (no-quirks mode)。在怪異模式下,佈局會模仿 Navigator 4 和 Internet Explorer 5 的行為。為了支援在 Web 標準廣泛採用之前構建的網站,這一點至關重要。在無怪異模式下,行為(希望如此)是現代 HTML 和 CSS 規範中所描述的期望行為。在有限怪異模式下,只實現了非常少量的怪異行為。

有限怪異模式和無怪異模式以前分別被稱為“近似標準”模式和“完整標準”模式。這些名稱已經更改,因為現在的行為已經標準化。

瀏覽器如何確定使用哪種模式?

對於 HTML 文件,瀏覽器會在文件開頭使用 doctype 來決定是使用怪異模式還是無怪異模式進行處理。為了確保您的頁面使用無怪異模式,請確保您的頁面具有如下示例中的 doctype:

html
<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Hello World!</title>
  </head>
  <body></body>
</html>

示例中顯示的 doctype `<!doctype html>` 是最簡單的,也是當前 HTML 標準推薦的。早期版本的 HTML 標準推薦了其他變體,但如今所有現有的瀏覽器都會為這個 doctype 使用無怪異模式。沒有有效的理由使用更復雜的 doctype。如果您確實使用了其他 doctype,可能會冒著選擇一個觸發有限怪異模式或怪異模式的風險。

將 doctype 放在 HTML 文件的最開始,在任何其他內容之前。

`<!doctype html>` 的唯一目的是啟用無怪異模式。早期版本的 HTML 標準 doctype 提供了額外的含義,但沒有任何瀏覽器曾將 doctype 用於除在渲染模式之間切換以外的任何用途。

另請參閱 不同瀏覽器選擇各種模式的詳細說明

XHTML

如果您使用 `application/xhtml+xml` MIME 型別透過 `Content-Type` HTTP 標頭將頁面作為 XHTML 提供,則您不需要 doctype 來啟用無怪異模式,因為此類文件始終使用無怪異模式。

如果您使用 `text/html` MIME 型別提供類似 XHTML 的內容,瀏覽器會將其作為 HTML 讀取,您將需要 doctype 來使用無怪異模式。

我如何檢視正在使用的模式?

如果頁面在怪異模式或有限怪異模式下渲染,Firefox 會在開發者工具的控制檯選項卡中記錄一條警告。如果未顯示此警告,則表示 Firefox 正在使用無怪異模式。

JavaScript 中 `document.compatMode` 的值將顯示文件是否處於怪異模式。如果其值為 `"BackCompat"`,則表示文件處於怪異模式。如果不是,則其值為 `"CSS1Compat"`。