14. 为你的 HTML 文档选择适当的文档类型
- 详细资料
- 发布于 2012年9月18日
- 点击数:3799
序言
第13篇文章剖析了 HTML 文档的 head
部分,简要讲述了在 head
部分可包含的各种不同的元素,以及它们各自的功能。在本篇文章中,我将详细讲述 HTML 文档的文档类型(doctype),内容包括:文档类型所起的作用;它如何帮助你校验你的 HTML 文档;如何为你的文档选择一个正确的文档类型,以及 XML 声明(你一般不需要使用这种 XML 声明,但偶尔还是会遇到它)。
首先就需要声明文档类型
在你创建的任何 HTML 文档的开头部分,都应该首先声明文档类型定义(DTD)。如果此前你还从未听说过文档类型定义这个术语,也不用担心。为简便起见,文档类型定义通常被简称为“doctype”(文档类型),在本篇文章的以下部分我都使用“doctype”这个术语。
你也许还不清楚“DTD”或 doctype 究竟指什么。所谓 DTD,是“Document Type Definition”(文档类型定义)的缩写,它定义 HTML 文档中所使用的元素和属性遵守哪一种版本的 HTML 规范。尽管目前存在多个 HTML 规范,你也不必为此感到无所适从,你需要做的只是选定其中一个。
文档类型主要用于不同软件的以下两种情况:
- Web 浏览器使用文档类型来确定它该使用什么显示模式来显示 HTML 文档(关于显示模式,在后面还将更详细地讲述)。
- 标记校验器将检查文档类型以确定该使用什么规则来校验文档(在后面还将更详细地讲述)。
以上这两点都将对你编写的 HTML 文档有影响,我将在本篇文章的后面部分更详细地讲述。
以下是一个示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
你们可能还看不懂这段文档类型声明代码,因此下面我将简要地向你们解释这段代码的含义。如果你们想详细地了解其中每个字符究竟指什么,请阅读 !DOCTYPE 这篇文章。
在以上这个文档类型声明中,最重要的部分是放在引号里的两个字符串。第一个字符串即 "-//W3C//DTD HTML 4.01//EN"
,指明这是一个万维网(W3C)联盟发布的 DTD(文档类型定义)文档,DTD 描述的是 HTML 4.01 规范,DTD 中所使用的语言为英语。
第二个字符串,即 http://www.w3.org/TR/html4/strict.dtd
,是一个指向这种文件类型所用的 DTD 文档的 URL 地址。
虽然文档类型看起来可能有点奇怪,但 HTML 和 XHTML 规范都要求文档必须声明其文档类型。如果你未在文档中声明文档类型,则你在使用 W3C 标记校验器或其它用于检查 HTML 文档错误的工具检查你的 HTML 文档的语法时,就会被显示文档存在错误。一些 Web 浏览器甚至内建有这种检查功能;通过安装一个扩展件,其它浏览器也可以具有这种检查功能。
文档类型转换和显示模式
即使你未在 HTML 文档中声明文档类型,浏览器还是要处理和显示该文档。浏览器需要试着去渲染不论是多么奇怪的 Web 文档。尽管如此,由于存在所谓“文档类型转换”,如果你未在 HTML 文档中声明文档类型,则其在浏览器中实际显示出来的样子就可能不是你希望它显示出来的样子。
2000年以后发布的多数浏览器,都首先要查看所遇到的任何 HTML 文档的文档类型,并使用文档类型来确定编写 HTML 文档的人是否已根据 Web 标准适当地使用了 HTML 和 CSS。
如果浏览器发现文档中声明的文档类型是以适当的代码写入的,则会使用所谓“标准模式”来显示网页。在“标准模式”下,浏览器一般会根据 CSS 规范来显示网页,也就是说,浏览器信任编写网页的人,会按编写网页的人希望的样子显示网页。
另一方面,如果浏览器发现文档中声明的文档类型已过时或不完善,则会使用所谓“怪异模式(Quirks mode)”来显示网页,以向后兼容老习惯和老浏览器。在“怪异模式”下,浏览器会假定 HTML 文档是已过时的老式文档或未按 Web 标准编写的文档,这意味着网页虽然也会在浏览器中显示,但浏览器在渲染网页时要做很多处理,因此网页在浏览器中实际显示出来的样子可能就有些怪异或不好看,而不是你希望它显示出来的样子。
“标准模式”和“怪异模式”之间的差异,主要与 CSS 如何在浏览器中显示有关,基本上与浏览器如何处理 HTML 无关。作为一个 Web 设计师或开发员,你需要确保所有的浏览器都将以“标准模式”显示你设计或开发的网站,以实现具有一致性的显示效果,因此你应当遵循 Web 标准并使用适当的文档类型。
校验
我在前面已提到,HTML 校验器也会使用文档类型,关于 HTML 校验器在本课程后面的文章中还会详细讲述。现在你仅需知道 HTML 校验器是用于检查你的 HTML 文档的语法是否有任何错误的工具就够了。校验器会查看你所使用的文档类型,因而来确定该采用哪些规则来检查你的 HTML 文档。这有点类似于告诉拼写检查程序一个文档是用什么语言写成的,不然拼写检查程序就不知道该使用什么拼写和语法规则来检查你的文档。
选择文档类型
现在你们已经知道需要在 HTML 文档中插入文档类型以及它在文档中所起的作用了,你们也许会问,我怎么知道该选择哪一种文档类型呢?首先你要明白一点,文档类型不是只有一种,而是有很多种。如果你紧跟前沿技术,甚至可以创造出你自己的文档类型。不过为简明起见,我在这里就不向你们一一介绍很多种不同的文档类型了,而只推介两种文件类型。
如果你的文档是 HTML 文档,使用以下这种文档类型:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
如果你的文档是 XHTML 文档,使用以下这种文档类型:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
附注:“真正的”XHTML 应当以 XML 格式交付给浏览器解析,不过何时和如何该这样做,以及这样做的意义何在,已超出本篇文章的讲述范围了。
使用这两种文档类型,都可以确保浏览器会以“标准模式”处理和显示你的文档。使用这两种文档类型,最明显的效果可能就是当你用 CSS 对文档进行样式化时,在各种浏览器中会得到更具有一致性的显示效果。至于其它一些可供你使用的文档类型,你可以查阅万维网联盟(W3C)发布的,在你的 Web 文档中建议使用的 DTD 列表。
你们可能注意到了,我推荐你们使用的这两种文档类型都是所谓“严格型”(strict)的文档类型。尽管“严格型”这个词听起来有点严厉,其实不是这样的。
HTML 文档和 XHTML 文档都存在所谓“严格型”和“过渡型”(transitional)的文档类型。在我们这个示例中,“严格型”的文档类型指与“过渡型”文档类型相比,其中应尽可能少地包含表现性(presentational)的标记。实际上由于你应该使用 HTML 来定义文档的结构和含义,并使用 CSS 来确定文档如何被呈现,“严格型”的 HTML 文档和 XHTML 文档中都不应该再有表现性的标记。使用“严格型”的文档类型,将有助于实现这种结构和表现的分离,因为标记校验器会提醒你在你的 HTML 代码中是否混入了任何表现性的元素或属性。
XML 声明
前面我已经说过,在你的 HTML 文档的开头部分,需要首先声明文档类型。不过这是一种略微有点简单化的说法,因为 XML 声明可以位于文档类型之前。
在一些 XHTML 文档中,你可能看到在文档类型声明之前,有类似于下面这样的代码段:
<?xml version="1.0" encoding="UTF-8"?>
这被称为 XML 声明,如果要使用 XML 声明,则该声明需要位于文档类型之前。
Internet Explorer 6.0 在处理 XML 声明时有一个问题,即会用“怪异模式”来显示使用了 XML 声明的 Web 文档,这当然是文档编写者不希望看到的。
不过值得庆幸的是,除非你真的以 XML 格式将 XHTML 文档发送给浏览器(参见以上讲述 XHTML 部分的附注),并使用 UTF-8 字符编码以外的字符编码,且你使用的服务器不发送确定字符编码的 HTTP 消息头,你是不需要使用 XML 声明的。
由于以上提到的那三种情况同时发生的可能性是很小的,因此要解决 Internet Explorer 处理 XML 声明出现的问题,最简单的办法就是不在文档中添加 XML 声明,不过千万不要忘了声明文档类型。
总结
在你创建的所有 HTML 文档的开头部分,都应该首先声明文档类型,这是你必须牢记的。声明了文档类型,标记校验器就可以知道文档使用的是哪一个版本的 HTML 规范,从而能正确地向你报告文档中是否存在任何错误。此外,这也可以确保所有新式浏览器都以“标准模式”显示你的文档,从而在你用 CSS 对文档进行样式化时,在各种浏览器中会得到更具有一致性的显示效果。
练习题
- 在 HTML 文档中都应首先声明文档类型,这样做有两个主要目的,它们分别是什么?
- 与使用“过渡性”文档类型相比,使用“严格型”文档类型有哪些优越之处?
- 为什么使用 XML 声明可能造成出现问题?
- 在本篇文章中,我未提及“框架集”(frameset)文档类型,查查它是用来做什么的,并且它为什么不应该被使用。