国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > HTML > 正文

DOCTYPE類型詳細介紹

2024-08-26 00:08:55
字體:
來源:轉載
供稿:網友

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

注意:隨著時間的發展,瀏覽器對html和xhtml,strict.dtd和transitional.dtd的支持會更好。如果你的瀏覽器比ie7, ie8, ff 3.0和safari 3.0要高很多很多的版本,那么你要注意本文的適用性。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 赣州市| 中方县| 灵璧县| 全椒县| 康定县| 荣成市| 蛟河市| 三江| 阿瓦提县| 遂川县| 鄂温| 诏安县| 盐边县| 康乐县| 绥化市| 济宁市| 元阳县| 工布江达县| 平利县| 略阳县| 象州县| 法库县| 达日县| 垫江县| 富民县| 体育| 上杭县| 石棉县| 报价| 屏东县| 中阳县| 丹寨县| 龙川县| 沙坪坝区| 台湾省| 阿拉尔市| 凌源市| 博罗县| 宽城| 昆明市| 壶关县|