首頁  >  文章  >  web前端  >  DOCTYPE類型詳細介紹_HTML/Xhtml_網頁製作

DOCTYPE類型詳細介紹_HTML/Xhtml_網頁製作

WBOY
WBOY原創
2016-05-16 16:45:511168瀏覽

我們在HTML裡面聲明DOCTYPE一般會有以下幾種:




是的,這裡有HTML和XHTML,也有Transitional和Strict之分。顧名思義,XHTML是指這份文件是依照XML的格式來寫的,而HTML表示這個文件是依照HTML的格式來寫的。 Transition則表示這個文件達到了Transitional.dtd或loose.dtd的要求,Strict則表示這個文件達到了strict.dtd的要求。但事實上我們常常會存在以下的誤解:
(1) 我的文件是宣告為XHTML的,則我的文件肯定完全按照XML的格式。
(2) 我的文件是宣告為Strict的,則我的文件肯定是按照Strict Mode的方式來Render的,反之,是以Quirks Mode的方式來Render的。
這兩種理解都很直接,然而卻是錯誤的,我們也常常會犯這種的錯誤。
首先,文件宣告為XHTML和HTML,和文件的Parse(即瀏覽器對文件的分析)是沒有直接關聯的。事實上,瀏覽器如何Parse文件取決於伺服器以什麼格式來提供這個文件。通常情況下,有兩種方式,"text/html"和"application/xhtml xml"。只有以"application/html xml"方式來提供的文件才能夠被按照XML的方式來Parse。然而,因為瀏覽器的歷史原因,並不是所有的瀏覽器都支援"application/xhtml xml"格式的文檔,IE7之前的版本(包括IE7)就不能夠支援這種格式,如果IE7碰到這種格式的文檔,它會提示使用者另存為其它文件。考慮到IE使用的廣泛性,目前絕大部分的文檔都是以"text/html"的方式來提供的。以"text/html"方式來提供的文檔是按照HTML的語意來Parse的,大家都知道HTML的容錯性是非常強的,即使你的文檔裡面的TAG沒有正確地關閉,這個HTML也能夠被正確地顯示出來。因此如果你的XHTML是以"text/html"的方式來提供的(絕大多數情況下都是),那麼你即使在DOCTYPE裡面聲明了XHTML,你的文檔也不是以XML的格式來Parse的,因此也不能保證你的文件是嚴格遵守XML的規範的。事實上,很多專家都建議如果你的文件不是以"application/xhtml xml"的方式來提供的,那麼你就應該聲明為HTML。
其次,瀏覽器以什麼樣的方式來Render你的文檔,並不以你聲明的DTD來決定的。事實上,如果你宣告了DOCTYPE和DTD,你的文件就是以Strict Mode(或稱為Standard Mode,很多瀏覽器還包括Almost Standard Mode的方式,這裡不進行區分)方式來Render的。對於沒有DOCTYPE的文檔,才是以Quirks Mode方式來Render的。因此瀏覽器的Render模式和你聲明的DTD並沒有直接的關係。
最後,你宣稱為Strict.dtd還是Transitional.dtd,在目前的瀏覽器看來是沒有什麼差別的。 Strict.dtd比Transitional.dtd或loose.dtd要嚴格多了,很多元素在strict.dtd裡面都不能使用。然而因為瀏覽器的兼容性,即使你在DOCTYPE裡面聲明了Strict.dtd,瀏覽器遇到strict.dtd裡面不允許的元素,也能夠正確地顯示你的文件。我猜瀏覽器並沒有將DTD考慮進去。例如iframe這個TAG在strict.dtd裡面並不存在,但即使你的DOCTYPE裡面宣告了strict.dtd,然後使用了iframe這個TAG,瀏覽器(包括IE7,IE8,FF3.0,Safari 3.0)都能夠正確地顯示你的文件。瀏覽器並沒有按照你聲明的DTD來Parse你的文件。目前能夠確保你的文件是符合strict.dtd還是Transitional.dtd的,只能透過一些網路上的Validator,如W3C Validator來分析,瀏覽器並不能夠給你很好的支援。當然,實際上如果你能夠嚴格按照你聲明的DTD來書寫你的文檔,那是最好的,這樣保證了以後瀏覽器對DTD嚴格遵守的時候,你的文檔不會產生錯誤。
因此,
(1) 如果你的文件是以"text/html"的方式來提供的,那麼你就應該聲明為HTML。假如你想要讓IE7能夠正確地顯示,那麼你就更應該這麼做了。
(2) 如果你的文件宣告為XHTML,那麼你應該以"application/html xml"的方式來提供。
(3) 盡量在你的文檔前面聲明DOCTYPE和DTD,這樣能夠保證你不是以Quirks Mode的方式來Render文檔的。
(4) 如果你聲明了DTD,那麼就要嚴格按照DTD的要求來書寫你的文件。特別是如果你聲明了Strict.dtd,那麼你應該注意哪些元素是不能夠使用的。
注意:隨著時間的發展,瀏覽器對HTML和XHTML,Strict.dtd和Transitional.dtd的支援會比較好。如果你的瀏覽器比IE7, IE8, FF 3.0和Safari 3.0要高很多很多的版本,那麼你要注意本文的適用性。
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn