你做了所有你認為正確的事情,但頁面在最新的瀏覽器中並不能正確表現。那是你書寫了無效的XHTML和CSS.你使用了W3C標準的文檔物件模型(DOM)來操作頁面動態元素。而在瀏覽器去表現這些標準時,你的網站失效了。這很有可能就是一個錯誤的文檔類型(DOCTYPE)所導致的。這篇文章就是為你提供DOCTYPE是如何運作的,還有解釋一些實際真實世界中這些文件類型的用法。
為什麼要使用文檔類型(Why a DOCTYPE?)
依據HTML和XHTML標準,一個DOCTYPE("document type declaration"的簡寫)是用來告訴瀏覽器你使用的是哪一個版本的(x)HTML,而且必須出現在每一個頁面的頂部。 DOCTYPE是網頁的一個重要組成部分:沒有他們,你的CSS將不再有效。
就像之前提及的ALA文章裡(其它有趣的地方也同樣),DOCTYPE也要適應其它的瀏覽器,比如Mozilla, IE5/Mac, 或者IE6,IE7。
一個新的DOCTYPE包含了一整個URI(sconf注:Universal Resource Identifier,通用資源標誌符)(一個完整的網址),它告訴那些瀏覽器去把頁面解析(render)成與標準相適的模型。把(X)HTML, CSS和DOM處理成你所期望的。
使用一個不完善或舊的DOCTYPE,甚至不使用DOCTYPE,它會使瀏覽器把它轉化成「Quirks」模型,此時瀏覽器假設你寫的是過時的,殘缺的90年代後的程式碼。
這樣設置,瀏覽器將嘗試用舊的標準解析你的頁面,把你的CSS解析成IE4標準。而回覆擁有者一個特殊的DOM(IE回覆的是IE的DOM,Mozilla和Netscape 6回覆的卻是他們認為的模型)。
無疑,這並不是你想要的。但卻是你常得到的。所以本文就想要修正這些不正確或是不完整的DOCTYPE。
(註:Opera瀏覽器不支援這些規則,它總是試著把網頁解析成標準適應型,別一方面,Opera對W3C的DOM也沒有提供太強有力的支持。但他們也能很好的運作) Ed:自從這篇文章第一次發布以來,Opera已經把適應的DOM(DOM-compliant)加到Opera7裡面了。
DOCTYPE去哪了? (Where HAVE ALL THE DOCTYPES GONE?)
儘管文檔類型在瀏覽器中的WEB標準是重要的有機構成,儘管W3C領導創建了WEB標準,你也同樣期望W3C的站點能提供一些合適的文檔類型,你也可能想更迅速簡單的找到這些信息,然而,在我寫這篇文章的時候,你還不能。 {Ed:W3C現在列出了一系列標準的DOCTYPEs在他的網站上,你能夠在W3C指南中看到這些,例如"My Web site is standard. And yours?」}
W3.org不是A List Apart, WebReference或Webmonkey.它原來無意於幫助WEB設計者,開發者,還有民間團體去加快他們認識和使用最新的科技。這不是他的工作。
W3C發布一系列的指南,儘管大多數的WEB設計者很少察覺。 #
你能在W3.org上整天的搜尋DOCTYPEs而不必去看那些專門的清單。並且當你確實下載一個DOCTYPE(一般是關係到一些特殊的建議或工作草案),而它並不能不正常的在你的站點工作。
遍及W3C站點的是缺少URIs(sconf註:即不是完的URI)的DOCTYPEs,這些DOCTYPEs是指向W3C自己網站的。一旦這些從W3C轉移到你自己的網頁上,這些URLs就會成為不存在的文檔了。
舉個例子中,許多站點的DOCTYPE是直接複製的W3.org上的:
以下為引用的內容: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
如果你看到了這個DOCTYPE的最後一部分("DTD/xhtml1-strict.dtd").你會發現這是一個對W3C網站的相對連結。這是在W3C站點上的而不是你的。所以這個URI對瀏覽器沒有作用。 (sconf註:當你訪問W3.org時,由於這是一個相對鏈接,所以才起作用)。
這個DOCTYPE其實應該改成:
以下為引用的內容: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
注意到後面的DOCTYPE包含了一個完整的URI。這樣一來就顯示了一個網路上的有效資源,瀏覽器就可以找到它,並把你的文件解析成標準適應(standards–compliant)型。
如何使用DOCTYPE(DOCTYPES THAT WORK)
那麼DOCTYPE該如何使用呢?很高興你會這樣問。下面完整的DOCTYPE就是我們所需要的:
HTML 4.01 嚴謹型,過渡型,框架型
以下為引用的內容: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" " http://www.w3.org/TR/html4/strict.dtd "> <!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 "> |
XHTML 1.0 嚴謹型,過渡型,框架型
以下為引用的內容: <!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.0 Transitional//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd "> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" " http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd "> |
XHTML1.1 DTD
以下為引用的內容: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" |