新聞中心
上一篇文章主要講述了HTML文檔的構(gòu)成,同時(shí)膚淺地接觸了“標(biāo)簽省略”這一概念,本文會(huì)從概念上介紹HTML文檔中第一個(gè)出現(xiàn)的重要元素 - DOCTYPE。

推薦專題:HTML 5 下一代Web開發(fā)標(biāo)準(zhǔn)詳解
所謂DOCTYPE,最初是XML的概念,即通過一種特定的語法,作為一種元數(shù)據(jù),來描述XML文檔中允許出現(xiàn)的元素,以及各元素的組成、嵌套規(guī)則等。具體的概念可以在WIKI中中得到一個(gè)更詳細(xì)的結(jié)果。
但是在HTML中,DOCTYPE又有著一些不同的效果,其中之一就是著名的觸發(fā)瀏覽器標(biāo)準(zhǔn)模式的功能。即如果沒有DOCTYPE,瀏覽器會(huì)進(jìn)入一種被稱為Quirks模式的怪異狀態(tài),在該模式下,瀏覽器的盒模型、樣式解析、布局等都與標(biāo)準(zhǔn)規(guī)定的存在差異。
需要注意的是,所謂的HTML標(biāo)準(zhǔn)、DOM標(biāo)準(zhǔn)等,只規(guī)定了在標(biāo)準(zhǔn)模式下的概念和行為,正如文檔構(gòu)成中提到的,DOCTYPE是一個(gè)HTML文檔絕對不可以省略的部分,因此就根本不存在“Quirks模式”這樣的概念。也正是因?yàn)闃?biāo)準(zhǔn)中沒有對Quirks模式做出任何的規(guī)定,因此不同瀏覽器在Quirks模式下的處理也是不同的,應(yīng)用Quirks模式可謂難上加難。
HTML4的DOCTYPE
在HTML4的標(biāo)準(zhǔn)中,DOCTYPE被歸屬于“HTML版本信息”一章中。在該章節(jié)中,標(biāo)準(zhǔn)指定了3種DOCTYPE:
?嚴(yán)格模式:。
?過渡模式:。
?框架模式:。
在HTML4的標(biāo)準(zhǔn)中,每一個(gè)DOCTYPE對應(yīng)的dtd文件都是有合法的URL指定的,可以通過互聯(lián)網(wǎng)進(jìn)行下載。瀏覽器可以根據(jù)URL獲得到dtd的具體內(nèi)容,并根據(jù)內(nèi)容的規(guī)定來解析文檔。
現(xiàn)實(shí)是不同的
HTML4如同XML一樣,是一個(gè)相當(dāng)理想化的標(biāo)準(zhǔn)。但是,現(xiàn)實(shí)往往并沒有這么理想,試想下面的HTML文檔:
- "http://www.w3.org/TR/html4/frameset.dtd">
I'm not a frameset So what?
這個(gè)文檔采用了一個(gè)框架模式的DOCTYPE,但其正文確沒有使用任何元素,相對應(yīng)地使用了應(yīng)該由嚴(yán)格模式或者過渡模式指定的,標(biāo)準(zhǔn)的HTML結(jié)構(gòu)。那么在這種情況下,瀏覽器能做什么呢?
拒絕渲染該頁面?不,瀏覽器不敢這么做,在激烈的市場競爭之中,如果因此而導(dǎo)致部分頁面無法渲染的話,就只能眼睜睜看著市場份額注入別家田了。所以瀏覽器頂多弱弱地報(bào)一個(gè)警告以示抗議,卻依舊得乖乖地解析出這個(gè)文檔并正確渲染。
這就是所謂的瀏覽器的“容錯(cuò)性”,事實(shí)上無論你的DOCTYPE是什么,瀏覽器都會(huì)以最大的兼容能力去解析一個(gè)文檔,并以最大的努力讓這個(gè)文檔顯示得符合開發(fā)者的預(yù)期。而瀏覽器的這一特性,也逐漸讓標(biāo)準(zhǔn)制定者開始意識(shí)到,DOCTYPE似乎真的不怎么重要。因此,在HTML5中,DOCTYPE發(fā)生了一次重大的變化……
HTML 5的DOCTYPE
到了HTML 5了,這一變化相信多數(shù)人已經(jīng)知道,就是HTML 5將DOCTYPE的聲明簡化了,只需要即可。
正好前文所述,在HTML 4時(shí)代,標(biāo)準(zhǔn)制定者已經(jīng)認(rèn)識(shí)到,DOCTYPE對瀏覽器的渲染并沒有太大的幫助,除了給無聊的w3c驗(yàn)證器看以外,DOCTYPE似乎只有觸發(fā)瀏覽器兼容模式的作用。于是標(biāo)準(zhǔn)工作組采取了非常實(shí)際的態(tài)度,測試了所有課程順觸發(fā)標(biāo)準(zhǔn)模式的最簡DOCTYPE,最終得出了這一結(jié)論。
但是故事不會(huì)這么簡單,標(biāo)準(zhǔn)工作組也不是完成這么簡單的動(dòng)作就撒手不管的無賴分子,事實(shí)上他們還是很盡責(zé)任地考慮到了向后兼容性、可擴(kuò)展性等一系列的事情,最后將DOCTYPE一章用了大量文字來進(jìn)行描述,得到一個(gè)非常詳實(shí)的結(jié)果。
HTML 5的參考手冊相關(guān)章節(jié)中,將DOCTYPE分為3類:
普通DOCTYPE - normal doctype
普通DOCTYPE就是我們所見的最簡形式,即,他的真正組成是這樣的:
?一段文本,即
?1個(gè)或多個(gè)空格,關(guān)于空格的定義請參照簡介中的解釋。
?字符HTML,同樣大小寫不敏感。
?1個(gè)或多個(gè)空格。
?結(jié)束標(biāo)記,即>。
不再推薦的DOCTYPE - deprecated doctype
即所謂HTML 4時(shí)代的幾個(gè)DOCTYPE,其組成如下:
?一段文本,即
?1個(gè)或多個(gè)空格。
?字符HTML,同樣大小寫不敏感。
?1個(gè)或多個(gè)空格。
?字符PUBLIC,大小寫不敏感。
?繼續(xù)1個(gè)或多個(gè)空格。
?一對引號或單引號(必須前后匹配),引號中放一個(gè)Public ID。
?可選內(nèi)容:
?1個(gè)或多個(gè)空格。
?一對引號或單引號(必須前后匹配),引號中放一個(gè)與前面的Public ID對應(yīng)的System ID。
?1個(gè)或多個(gè)空格。
?結(jié)束標(biāo)記,即>。
在標(biāo)準(zhǔn)中,Public ID和System ID是有嚴(yán)格的對應(yīng)關(guān)系的,如果規(guī)定的System ID不能有Public ID,則上面的第8項(xiàng)可選內(nèi)容也就不能存在。HTML5徹底放棄了HTML4中的過渡型和框架型的DOCTYPE,同時(shí)整合了XHTML的DOCTYPE聲明,得出以下6種組合方式:
?
?
?
?
?
?
遺留工具DOCTYPE - leagacy tool compatible doctype
顧名思義,完全是為了兼容久遠(yuǎn)時(shí)代的歷史遺產(chǎn)而準(zhǔn)備的DOCTYPE,甚至都已經(jīng)沒辦法考證什么樣的“工具”會(huì)搞出這種DOCTYPE來……遺留工具型的DOCTYPE的組成如下:
?一段文本,即
?1個(gè)或多個(gè)空格。
?字符HTML,同樣大小寫不敏感。
?1個(gè)或多個(gè)空格。
?字符SYSTEM,大小寫不敏感。
?繼續(xù)1個(gè)或多個(gè)空格。
?一對引號或單引號(必須前后匹配),引號中放一段文本about:legacy-compat,注意這段文本是大小寫敏感的。
?1個(gè)或多個(gè)空格。
?結(jié)束標(biāo)記,即>。
比如這樣的DOCTYPE就屬于此類:,基本上除了大小寫,沒有什么值得改變的。
現(xiàn)實(shí)的細(xì)節(jié)
對于DOCTYPE的作用,在真正的瀏覽中,僅僅起到觸發(fā)瀏覽器的標(biāo)準(zhǔn)模式的作用。雖然根據(jù)標(biāo)準(zhǔn),一個(gè)HTML文檔中,DOCTYPE前可以有其他的元素,如一個(gè)U+FFEF的BOM,幾個(gè)注釋,一點(diǎn)空格,但是在當(dāng)前的狀態(tài)下,并沒有這么理想:
?對于IE6-9,如果DOCTYPE前存在注釋,會(huì)進(jìn)入Quirks模式。
?對于IE6,如果DOCTYPE前存在一個(gè)XML聲明,會(huì)進(jìn)入Quirks模式。
寫完才發(fā)現(xiàn),問題又全出在IE下……關(guān)于DOCTYPE的問題糾結(jié)至此。
原文鏈接:http://www.cnblogs.com/GrayZhang/archive/2011/03/31/learning-html5-doctype.html
文章標(biāo)題:HTML5標(biāo)準(zhǔn)學(xué)習(xí)入門之DOCTYPE
網(wǎng)頁鏈接:http://fisionsoft.com.cn/article/coepces.html


咨詢
建站咨詢
