我来从HTML的历史谈谈他们3者的区别。
在HTML的早期发展中,W3C成立之前,很多标准的制定都是在浏览器的开发者们互相讨论的情况下完成的,比如HTML 2.0, 3.2直到4.0, 4.01,这些标准大部分都是所谓的retro-spec,即先有实现后有标准。在这种情况下,HTML标准不是很规范,浏览器也对HTML页面中的错误相当宽容。这反过来又导致了HTML作者写出了大量的含有错误的HTML页面。据说,时至今日web上99%的页面都含有HTML错误。
W3C随后意识到了这个问题,并认为这是互联网的一个基础性问题,应该加以解决。为了规范HTML,W3C结合XML制定了XHTML 1.0标准,这个标准没有增加任何新的tag,只是按照XML的要求来规范HTML,并定义了一个新的MIME type,application/xhtml+xml。W3C的初衷是对这个MIME type浏览器要实行强错误检查,既如果页面有HTML错误,就要显示错误信息。但是由于已有的web页面中已经有了大量的错误,很多开发者拒绝使用新的MIME type。W3C不得已,在XHTML 1.0的标准之后加了一个附录C,允许开发者使用XHTML语法来写页面,同时使用旧的MIME type,application/html,来分发页面。这个旧的MIME type不会触发浏览器的强错误检查。这就是我们今天看到的情况,很多网站宣称自己遵守XHTML 1.0标准,那只不过是说,他的页面中用了XHTML语法,但并不能保证完全没有错误。要验证XHTML有没有真正起效,需要查看web服务器使用哪种MIME type来分发页面的。
W3C随后在XHTML 1.1中取消了附录C,即使用XHTML 1.1标准的页面必须用新的MIME type来分发。于是这个标准并没有很多人采用。这种情况同样发生在尚未完成的XHTML 2.0身上,它要求强错误检查,于是没有人采用。XHTML的故事也告诉我们,有时候先有标准再来实现,是行不通的。
当XHTML 1.0和XHTML 1.1取得比较大的成功时,W3C自信心爆棚,整个业界都认为W3C联盟战胜了IE,IE受到越来越多浏览器的挑战,如Chrome、Firefox、Webkit,终于,内容提供商开始倾向于提供非IE兼容的内容,IE浏览器的绝对市场垄断地位被打破了。人们都以为这是民众的胜利,标准的胜利,W3C的胜利。
同时,XML的成功也冲昏了W3C HTML工作小组的头脑,越来越多的协议选择XML作为底层接口。让我们全部都使用XML吧,W3C就这么愉快的决定了。但很显然的,W3C真是图样图森破。标准,永远是掌握在浏览器厂家手里的。事实上,IE的市场份额只是被WebKit核心蚕食了而已。市场标准只是从一个寡头手里到了另一个寡头手里。一意孤行的XHTML 2.0竟然大胆的与原先的HTML不再兼容,浏览器厂商终于怒了,Mozilla和苹果牵头,WHATWG小组成立。失去了厂商支持的W3C的XHTML2标准很快就成为了一个笑话。
有了XHTML的教训,WHAT Working Group和W3C在制定下一代HTML标准,也就是HTML5的时候,就将向后兼容作为了一个很重要的原则。HTML5确实引入了许多新的特性,但是它最重要的一个特性是,不会break已有的网页。你可以将任何已有的网页的第一行改成<!DOCTYPE html>,它就成也一个HTML5页面,并且可以照样在浏览器里正常的展示。
关于XHTML失势的原因其实很简单,因为网页开发比起学术与严谨性来说,更看重的是功能性与健壮性。
XHTML是学术派的w3c开发的,并未给HTML带来新功能,只是用XML来规范HTML,试图用XML来抹平HTML设计的一些缺陷(最重要的就是浏览器的不同解释——而导致浏览器解释不同的原因是HTML4并未规定对于不合法的HTML页面统一的容错体系,这导致了不同浏览器各自采用了自己的容错机制,间接导致了同一个页面在不同浏览器上的不同渲染),这对于网页设计师来说,除了自己以前写的一些不大规范的HTML页面无法工作外,不能带来任何正面意义(对于整个业界的正面意义倒是有——就是让HTML更加规范和严谨——不过显然这样的“意义”太过空泛而无法被大多数设计人员接受)。
HTML5则是直接由站在HTML应用第一线的网络公司(Google, Adobe)和浏览器厂商(Moz, Opera, Apple)开发的,比起规范限制,采用了更容易被接受的做法:对HTML的容错方法做出统一定义,这样无论是什么浏览器,只要根据标准实现容错方法,即使网页出现缺陷,其渲染结果也是完全一样的。换句话说,网页设计师在迁移到HTML5的时候,基本可以不做任何事情。以前即使存在一定缺陷的非标准网页也能正常而且同一地被渲染出来。在这之上,HTML5增加了非常多的应用特性,包括新tags, CSS3, 更多系统JS API等等,极大增强了网页app的功能,能被广泛接受和推广也是情理之中的事情。
说到这里再解释预测失误就很容易理解了,赞同XHTML的人是被HTML4标准缺陷深受其害,觉得业界会向一个更标准更完备的方向前进;然后HTML5不仅解决了标准缺陷的问题,还带来了更多更好的特性,当然就胜出了。
HTML4,HTML5,XHTML 之间有什么区别?