3. XHTML

3.1. Web标准

3.1.1. Web标准的由来

还在 Internet Explorer 和已经停止开发并由 Firefox 继承其衣钵的 Netscape Navigator(网景浏览器)[[1]](http://dwz.cn/wjllqwjbk)[[2]](http://zh.wikipedia.org/wiki/%E7%BD%91%E6%99%AF%E5%AF%BC%E8%88%AA%E8%80%85)展开第一次浏览器大战的时代,网页设计人员常常会有这样的体验:

  • 为保证兼容性,需要为不同的浏览器编写不同的代码
  • 当类似WAP[[3]](http://baike.baidu.com/view/660335.htm)[[4]](http://zh.wikipedia.org/wiki/%E6%97%A0%E7%BA%BF%E5%BA%94%E7%94%A8%E5%8D%8F%E8%AE%AE)[[5]](http://zh.wikipedia.org/wiki/%E7%84%A1%E7%B7%9A%E6%A8%99%E8%A8%98%E8%AA%9E%E8%A8%80) 手机上网等的网络技术或交互设备出现时,需要制作一个新版本来支持这种技术或设备
  • 由于早期 HTML 语法规则较为松散,web 上充斥着大量包含错误的网页
<marquee>跑马灯</marquee>
<blink>闪烁文字</blink>
<wml>
    <card id="main" title="First Card">
        <p mode="wrap">示例 WML 网页</p>
    </card>
</wml>
<p><B><i>显示为粗体或斜体的文本</I></b>

上面三组代码分别演示了这种混乱的情况:

  • marquee 和 blink 元素分别用于在 IE 和网景浏览器中呈现跑马灯和闪烁效果,但它们并不通用,在对方浏览器中需要使用其它方法(如 javascript)来实现
  • 在使用带宽较低的 2G 网络的手机中,需要使用 WML 这种标记语言来制作页面
  • 虽然存在嵌套不正确、没有结束标签等语法问题,浏览器仍可能正确呈现它们,这迁就了 web 初期那些没有经验的开发人员,但是需要浏览器具有较强的容错能力,增加了浏览器的复杂程度,在要求精简的移动设备中部署这样的浏览器并不容易

这是互联网的一个基础性问题,为了解决它,需要建立一种普遍认同的标准来结束这种无序和混乱。

因此,在 W3C 的组织下,Web标准开始逐渐开始被建立,并在 Web标准组织的督促下推广执行,这就是始于 2000 年前后的“Web标准化运动”。在国内,直到 2004 年,以“与用户互动,由用户来产生内容”为核心的 Web 2.0 概念在 IT 业炒得火热,作为其技术基础的 Web标准 才逐渐被人们接受并采纳。

制定这些标准是为了更好的约束浏览器开发厂商,遵循统一标准,降低开发者的难度,让 web 设计和开发人员的作品能更好的:

  • 跨越平台障碍:Windows、Mac OS、Linux 等
  • 跨越浏览器的障碍:IE、Firefox、Chrome、Safari 等
  • 跨越设备的障碍:PC、手持设备、手机、打印设备 等
  • 跨越用户障碍:色盲、色弱、视力不好、肢体残疾 等[[6]](http://www.qicaispace.com/teach/css/page01/css26.asp)

3.1.2. Web标准的内容

要理解Web标准,首先需要辨析几个概念:

  • 内容(content):就像之前介绍过的,包含在元素开始与结束标签之中的数据被称为内容,即网页实际要传达的真正信息,包含数据、文本或者图片等。注意这里强调的“真正”,是指纯粹的数据信息本身,不包含辅助的导航菜单、装饰性图片等
  • 结构(structure):在只有内容的文档中,信息是完整的,但是混乱一团,难以阅读和理解,必须把它格式化一下,把不同部分的内容区分成标题、作者、章、节、段落和列表等,这就是所谓的结构。结构使内容更加具有逻辑性,易用性
  • 表现(presentation):虽然定义了结构,但是内容还是原来的样式没有改变,例如标题字体没有变大,正文的颜色也没有变化,没有背景,没有修饰。所有这些用来改变内容外观的东西,被称为表现
  • 行为(behavior):对内容、结构、表现的交互及操作效果即是行为,如内容、结构、表现的变化、元素的运动、表单提交前针对用户填写数据的有效性判断、响应鼠标在某一元素上的单击操作等

抽象一点理解,“内容”是基础层,然后是附加上去“结构”层和“表现”层,最后再对它们做点“行为”。

传统的 HTML 4.01 及之前的版本中,结构与表现混杂在一起,既有控制结构的元素,如 title、p 等,又有控制表现的元素,如 font、b 等,还有本意用于结构后来可能被滥用于控制表现的元素,如 h1、table 等。

Web标准认为网页主要由结构、表现、行为三部分组成,并主张结构清晰化,将内容、结构与表现相分离。随着网页复杂程度的增加和网站规模的扩大,这种划分符合社会分工的要求,可以在网站改版、开发协作时带来诸多好处。

因此,Web标准不是某一个标准,而是一系列标准的集合。对应的标准也分三方面:

这些标准大部分由 W3C 或其它一些标准组织(如 欧洲计算机制造商协会,European Computer Manufacturers Association,ECMA)起草和发布,我们后续会陆续介绍这些相关标准的细节。

3.2. XHTML 基本概念

在制定结构层的标准时,人们首先想到的是借助在 1995 年即有雏形的 XML(可扩展标记语言,eXtensible Markup Language)来统一整个 web。和 HTML 一样,XML 同样来源于 SGML,最初设计它的目的是弥补 HTML 的不足,以强大的扩展性满足网络信息发布的需要,后来逐渐用于网络数据的转换和描述。XML 的最大特点在于人们可以根据自己的需要定义元素、属性等,在此基础之上由 XML 衍生出许多应用在不同领域的标记语言,如 SVGRSSMathML 等。在 web 出版领域使用另外一种基于 XML 的标记语言代替 HTML 是可行的。

于是,XHTML(eXtensible HyperText Markup Language,可扩展超文本标记语言)应运而生,在 W3C 的主导下,它的 1.0 版本 XHTML 1.0 在 2000 年 1 月成为推荐标准,其后又发展出 XHTML 1.1XHTML 2.0 两个版本,不同版本之间存在较大差别[[7]](http://www.chinaz.com/design/2007/0910/15986.shtml)[[8]](http://z15011536535.blog.163.com/blog/static/16373405520106313593479/),本书将以 XHTML 1.0 版本为基础阐述 XHTML 的基本特点。

以下几个说法可以很好的界定 XHTML:

  • XHTML 与 HTML 4.01 几乎是相同的;
  • XHTML 是使用 XML 语法的 HTML
  • XHTML 是一种基于 XML 的应用;
  • XHTML 是更严格更纯净的 HTML 版本。

在一些其它资料中,还有一些关于 XHTML 的描述,如 XHTML的目标是取代 HTML、XHTML 是 W3C 推荐的标准因此代表了浏览器的发展方向,这些说法在一定时期是正确的,但是随着时间的推移,web 相关技术在不断微调演进,目前已经不合时宜。

3.3. XHTML 基本内容

下面我们将从以下几个方面介绍 XHTML 的基本内容:

  1. 选择合适的DOCTYPE
  2. 指定xmlns
  3. 定义语言编码
  4. XHTML中的元素
  5. XHTML代码规范
  6. XHTML校验与常见错误

3.3.1. 选择合适的DOCTYPE

DOCTYPE 是 document type(文档类型)的简写,是指示 web 浏览器关于页面使用哪个 HTML 版本进行编写的指令,它不是 HTML 元素,必须是 HTML 文档的第一行,位于 <html> 标签之前。要建立符合标准的网页,DOCTYPE 声明是必不可少的关键部分。

虽然之前并没有提到过,但是使用 HTML 4.01 创建的网页也应该指定相应 DOCTYPE 声明,如:

HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">

以上是 HTML 4.01 中三个不同类型的 DOCTYPE 声明,每种声明都提供了一个扩展名是 .dtd 的文档类型定义[[9]](http://zh.wikipedia.org/wiki/%E6%96%87%E4%BB%B6%E7%B1%BB%E5%9E%8B%E6%8F%8F%E8%BF%B0)Document Type Definition,DTD)文件用于验证其后的 HTML 代码中是否使用了正确的元素。

同样的,对于语法要求更严格的 XHTML 文档来说,DOCTYPE 声明不可或缺:

html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

它们分别代表了三种不同的 XHTML 文档类型:

  • 过渡的(Transitional):要求非常宽松的文档类型,它允许你继续使用HTML 4.01 的元素,但是要符合 XHTML 的语法;
  • 严格的(Strict):要求严格的文档类型,不能使用任何表现层的元素和属性,例如 font 元素、color 属性等;
  • 框架的(Frameset):专门针对框架页面设计使用的文档类型,如果页面中包含有框架,需要采用这种文档类型声明。

对于文档类型声明的选择,理想的情况当然是选择严格的DTD(XHTML 1.0 Strict);但对于大多数刚接触Web标准的网页设计人员来说,过渡的DTD(XHTML 1.0 Transitional)是比较现实的选择,因为这种 DTD 允许使用表现层的元素和属性,也比较容易通过 W3C 的代码校验。

3.3.2. 指定xmlns

xmlns 是 XML NameSpace,即 XML 命名空间[[10]](http://zh.wikipedia.org/wiki/XML%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4)的意思,由于 XML 的元素、属性等是可以自行定义的,两个内容和含义不同的文档很可能具有相同的元素或属性,为了区分这两个 XML 文档,可以为它们分别指定不同的命名空间,如:

<table xmlns="http://www.w3.org/TR/html4/">
    <tr>
        <td>Apples</td>
        <td>Bananas</td>
    </tr>
</table>
<table xmlns="http://www.w3school.com.cn/furniture">
    <name>African Coffee Table</name>
    <width>80</width>
    <length>120</length>
</table>

上面两段代码借助一段 XML 代码分别描述了一个 HTML 4 中的表格和一件咖啡桌家具,由于桌子和表格的英文名称都是 table,同一语境中为 table 元素增加 xmlns 属性才能更好地区分它们。[[11]](http://www.w3school.com.cn/xml/xml_namespaces.asp)

同样的,由于 XHTML 是一种特定的基于 XML 的应用,所以没一个 XHTML 文档中,都应当为其根元素 html 指定一个 xmlns 属性值为 http://www.w3.org/1999/xhtml,即:

<html xmlns="http://www.w3.org/1999/xhtml">

3.3.3. 定义语言编码

为了被浏览器正确解释和通过 W3C 代码校验,所有的 XHTML 文档都必须声明它们所使用的编码语言。就像我们在 meta 元素中介绍的那样,制作简体中文页面时一般使用 gb2312,制作多国语言页面也有可能用 utf-8 等,根据你的需要定义。如:

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

3.3.4. XHTML中的元素

作为Web标准的一部分,XHTML 要求避免使用一些元素:

  • 特定浏览器的自定义元素,如 IE 中的 marquee 元素、Netscape Navigator 中的 blink 元素;
  • 没有语义[[12]](http://baike.baidu.com/view/544098.htm)[[13]](http://zh.wikipedia.org/wiki/%E8%AF%AD%E4%B9%89%E5%AD%A6)或语义不清晰的元素,如 b 和 i 元素,这两个元素需要使用 strong 和 em 元素代替,因为后者包含的内容表示加强语气和强调的含义,而前者只是单纯将文本显示为粗体和斜体;
  • 和文档表现相关的元素,如 font、u、s(或 strike)、center 等,上述 b、i 元素同样属于这个系列,所有这些元素都是为了使得它们包含的内容具备某种显示上的格式,而Web标准要求结构和表现相分离,所以这些元素应该避免使用,在后面的 CSS 章节中会介绍一些替代这些元素的方法,需要注意的是,这些元素一般可以通过过渡型(XHTML 1.0 Transitional)验证,而无法通过严格型(XHTML 1.0 Strict)验证;
  • 框架集相关元素,frameset、frame、noframes 是可以通过框架型(XHTML 1.0 Frameset)验证,但由于框架集页面复杂且不易管理,在 XHTML 中不推荐使用。

与上述情况相反,XHTML 中还有两个经常使用的元素:div 和 span。divdivision(分隔) 的缩写(一些资料中把 div 称为“层”并不准确[[14]](http://zh.wikipedia.org/wiki/Span%E4%B8%8Ediv)),是区块元素;而 span 表示跨度的含义是内联元素。它们最大的特点是默认情况下不会对其包含的内容进行任何格式化渲染,所以 div 经常参与将整个网页或网页的某个部分划分成不同的区块,而 span 元素用于在区块元素中划分出和该区块元素中其它部分表现不一致的部分,即在页面中划分两种不同类型的(区块的和内联的)逻辑区域,然后针对这些没有任何修饰的元素内容应用相应的 CSS 样式使其呈现出不同的样式。如果需要唯一确定某个 div 和 span 元素,可以为其指定 id 属性。

3.3.5. XHTML代码规范

XHTML 是一种 XML 应用,因此 XHTML 应该完全遵循 XML 比较严格的语法,尽管这种语法比较简单。

1、XHTML 元素应该合理嵌套,每个层次的嵌套必须严格对称。

<p>here is an emphasized <em> paragraph. </p></em>

以上代码,虽然浏览器可以正确解析,但其嵌套嵌套时错误的,em 元素的结束标签应该出现在 p 元素结束标签之前。某一元素的开始标签先出现,那么其结束标签应该后出现,这样才能体现出它包含另外元素的嵌套关系。虽然大部分浏览器具备一定的容错能力,但这种错误已经是语法错误的范畴,是一种不符合标准的写法。上例的正确写法应该是:

<p>here is an emphasized <em> paragraph.</em></p>

2、元素名和属性名必须使用小写。

HTML 中无论元素名还是属性名都是大小写不敏感的,但是 XHTML 不同,所有元素名和属性名都应该严格限定为小写,事实上,小写更符合人类的阅读习惯。如:

<BlockQuote>text quotation</BlockQuote>

应该改写为:

<blockquote>text quotation</blockquote>

3、非空元素必须具有结束标签。

HTML 中特定元素可以不要结束标签;XHTML 的实质是 XML,而 XML 不允许忽略结束标签,如:

<p>here is a paragraph.
<p>here is another paragraph.

应该改写为:

<p>here is a paragraph.</p>
<p>here is another paragraph.</p>

4、空元素的标签必须以“/>”而不是“>”结束。

空元素不包含任何内容,故没有开始和结束标签之分,其元素必须以“/>”结束以明确表示其不包含任何内容,如:

<hr><br><img src="1.jpg" alt="替换文本" >

应该改写为:

<hr /><br /><img src="1.jpg" alt="替换文本" />

5、属性值必须使用引号括起来。

即使属性值是一个非字符串,如一个数字,也需要使用引号扩起来,通常英文半角的双引号和单引号都可以使用,但属性值前后的引号应该一致(要么都是双引号,要么都是单引号)。如:

<td rowspan=3>&nbsp;</td>

应该改写成:

<td rowspan="2">&nbsp;</td>
  1. 必须为布尔属性指定属性值

由于布尔属性的属性名和属性值相同,所以 HTML 中可以采取简写即不写属性值的形式为元素指定布尔属性,但语法要求严格的 XML 不支持属性值的简写。如:

<input type="checkbox" checked />

应该改写成

<input type="checkbox" checked="checked" />

XHTML 是一种 XML 应用,而 XML 具有严格的语法规范,所以和 HTML 不同,XHTML 具有特定的语法规范,XHTML 文档应该是一个格式良好的(well-form)、有效的(valid)[[15]](https://www.ischool.utexas.edu/technology/tutorials/webdev/xml_dtds/04_xml.html) XML 文档。

学习 XHTML 的目的是为了代码能够通过 W3C 的代码校验,使得自己的网页符合标准。有了统一、唯一的标准,也有利于以后的数据再利用。

除了语法规范之外,还有一些为保证文档易用性及可用性的规范,上面列举的内容并不能涵盖一个 XHTML 文档应该满足的所有条件,可以通过使用一些代码校验工具帮助我们检查一个 XHTML 文档的缺陷,并根据工具的提示完成相应代码的修改使其符合 W3C 的标准。

3.3.6. XHTML 校验

一个 HTML 文档在经过以上步骤的改造后,基本上可以达到一个合乎规范的 XHTML 文档的要求,可以通过使用代码校验的方法检查其实际细节。

XHTML 代码校验的方法主要有两种,一种是 W3C 的校验页面,另外一种是一些专业网页设计软件(如 DreamweaverVisual Studio等)提供的辅助工具。

在浏览器地址栏中输入 http://validator.w3.org,即可打开 W3C 官方 XHTML 代码校验页面,如下图所示:

![W3C 标记语言验证服务](../images/w3cmarkupvalidationservices.png)

[W3C 标记语言验证服务](http://http://validator.w3.org)

W3C 的代码校验分成三种方式:

  • 通过 URI 校验(Validate by URI):制作好 XHTML 页面后将其上传至 Web 服务器,并提供页面的完整路径,W3C 校验程序会自动获取页面内容进行校验;
  • 通过上传文件校验(Validate by File Upload):制作好 XHTML 页面后通过文件浏览域上传至 W3C 服务器进行校验;
  • 直接输入校验(Validate by Direct Input):在一个多行文本域中直接输入待校验的 XHTML 代码。

三种校验方式都会检查文档中所有可能出现的错误或警告,并针对它们给出相应的修改建议,网页设计人员可以多次循环进行这个过程,直到 XHTML 代码完全符合作为Web标准

工具校验的方法可能因为软件工具的不同存在差异,以 Dreamweaver 8 为例,打开一个已经存在的 XHTML 文档后,通过菜单项“窗口”——“结果”或“参考”在“属性检查器”下方打开一个组合面板,切换到“验证”选项卡,单击窗口左侧绿色“验证”按钮,在弹出的上下文菜单中单击“验证当前文档”菜单项,文档中存在的警告和错误就会显示在列表中,如下图所示:

![使用 Dreamweaver 8 校验 XHTML 代码](../images/dreamweaver8xhtmlvalidator.png)

[使用 Dreamweaver 8 校验 XHTML 代码](http://http://validator.w3.org)

校验工具提示的错误或警告之间可能存在关联关系,所以正确的方法是先把那些优先级较高的并且容易发现的错误先解决掉,并在整个过程中重复校验,直到所有错误和警告都被消除。

还有一点需要注意的是,如果校验工具所属软件的版本较低,其发布时间可能较早,这种情况下,校验结果可能和 W3C 官方网站的结果略有不同。

假设有以下 XHTML 文档:

html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
        <title>要勘误的页面</title>
    </head>
    <body>
        <p><em><strong>孔夫子</em></strong>说过:
        <BlockQuote>学而不思则罔,思而不学则殆。</BlockQuote>
        <div ID="divImage">
            <img src="da_vinci.gif" width=295 height=125>
            <BR>
            <img src="einstein.gif" width=370 height=115>
        </div>
        <div id="divColor">
            红色<input type="checkbox" value="Red" name="chkColor" checked>
            蓝色<input type="checkbox" value="Red" name="chkColor">
        </div>
    </body>
</html>

根据我们上面介绍的 XHTML 相关语法规范,及使用 Dreamweaver 8 代码校验的结果,我们很容易纠正其中那些显而易见的语法问题,将其变成以下形式:

html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
        <title>要勘误的页面</title>
    </head>
    <body>
        <p><em><strong>孔夫子</strong></em>说过:</p>
        <blockquote>学而不思则罔,思而不学则殆。</blockquote>
        <div id="divImage">
            <img src="da_vinci.gif" width="295" height="125" />
            <br />
            <img src="einstein.gif" width="370" height="115" />
        </div>
        <div id="divColor">
            红色<input type="checkbox" value="Red" name="chkColor" checked="checked" />
            蓝色<input type="checkbox" value="Red" name="chkColor" />
        </div>
    </body>
</html>

此时,使用 Dreamweaver 再进行校验时,我们得到如下图所示结果:

![正确的 Dreamweaver 8 的代码校验结果示例](../images/validatedxhtmlbydreamweaver8.png)

正确的 Dreamweaver 8 的代码校验结果示例

但是,当我们将以上代码拷贝到 W3C 标记语言验证服务“直接输入校验(Validate by Direct Input)”的多行文本域中,却得到如下图所示结果:

![W3C 比 Dreamweaver 8 校验工具多出的提示](../images/w3validatorcerror.png)

W3C 比 Dreamweaver 8 校验工具多出的提示

在严格(XHTML 1.0 Strict)的代码校验中,blockquote 元素不能直接包含文本内容,文本内容需要先包含在一个区块元素(比如 p 元素)中;img 元素还需要指定 alt 属性。类似的语法规范还有很多,不能一一列举,可以通过校验工具的提示逐个排除。

修改后得到的代码如下:

html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>要勘误的页面</title>
    </head>
    <body>
        <p><em><strong>孔夫子</strong></em>说过:</p>
        <blockquote><p>学而不思则罔,思而不学则殆。</p></blockquote>
        <div id="divImage">
            <img src="da_vinci.gif" width="295" height="125" alt="达芬奇" />
            <br />
            <img src="einstein.gif" width="370" height="115" alt="爱因斯坦" />
        </div>
        <div id="divColor">
            红色<input type="checkbox" value="Red" name="chkColor" checked="checked" />
            蓝色<input type="checkbox" value="Red" name="chkColor" />
        </div>
    </body>
</html>

此时,W3C 在线校验重新验证后得到如下界面:

![W3C 排除错误校验成功的界面](../images/validatedbyw3cservice.png)

W3C 排除错误校验成功的界面

一旦校验成功,可以在页面中加入以下代码:

<p>
    <a href="http://validator.w3.org/check?uri=referer">
        <img src="http://www.w3.org/Icons/valid-xhtml10"
        alt="Valid XHTML 1.0 Strict" height="31" width="88" />
    </a>
</p>

该代码会在页面中显示一个图片链接,浏览网页的用户可以单击链接直接对当前页面进行校验。

这相当于是一种奖励机制,即当前网页的 XHTML 代码是符合Web标准的,就像企业通过 ISO 9000[[16]](http://zh.wikipedia.org/wiki/%E5%9C%8B%E9%9A%9B%E6%A8%99%E6%BA%96%E5%8C%96%E7%B5%84%E7%B9%94) 质量管理体系认证得到相应标准证书一样。

3.4. XHTML 的式微

XHTML 鼓励良好的代码习惯,所有元素都需要完整、严谨,XHTML 可以产生比 HTML 4.0 更干净的代码。XHTML 1.0 风行一时,但 W3C 于 2002 年发布 XHTML 2.0 的第一个工作草案时,让人大吃一惊:与其先前的版本不同,它不是向前兼容的。XHTML 2.0 不再是 HTML 的 XML 化,而是一种全新的体系,它忽视了设计师们的需求。

2006 年,蒂姆·伯纳斯-李 表示,从 HTML 到 XML 的路是行不通的。W3C 宣布从 2009 年底起终止同 XHTML 2 工作组的合约,以此宣告了曾经一度野心勃勃的 XHTML 2 的正式死亡[[17]](http://jacoxu.com/?p=10)

但是,XHTML 2 的死亡并不意味着 XHTML 的消亡,用“式微”这个词描述可能更为恰当,因为,正如我们上面所介绍的那样,XHTML 的规范其实带来的是一种更好的代码习惯,而这应当为每一位网页设计人员所接受并采纳。

![阅读材料图标](../images/book.png) 阅读材料
  1. 标记语言综述:http://jacoxu.com/?p=10
  2. 回顾时光 细看HTML发展史:http://developer.51cto.com/art/201005/202052.htm
  3. XHTML 2.0与HTML 5之争:http://www.baifeng.me/web/design/2010/03/1293/
  4. 为什么要建立网站标准:http://www.w3cn.org/benefits/index.html
  5. 《重构之美》原创系列文章快速入口:http://yuntian.cnblogs.com/archive/2006/03/25/358776.html
  6. 合理的结构web标准化的根本动机:http://www.qicaispace.com/teach/css/page01/css26.asp
  7. 结构,表现,行为三者真正分离提升页面可扩展性:http://blog.sina.com.cn/s/blog_9b95aa3b0101gzj2.html