<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    常言笑的家

    Spring, Hibernate, Struts, Ajax, RoR

    DOCTYPE, HTML和XHTML, Strict DTD和Transitional DTD, Quirks Mode和Standard Mode

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

    <!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 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <!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">

    是的,這里有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,那么你應該注意哪些元素是不能夠使用的。

    注意:本文發布于2008.5.20。隨著時間的發展,瀏覽器對HTML和XHTML,Strict.dtd和Transitional.dtd的支持會更好。如果你的瀏覽器比IE7, IE8, FF 3.0和Safari 3.0要高很多很多的版本,那么你要注意本文的適用性。

    posted on 2009-12-10 10:49 常言笑 閱讀(1514) 評論(0)  編輯  收藏 所屬分類: 技術總結

    My Links

    Blog Stats

    常用鏈接

    留言簿(5)

    隨筆分類

    隨筆檔案

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 黄色网页在线免费观看| 亚洲暴爽av人人爽日日碰| 免费萌白酱国产一区二区三区| 亚洲福利中文字幕在线网址| 亚洲av纯肉无码精品动漫| 国产免费一区二区三区VR| 国产精品国产亚洲区艳妇糸列短篇| 四虎成人免费网址在线| 亚洲AV色欲色欲WWW| 亚洲狠狠爱综合影院婷婷| 久青草视频97国内免费影视| 亚洲va无码专区国产乱码| 91香蕉在线观看免费高清| 亚洲伊人久久大香线焦| 大学生美女毛片免费视频| 猫咪免费人成在线网站| 亚洲精品无码精品mV在线观看| 久久精品视频免费看| 久久精品亚洲AV久久久无码 | 亚洲av综合av一区| 91成人在线免费视频| 亚洲国产日韩综合久久精品| 国产免费AV片无码永久免费| 中国国产高清免费av片| 亚洲成人免费在线观看| 日本免费一区二区三区最新vr| 一级毛片a免费播放王色电影| 亚洲精品二区国产综合野狼| 99无码人妻一区二区三区免费| 久久亚洲AV成人无码国产最大| 亚洲日韩小电影在线观看| 免费在线视频你懂的| 国产精品亚洲天堂| 亚洲日本中文字幕区| 在线观着免费观看国产黄| a色毛片免费视频| 亚洲一区二区三区高清在线观看| mm1313亚洲精品无码又大又粗| 无码人妻精品中文字幕免费| 亚洲av无码无线在线观看| 亚洲AV成人片色在线观看 |