介紹
最近在我學習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文檔的第一個标簽,它看起來像這樣
下面的圖檔剖析了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頁面在正确的浏覽器模式下打開.