我们在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要高很多很多的版本,那么你要注意本文的适用性。
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年11月05日
2024年11月05日
- 雨林唱片《赏》新曲+精选集SACD版[ISO][2.3G]
- 罗大佑与OK男女合唱团.1995-再会吧!素兰【音乐工厂】【WAV+CUE】
- 草蜢.1993-宝贝对不起(国)【宝丽金】【WAV+CUE】
- 杨培安.2009-抒·情(EP)【擎天娱乐】【WAV+CUE】
- 周慧敏《EndlessDream》[WAV+CUE]
- 彭芳《纯色角3》2007[WAV+CUE]
- 江志丰2008-今生为你[豪记][WAV+CUE]
- 罗大佑1994《恋曲2000》音乐工厂[WAV+CUE][1G]
- 群星《一首歌一个故事》赵英俊某些作品重唱企划[FLAC分轨][1G]
- 群星《网易云英文歌曲播放量TOP100》[MP3][1G]
- 方大同.2024-梦想家TheDreamer【赋音乐】【FLAC分轨】
- 李慧珍.2007-爱死了【华谊兄弟】【WAV+CUE】
- 王大文.2019-国际太空站【环球】【FLAC分轨】
- 群星《2022超好听的十倍音质网络歌曲(163)》U盘音乐[WAV分轨][1.1G]
- 童丽《啼笑姻缘》头版限量编号24K金碟[低速原抓WAV+CUE][1.1G]