在推广web标准的今天,那些崇尚web标准的人经常说xhtml比html更加严格,当然从某种意义上说是的,比如它要求所有的标签关闭并且所有的属性都用引号。但其实xhtml 1.0还分两种(加上frameset doctype的话算三种,本文不讨论),transitional(过渡型)和strict(严格)doctypes。并且html 4.01也有同样的文档声明。
从字面上就可以看出来意思:transitional doctypes只是为了实现从旧时代到新时代的过渡,而且strict doctypes是默认的文档声明, 对构造html 4.01和xhtml 1.0都适用。
使用transitional doctype一般是由于代码中含有过多陈旧的写法,并且一下子很难完全转换到strict doctype来。但是strict doctype才应该是你的目标。它鼓励甚至有时是强迫你把结构与表现区分开来,把表现层的代码都写在css里。html 4 document type definition:
本html 4.01 strict dtd不包括表现层属性和标签,w3c将逐渐淘汰这些属性和标签,您完全可以使用样式表来实现。您应该使用strict dtd,如需获得表现层属性和标签的支持,请使用transitional dtd。
用strict doctype还有一个好处,即可以让浏览器使用它们最严格、(一定程度上)最符合标准的模式来渲染页面。
tommy olsson在web standards group的ten questions for tommy olsson一文中很好的阐述了使用strict的好处:
我觉得,使用strict dtd,无论是html 4.01 strict还是xhtml 1.0 strict,远比讨论是用html还是xhtml重要的多。它代表了未来互联网的质量。它将结构和表现分开,使得维护一个站点非常容易。
对于刚开始接触web standards和正确的、语义化的结构的人,认清transitional和strict doctypes的区别非常重要。更多详细列表请参考:xhtml: differences between strict & transitional、comparison of strict and transitional xhtml和xhtml1.0 element attributes by dtd。
对于准备向strict进发的人来说,两者的有些区别很可能会使开发者犯错误,接下来我将会谈到。
元素类型的内容模型描述了什么样的元素类型实例可以被包含。这一点上,两种文档声明的最大区别在于blockquote, body, 和form元素仅能够包含块级元素,如:
在向strict doctypes过渡的过程中,了解每个元素是做什么的比知道每个元素长啥样有效的多。
首先考虑结构和语义,然后再担心表现。
新闻热点
疑难解答