DOCTYPE探索【已翻譯100%】(1/2)

青衫無名發表於2017-06-02

介紹

最近在我學習HTML5的時候,心裡想到的第一個問題就是瀏覽器怎麼會知道,我們編寫的HTML是否相容HTML v4.1或者HTML v5呢.

為了找到對相同查詢的回覆,我開始了我的探索,這裡我想分享對此的一些瞭解. 研究這個東西的時候,我瞭解到所有這些都是由一個叫做 的標籤來控制的,它是大多數網頁的最開頭的一個標籤,真正令我感覺驚奇的事情,則是因為我看到每一個web頁面不管何時被某個IDE新增,都會自動新增上這個標籤,而我也從未關心過這個標籤,也從未想過要去研究研究它,但這一次出於對這個標籤的好奇,我對此稍微更深入了一點.

本文中我將描述有關標籤的東西,並將給出下面一些問題的答案.

瀏覽器時如何知道,我們編寫的頁面是HTML4.1 還是 HTML5的呢?

什麼是 標籤,它是幹什麼的?

HTML4.1 & HTML5 有多少種型別的DOCTYPE?

在不同的瀏覽器上面, 是如何影響到HTML元素的渲染的?

錯誤的“”會怎樣使得一個HTML頁面不可用?

如何驗證一個頁面是是否是驗證通過的呢?

我們如何決定型別的定義呢?

如何同文件模式關聯起來的(標準, 怪異 和大體標準模式) ,還有瀏覽器是如何決定是在標準模式,還是怪異模式下渲染一個網頁的呢?

讓我們開始研究

那麼讓我們一個一個的來解答.

瀏覽器是如何知道我們寫的頁面是HTML4.1 還是 HTML5 的?

如我前面所說,使用某種IDE新增一個頁面的時候,一個叫做的標籤會自動被新增到web頁面的頂部,標籤裡面會定義好一些屬性. 這個 標籤呈述和通知瀏覽器頁面使用的HTML版本. 瀏覽器遇到一個包含此標籤的web頁面時,都會使用此文件型別的值來決定用於此頁面的文件模式. 由於HTML 5只有一個我們將會在後面討論的, 因此該 就被定義成像這樣. 該標籤自身顯示了web頁面是相容HTML 5的. 因此 被定義成時,就意味著我們使用了HTML5.

什麼是“DOCTYPE” 標籤,它能幹什麼?

“文件型別宣告” 或者說 標籤向瀏覽器指出了我們編寫的HTML,web頁面所使用的笨笨,還有其他標籤將會在瀏覽器上被如何渲染.

告訴瀏覽器, “我使用的是 HTML 4.01.” 當瀏覽器看到這個的時候,就知道你講的是什麼,以及你確實是在編寫 HTML 4.01. 那樣瀏覽器就會使用面向 HTML 4.01的佈局和顯示規則. 該標籤告知瀏覽器,所寫的是一個標準的為所有瀏覽器所接受的HTML。這一標準可以這3種之一 例如我們將在下面進一步討論的嚴格、 過度和框架集標準.

當“DOCTYPE” 被定義在一個頁面中時,瀏覽器就能準確知道如何處理你的頁面(至少是你關心的那些瀏覽器)如何按照預期的顯示. 它會告訴瀏覽器文件的型別.

“DOCTYPE” 宣告表示使用了標準的HTML,而所寫的HTML頁面是相容由W3C(全球資訊網聯盟)所定義標準的.

在HTML 4.01中, 申請引用了一個 DTD (文件型別定義) . DTD 指定了標記語言的規則,因此瀏覽器能準確的渲染出內容來.

DTD的目的是定義好一個XML文件的合法構造塊.DTD用一個合法元素和屬性的列表定義了文件架構. DTD 可以在一個XML文件裡面內聯定義, 或者是作為一個外部檔案被引用.

標籤必須是HTML文件的第一個標籤,它看起來像這樣

-//W3C//DTD HTML 4.01 Transitional//EN”“http://www.w3.org/TR/html4/loose.dtd”>

下面的圖片剖析了DOCTYPE標籤的每一個部分。請仔細閱讀,以獲得對此的一個合理的理解.

現在你可能會想到我們並沒有談及 ”過渡Transitional ”這個詞. 這個過渡是用來幹嘛的呢? 如果我們寫的是 “標準 standard” HTML 4.01, 那為什麼它要是過渡的呢? 讓我們來理解這樣作的意義.

實際上,存在兩個DOCTYPE, 一個是面向使用 HTML 4.01 編寫的HTML頁面的過渡的, 還有一個面向那些已經存在的更嚴格的 DOCTYPE.

設想你已經有一個擁有數以百計的web頁面的web站點. 你也許會想升級網站使全部的HTML升級到 4.01標準, 但是你的頁面中使用了許多HTML 2.0和3.2那個時代的舊東西. 你該怎麼辦? 那就得使用 HTML 4.01 過渡的 DOCTYPE了, 它允許你驗證你的頁面,但是仍然允許一些傳統的HTML存在 . 那樣,你就能確保你的標記裡面不會有明顯的錯誤(比如錯別字,標籤不配對等等),而你就不用將整個HTML推導重來,以通過驗證. 然後,在你移除了全部的傳統HTML之後,你就已經對嚴格文件型別有了完全的準備,就能確保你能有一個完全相容的標準的Web站點.
DOCTYPE HTML4.1, XHTML & HTML5 有多少種型別?

HTML 4.01 & XHTML 有三類不同的 宣告,而HTML5則僅僅只有一種 宣告.

HTML 4.01 Strict

在這個DTD中, 除了展示性的以及過時的HTML 元素和屬性(比如font)之外,其它都允許. Frameset 也不被允許.

HTML 4.01 Transitional

在這個DTD中, 所有的HTML元素和屬性,包括展示性的和過時的元素(比如font)都允許. 但是Frameset仍然不被允許.

**
HTML 4.01 Frameset**

在這個DTD中, 所有的HTML元素和屬性,包括展示性的和過時的元素(比如font),還有frameset內容,都允許.

XHTML 1.0 Strict

在這個 DTD 中, 標籤必須使用格式良好的XML編寫。除了展示性的和過時的,所有的HTML元素和屬性都允許使用。Frameset不被允許.

此 DTD 相當於 HTML4.01 Strict DTD,但是標記必須也是使用格式良好的 XML 編寫.

XHTML 1.0 Transitional

在這個 DTD 中, 標籤必須使用格式良好的XML編寫. 包括展示性和過時在內的,所有的HTML元素和屬性都允許使用。Frameset不被允許.

此 DTD 相當於 HTML4.01 Transitional DTD ,但是標記必須也是使用格式良好的 XML 編寫.

XHTML 1.0 Frameset

此 DTD 相當於 XHTML 1.0 Transitional, 但允許frameset內容的使用.

XHTML 1.1

該 DTD 相當於 XHTML 1.0 Strict, 但允許你新增模組 (例如提供對於東亞語言的ruby支援).

HTML 5

不同的瀏覽器上,”” 是如何影響到HTML元素的渲染的?

不同瀏覽器對各種標籤的渲染都有所不同. 我們定義一個 DOCTYPE 的時候,就意味著我們在告訴瀏覽器使用了特定DOCTYPE的HTML標準.

當我回想一下不久的過去,我不解於應用程式的一些頁面會在“怪異”的瀏覽器模式下開啟,而還有一些會在“標準”瀏覽器模式下開啟而感到沮喪,真感覺好笑. 研究了”DOCTYPE”, 我才知道只有正確的 “DOCTYPE” 才能讓web頁面在正確的瀏覽器模式下開啟.


相關文章