你做了所有你認為正確的事情,但頁面在最新的瀏覽器里并不能正確表現。那是你書寫了無效的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" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
注重到后面的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" |
新聞熱點
疑難解答