2011年9月5日星期一

DTD文檔類型聲明doctype

DTD文檔類型聲明doctype

http://www.inspirr.com

HTML是萬維網上發布超文本的通用語言[1]。從1982年Tim Berners-Lee簡化SGML建立HTML的原始定義到2001年發布XHTML1.1規范,HTML成為了有多個版本的國際標準[2]。各版本的規范都用一種機器可讀的語言定義,它描述了法定結構、元素和屬性,這就是文檔類型定義(Document Type Definition),簡稱DTD。
相關文章:HTML代碼學習:DOCTYPE的縮寫
DTD描述了文檔類型聲明(DTD declaration,簡稱doctype[3])位于HTML文檔最前面,它是聯系文檔和DTD指令。比如HTML4.01 Strict的doctype是:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
 "http://www.w3.org/TR/html4/strict.dtd">
它指明了文檔使用的HTML版本,這是諸如瀏覽器之類的工具解析文檔時最需要的信息。比如W3C的驗證工具可依據它來檢查語法和指出錯誤。

早期瀏覽器對標準的錯誤實現、私有擴展的大量滋生和為了向前兼容以及早期標準本身的混亂等導致了那時的文檔既沒有doctype也沒有對DTD的直接引用,也導致了新的標準難以得到應用和普及,因為瀏覽器無法區分它們。為了處理根據Web標準創作的網頁和根據陳舊實踐創作的網頁,Todd Fahrner 在1998年提出了“came up with a toggle”方法[4]能允許瀏覽器提供兩套渲染模式: 即有完整的doctype的文檔使用W3C的標準進行解析,否則使用舊的方式解析。
這個方法符合實際且簡單有效。兩年后,Mac版IE上首次運用,很快的其他瀏覽器制造商紛紛采用, 這就誕生了doctype嗅探(doctype sniffing或doctype switching)。瀏覽器通過它來決定其引擎應該采用標準模式、準標準模式還是怪癖模式,這將對HTML和CSS的解析、CSS布局及JavaScript腳本產生非常大的影響[5] 。毫無疑問,我們應該盡可能的采用標準模式。
HTML5雖然還處于草案中,但最新瀏覽器Firefox3.5、Chrome2、Safari4和IE8已經開始支持部分特性,特別是Google Wave的發布掀起了推進HTML5實踐的新高潮。HTML5并不基于SGML也沒有DTD,但它為了向前兼容,接受了doctype嗅探這個事實,定義了在text/html中doctype是唯一的模式轉換聲明,除此外沒有什么用處。其doctype如此簡潔:<!doctype html>[6] 。
值得一提的是IE8為了解決向前兼容采用了X-UA-Compatible聲明[7],導致在IE8中瀏覽器的渲染模式不僅僅取決于doctype嗅探還取決于X-UA-Compatible聲明,這個不僅僅導致了模式判斷更加復雜[8],也違背了web設計的逐漸增強(progressive enhancement)思想[9]。
在web標準的道路上,我們不僅需要充滿現實主義向前兼容,更需要充滿理想主義的向后兼容,這是保證我們的web能在未來正常工作的希望。在標準、簡單和逐漸增強的思想下,現在我們頁面的最佳方案或許是:
<!doctype html>
…
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
…
注釋:
[1] HTML is the lingua franca for publishing hypertext on the World Wide Web [2] http://zh.wikipedia.org/wiki/Html [3] DTD declaration在以前規范中也常叫Document Type Declaration,很容易和DTD混淆。 [4] http://web.archive.org/web/20030212115103/http://www.geocrawler.com/archives/list-name.mbox/123/1998/7/0/1037920/ [5] 用doctype激活瀏覽器模式 [6] http://www.w3.org/TR/html5/syntax.html#the-doctype [7] 超越文檔類型,web標準化向前兼容和IE8 [8] http://dancewithnet.com/2009/06/14/activating-browser-modes-with-doctype/#ie8modes [9] Web標準前途是否依賴瀏覽器技術
  Tag: 設計公司 | 網頁設計公司 | 廣告公司 | 網站設計 | 平面設計 | 互動媒體 | 網頁設計 | Web design | Website design | design house | 媒體公司 | Iphone app | 程式設計 | Flash 網頁 | Flash game | 動畫設計 | 後期製作 | 網上商店 | 網上宣傳 | 網頁服務 |

没有评论:

发表评论