
在你创建的任何 HTML 文档的开头部分,都应该首先声明文档类型定义(DTD)。所谓 DTD,是“Document Type Definition”(文档类型定义)的缩写,它定义 HTML 文档中所使用的元素和属性遵守哪一种版本的 HTML 规范。
文档类型主要用于不同软件的以下两种情况:
1.Web 浏览器使用文档类型来确定它该使用什么显示模式来显示 HTML 文档(关于显示模式,在后面还将更详细地讲述)。
2.标记校验器将检查文档类型以确定该使用什么规则来校验文档(在后面还将更详细地讲述)。
以下是一个示例:
"http://www.w3.org/TR/html4/strict.dtd">
在以上这个文档类型声明中,最重要的部分是放在引号里的两个字符串。第一个字符串即 "-//W3C//DTD HTML 4.01//EN",指明这是一个万维网(W3C)联盟发布的 DTD(文档类型定义)文档,DTD 描述的是 HTML 4.01 规范,DTD 中所使用的语言为英语。
第二个字符串,即 http://www.w3.org/TR/html4/strict.dtd,是一个指向这种文件类型所用的 DTD 文档的 URL 地址。
文档类型转换和显示模式
即使你未在 HTML 文档中声明文档类型,浏览器还是要处理和显示该文档。浏览器需要试着去渲染不论是多么奇怪的 Web 文档。尽管如此,由于存在所谓“文档类型转换”,如果你未在 HTML 文档中声明文档类型,则其在浏览器中实际显示出来的样子就可能不是你希望它显示出来的样子。
2000年以后发布的多数浏览器,都首先要查看所遇到的任何 HTML 文档的文档类型,并使用文档类型来确定编写 HTML 文档的人是否已根据 Web 标准适当地使用了 HTML 和 CSS。
如果浏览器发现文档中声明的文档类型是以适当的代码写入的,则会使用所谓“标准模式”来显示网页。在“标准模式”下,浏览器一般会根据 CSS 规范来显示网页,也就是说,浏览器信任编写网页的人,会按编写网页的人希望的样子显示网页。
另一方面,如果浏览器发现文档中声明的文档类型已过时或不完善,则会使用所谓“怪异模式(Quirks mode)”来显示网页,以向后兼容老习惯和老浏览器。在“怪异模式”下,浏览器会假定 HTML 文档是已过时的老式文档或未按 Web 标准编写的文档,这意味着网页虽然也会在浏览器中显示,但浏览器在渲染网页时要做很多处理,因此网页在浏览器中实际显示出来的样子可能就有些怪异或不好看,而不是你希望它显示出来的样子。
“标准模式”和“怪异模式”之间的差异,主要与 CSS 如何在浏览器中显示有关,基本上与浏览器如何处理 HTML 无关。作为一个 Web 设计师或开发员,你需要确保所有的浏览器都将以“标准模式”显示你设计或开发的网站,以实现具有一致性的显示效果,因此你应当遵循 Web 标准并使用适当的文档类型。
选择文档类型
如果你的文档是 HTML 文档,使用以下这种文档类型:
"http://www.w3.org/TR/html4/strict.dtd">
如果你的文档是 XHTML 文档,使用以下这种文档类型:
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
附注:“真正的”XHTML 应当以 XML 格式交付给浏览器解析,不过何时和如何该这样做,以及这样做的意义何在,已超出本篇文章的讲述范围了。
使用这两种文档类型,都可以确保浏览器会以“标准模式”处理和显示你的文档。使用这两种文档类型,最明显的效果可能就是当你用 CSS 对文档进行样式化时,在各种浏览器中会得到更具有一致性的显示效果。
HTML 文档和 XHTML 文档都存在所谓“严格型”和“过渡型”(transitional)的文档类型。在我们这个示例中,“严格型”的文档类型指与“过渡型”文档类型相比,其中应尽可能少地包含表现性(presentational)的标记。实际上由于你应该使用 HTML 来定义文档的结构和含义,并使用 CSS 来确定文档如何被呈现,“严格型”的 HTML 文档和 XHTML 文档中都不应该再有表现性的标记。使用“严格型”的文档类型,将有助于实现这种结构和表现的分离,因为标记校验器会提醒你在你的 HTML 代码中是否混入了任何表现性的元素或属性。
XML 声明
前面我已经说过,在你的 HTML 文档的开头部分,需要首先声明文档类型。不过这是一种略微有点简单化的说法,因为 XML 声明可以位于文档类型之前。
在一些 XHTML 文档中,你可能看到在文档类型声明之前,有类似于下面这样的代码段:
这被称为 XML 声明,如果要使用 XML 声明,则该声明需要位于文档类型之前。
Internet Explorer 6.0 在处理 XML 声明时有一个问题,即会用“怪异模式”来显示使用了 XML 声明的 Web 文档,这当然是文档编写者不希望看到的。
不过值得庆幸的是,除非你真的以 XML 格式将 XHTML 文档发送给浏览器(参见以上讲述 XHTML 部分的附注),并使用 UTF-8 字符编码以外的字符编码,且你使用的服务器不发送确定字符编码的 HTTP 消息头,你是不需要使用 XML 声明的。
由于以上提到的那三种情况同时发生的可能性是很小的,因此要解决 Internet Explorer 处理 XML 声明出现的问题,最简单的办法就是不在文档中添加 XML 声明,不过千万不要忘了声明文档类型。
