2.4 DOCTYPE


2.4 DOCTYPE


HTML





<!-- 下面几个DOCTYPE会使浏览器处于近乎标准的模式。
第一个是针对XHTML的,第二个是针对HTML的。
本书中的所有例子使用的都是第一种。-->


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">



内容类型与DOCTYPE


网页服务器用MIME内容类型来解析每一个它们存放的文档。MIME的意思是多部分互联网邮件扩展(Mutipart Internet Mail Extension)。内容类型是在文档的HTTP头部里识别的。浏览器根据文档的MIME内容类型来决定以何种方式处理此文档。当它发现文档的内容类型为text/html时,它会把这个文档看作HTML。


根据W3C的注解“XHTML Media Types”(www.w3.org/TR/xhtml-media-types/),网页服务器会把XHTML当作以下3种内容类型来处理。


XHTML文档可能会被当作text/html,这只有在你不想把文档看作XML,并且不含有其他XML命名空间中的内容(比如,MathML)的时候发生。当浏览器接收到一个附有text/html的XHTML文档时,就会把它当作HTML。


XHTML应当被看作application/xhtml+xml。但是,IE 7及其早期版本拒绝以这种方式显示页面。


也可能把XHTML当作application/xml或者text/xml。但是,IE 7和它的早期版本只会把这样的文档看作普通的XML,这就意味着它们会忽略所有XHTML的语义,意味着链接和表单都将失效,解析文档的时间也变得更长。


基于Gecko的浏览器(比如Firefox 2)只有当文档全部下载完毕并且没有任何编写错误的情况下,才会去解析附有XML内容类型的文档。而无论文档的DOCTYPE如何,它都会以严格模式来解析文档(参见 www.mozilla.org/docs/web-developer/faq.html#accept)。


当前,对于处理XHTML网页最可靠的内容类型为text/html。它会让浏览器把文档当作HTML来解析。这种解决办法得到了W3C的支持,而且它在所有主流的浏览器中都可正常运行。这个办法之所以有效,是因为浏览器不对HTML进行校验——包括文档所包含的任何错误。而恰恰相反的是,浏览器在处理XHTML文档的时候,它只要有一个错误,那些XML规则就会阻止浏览器解析整个文档——哪怕是由偶然的错拼造成的一个非常小的错误!这种精确在机器与机器之间的处理至关重要,但是对人为设计的网页来说,这并不是什么好事。


DOCTYPE



















别名


元数据声明。


问题


需要声明文档的类型,以使根据某种文档类型定义(Document Type Definition,简称DTD)对它进行校验。需要确保文档是符合规范的,确保网页浏览器在解析它的时候也遵循同样的规则。


解决方案


开场白<!DOCTYPE>识别出文档是按照哪种HTMLXHTML类型和版本来编写的。从技术上来说,<!DOCTYPE>用于定义文档类型和DTD(它用于对文档进行校验)。W3C提供了一个免费在线服务:http://validator.w3.org/,可以用它对文档进行校验。


所有的HTMLXHTML代码都应当是经过校验的。这确保代码中不会含有任何错误。如果有错误存在,CSS选择符可能会无法按你的意愿选择元素,甚至选择了错误的元素。


使用XHTML有许多好处。经过校验的XHTML文档是合式的并且具有清晰的架构。也可以用XSLTXQUERY处理器从其中提取内容和对文档进行重组。


还有另外两种DOCTYPE:严格型和过渡型。严格型去掉了所有表现类的元素和属性,过渡型则没有。我不建议使用表现类的元素和属性,不过严格型DOCTYPE或许对某些需求来说过于严格了。举个例子,它禁止使用<ol>中的start属性和<li>中的value属性,它们是唯一控制有序列表中的排序方法。严格型DOCTYPE<iframe>也采取了禁用。


CSS来说最重要的是,浏览器使用<!DOCTYPE>来决定解析文档时所采取的方法离CSS的标准到底有多近。有两种基本的模式:混乱模式与标准模式。混乱模式quirks mode)下,浏览器不会遵循CSS标准,这使得此种模式在用CSS时非常不受欢迎。而标准模式standards mode)下,它们会与CSS的规范保持一致。


令问题更加恶化的是,在严格模式下的IE会违反部分CSS规范:表格单元格中的图片不根据基准来对齐。它这么做是想删掉图片下的基准空格,这样表格中被分割的小图片才能照常显示。主流浏览器还拥有一种模式:近乎标准模式almost-standards mode),其中也含有这种非标准的行为。


IE的标准模式和另一种浏览器的准标准模式是两种兼容性最好的模式。主要有两种<!DOCTYPE>声明会触发这个兼容性等级:一个是XHTML的,一个是HTML的。左面例子里的那两条即是。你可以找到一个完整的DOCTYPE列表:http://hsivonen.iki.fi/doctype/


适用范围


<!DOCTYPE>必须是HTML文档的第一项。每个文档必须有且只有一个<!DOCTYPE>不能在这个DOCTYPE之前放有XML声明就像<?xml version= "1.0" ?>否则IE 6会触发混乱模式。


相关


XHTML



标签:
Warning: Invalid argument supplied for foreach() in C:\zl\webjia\view.php on line 50
友情链接
轻松育儿世界奇观
苏ICP备16066217号-2