自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

HTML 5標(biāo)準(zhǔn)學(xué)習(xí)入門之DOCTYPE

開發(fā) 前端 后端
所謂DOCTYPE,最初是XML的概念,即通過(guò)一種特定的語(yǔ)法,作為一種元數(shù)據(jù),來(lái)描述XML文檔中允許出現(xiàn)的元素,以及各元素的組成、嵌套規(guī)則等。具體的概念可以在WIKI中中得到一個(gè)更詳細(xì)的結(jié)果。

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

51CTO推薦專題:HTML 5 下一代Web開發(fā)標(biāo)準(zhǔn)詳解

所謂DOCTYPE,最初是XML的概念,即通過(guò)一種特定的語(yǔ)法,作為一種元數(shù)據(jù),來(lái)描述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文檔絕對(duì)不可以省略的部分,因此就根本不存在“Quirks模式”這樣的概念。也正是因?yàn)闃?biāo)準(zhǔn)中沒有對(duì)Quirks模式做出任何的規(guī)定,因此不同瀏覽器在Quirks模式下的處理也是不同的,應(yīng)用Quirks模式可謂難上加難。

HTML4的DOCTYPE

在HTML4的標(biāo)準(zhǔn)中,DOCTYPE被歸屬于“HTML版本信息”一章中。在該章節(jié)中,標(biāo)準(zhǔn)指定了3種DOCTYPE:

•嚴(yán)格模式:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">。

•過(guò)渡模式:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">。

 •框架模式:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">。

在HTML4的標(biāo)準(zhǔn)中,每一個(gè)DOCTYPE對(duì)應(yīng)的dtd文件都是有合法的URL指定的,可以通過(guò)互聯(lián)網(wǎng)進(jìn)行下載。瀏覽器可以根據(jù)URL獲得到dtd的具體內(nèi)容,并根據(jù)內(nèi)容的規(guī)定來(lái)解析文檔。

現(xiàn)實(shí)是不同的

HTML4如同XML一樣,是一個(gè)相當(dāng)理想化的標(biāo)準(zhǔn)。但是,現(xiàn)實(shí)往往并沒有這么理想,試想下面的HTML文檔:

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"   
  2. "http://www.w3.org/TR/html4/frameset.dtd"> 
  3. <html> 
  4. <head> 
  5. <title>I'm not a frameset</title> 
  6. </head> 
  7. <body> 
  8. <p>So what?</p> 
  9. </body> 
  10. </html> 

這個(gè)文檔采用了一個(gè)框架模式的DOCTYPE,但其正文確沒有使用任何<frame>元素,相對(duì)應(yīng)地使用了應(yīng)該由嚴(yán)格模式或者過(guò)渡模式指定的,標(biāo)準(zhǔn)的HTML結(jié)構(gòu)。那么在這種情況下,瀏覽器能做什么呢?

拒絕渲染該頁(yè)面?不,瀏覽器不敢這么做,在激烈的市場(chǎng)競(jìng)爭(zhēng)之中,如果因此而導(dǎo)致部分頁(yè)面無(wú)法渲染的話,就只能眼睜睜看著市場(chǎng)份額注入別家田了。所以瀏覽器頂多弱弱地報(bào)一個(gè)警告以示抗議,卻依舊得乖乖地解析出這個(gè)文檔并正確渲染。

這就是所謂的瀏覽器的“容錯(cuò)性”,事實(shí)上無(wú)論你的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的聲明簡(jiǎn)化了,只需要<!DOCTYPE html>即可。

正好前文所述,在HTML 4時(shí)代,標(biāo)準(zhǔn)制定者已經(jīng)認(rèn)識(shí)到,DOCTYPE對(duì)瀏覽器的渲染并沒有太大的幫助,除了給無(wú)聊的w3c驗(yàn)證器看以外,DOCTYPE似乎只有觸發(fā)瀏覽器兼容模式的作用。于是標(biāo)準(zhǔn)工作組采取了非常實(shí)際的態(tài)度,測(cè)試了所有課程順觸發(fā)標(biāo)準(zhǔn)模式的最簡(jiǎn)DOCTYPE,最終得出了這一結(jié)論。

但是故事不會(huì)這么簡(jiǎn)單,標(biāo)準(zhǔn)工作組也不是完成這么簡(jiǎn)單的動(dòng)作就撒手不管的無(wú)賴分子,事實(shí)上他們還是很盡責(zé)任地考慮到了向后兼容性、可擴(kuò)展性等一系列的事情,最后將DOCTYPE一章用了大量文字來(lái)進(jìn)行描述,得到一個(gè)非常詳實(shí)的結(jié)果。

HTML 5的參考手冊(cè)相關(guān)章節(jié)中,將DOCTYPE分為3類:

普通DOCTYPE - normal doctype

普通DOCTYPE就是我們所見的最簡(jiǎn)形式,即<!DOCTYPE html>,他的真正組成是這樣的:

•一段文本,即<!DOCTYPE,大小寫不敏感。

•1個(gè)或多個(gè)空格,關(guān)于空格的定義請(qǐng)參照簡(jiǎn)介中的解釋。

 •字符HTML,同樣大小寫不敏感。

•1個(gè)或多個(gè)空格。

•結(jié)束標(biāo)記,即>。

不再推薦的DOCTYPE - deprecated doctype

即所謂HTML 4時(shí)代的幾個(gè)DOCTYPE,其組成如下:

•一段文本,即<!DOCTYPE,大小寫不敏感。
 

•1個(gè)或多個(gè)空格。

•字符HTML,同樣大小寫不敏感。
 

•1個(gè)或多個(gè)空格。

•字符PUBLIC,大小寫不敏感。

•繼續(xù)1個(gè)或多個(gè)空格。

•一對(duì)引號(hào)或單引號(hào)(必須前后匹配),引號(hào)中放一個(gè)Public ID。

•可選內(nèi)容:

•1個(gè)或多個(gè)空格。

•一對(duì)引號(hào)或單引號(hào)(必須前后匹配),引號(hào)中放一個(gè)與前面的Public ID對(duì)應(yīng)的System ID。

•1個(gè)或多個(gè)空格。

•結(jié)束標(biāo)記,即>。

在標(biāo)準(zhǔn)中,Public ID和System ID是有嚴(yán)格的對(duì)應(yīng)關(guān)系的,如果規(guī)定的System ID不能有Public ID,則上面的第8項(xiàng)可選內(nèi)容也就不能存在。HTML5徹底放棄了HTML4中的過(guò)渡型和框架型的DOCTYPE,同時(shí)整合了XHTML的DOCTYPE聲明,得出以下6種組合方式:

•<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN">

•<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">

•<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">

•<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

•<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

•<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

遺留工具DOCTYPE - leagacy tool compatible doctype

顧名思義,完全是為了兼容久遠(yuǎn)時(shí)代的歷史遺產(chǎn)而準(zhǔn)備的DOCTYPE,甚至都已經(jīng)沒辦法考證什么樣的“工具”會(huì)搞出這種DOCTYPE來(lái)……遺留工具型的DOCTYPE的組成如下:

•一段文本,即<!DOCTYPE,大小寫不敏感。

•1個(gè)或多個(gè)空格。

 •字符HTML,同樣大小寫不敏感。

•1個(gè)或多個(gè)空格。

•字符SYSTEM,大小寫不敏感。

•繼續(xù)1個(gè)或多個(gè)空格。

•一對(duì)引號(hào)或單引號(hào)(必須前后匹配),引號(hào)中放一段文本about:legacy-compat,注意這段文本是大小寫敏感的。

•1個(gè)或多個(gè)空格。

•結(jié)束標(biāo)記,即>。

比如這樣的DOCTYPE就屬于此類:<!doctype HTML system "about:legacy-compat">,基本上除了大小寫,沒有什么值得改變的。

現(xiàn)實(shí)的細(xì)節(jié)

對(duì)于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)下,并沒有這么理想:

•對(duì)于IE6-9,如果DOCTYPE前存在注釋,會(huì)進(jìn)入Quirks模式。

 •對(duì)于IE6,如果DOCTYPE前存在一個(gè)XML聲明,會(huì)進(jìn)入Quirks模式。

寫完才發(fā)現(xiàn),問(wèn)題又全出在IE下……關(guān)于DOCTYPE的問(wèn)題糾結(jié)至此。

原文鏈接:http://www.cnblogs.com/GrayZhang/archive/2011/03/31/learning-html5-doctype.html

【編輯推薦】

  1. HTML 5標(biāo)準(zhǔn)學(xué)習(xí)入門之文檔結(jié)構(gòu)
  2. 學(xué)習(xí)HTML 5十佳站點(diǎn)推薦
  3. HTML 5標(biāo)簽、屬性、事件及兼容性速查表
  4. 10個(gè)超棒的HTML 5素描及繪畫設(shè)計(jì)工具
  5. 技術(shù)大牛談HTML 5設(shè)計(jì)原理
責(zé)任編輯:陳貽新 來(lái)源: Gray Zhang的博客
相關(guān)推薦

2011-03-29 09:42:43

HTML 5

2009-07-14 08:51:59

HTML 5視頻標(biāo)準(zhǔn)

2013-01-30 15:35:47

AdobeHTML5

2012-05-22 08:52:09

HTML5

2011-07-14 09:16:10

HTML 5

2013-06-24 13:38:34

HTML5 DataList

2009-10-12 08:52:31

HTML5標(biāo)準(zhǔn)

2012-01-16 15:36:37

ChromeHTML5

2014-10-31 14:32:20

CSSW3CISO

2011-11-09 10:05:26

HTML 5

2009-07-07 14:33:44

JSP入門

2010-04-16 10:01:43

2012-06-19 14:20:39

HTML5

2012-05-02 10:28:16

HTML5

2012-05-23 13:00:37

HTML5

2011-05-13 17:36:05

HTML

2013-05-14 10:24:39

HTML 5英特爾標(biāo)準(zhǔn)

2012-11-30 10:42:00

IBMdW

2018-03-15 11:50:53

機(jī)器學(xué)習(xí)入門Tensorflow

2011-04-11 10:14:47

HTML 5
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)