HTML4,HTML5,XHTML 之间有什么区别?
原始日期:2014-10-25 14:12
我来从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不仅解决了标准缺陷的问题,还带来了更多更好的特性,当然就胜出了。
原文链接:http://www.zhihu.com/question/20258628
HTML4,HTML5,XHTML 之间有什么区别?的更多相关文章
- xhtml和html的区别 html5和xhtml的区别
xhtml和html的区别 - 分为两大类比较:一个是功能上的差别,另外是书写习惯的差别.关于功能上的差别,主要是XHTML可兼容各大浏览器.手机以及PDA,并且浏览器也能快速正确地编译网页,- XH ...
- HTML与XHTML之间的区别
HTML与XHTML之间的差别,粗略可以分为两大类比较:一个是功能上的差别,另外是书写习惯的差别.关于功能上的差别,主要是XHTML可兼容各大浏览器.手机以及PDA,并且浏览器也能快速正确地编译网页. ...
- DIV与SPAN之间有什么区别
DIV与SPAN之间有什么区别 DIV 和 SPAN 元素最大的特点是默认都没有对元素内的对象进行任何格式化渲染.主要用于应用样式表(共同点). 两者最明显的区别在于DIV是块元素,而SPAN是行内元 ...
- XHTML是什么?XHTML与HTML的区别
经常看到web前端开发人员口中提到XHTML,相信很多web前端开发的新手们感到很疑惑,甚至有些时候认为XHTML就是HTML,这个观点是错误的,今天零度就给大家好好说道说道XHTML和HTML的区别 ...
- <%@page include%>、<%@include%>、<jsp:include>三者之间的本质区别
<%@page include%>.<%@include%>.<jsp:include>三者之间的本质区别 先从它的几个内置对象说起. application和se ...
- 不同版本PHP之间cURL的区别(-经验之谈)
之前在做一个采集的工具,实现采集回来的文章,图片保存起来.文章内容是保存在数据库,图片是先需要上传到图片服务器,再返回图片地址,替换掉文章的图片地址. 问题来了:都能成功采集都东西,但是,本地测试是正 ...
- Exception和IOException之间的使用区别
Exception和IOException之间的使用区别 先看一段代码.这段代码来自<深入剖析tomcat> public void await() { // 创建ServerSock ...
- 尚硅谷面试第一季-07Spring Bean的作用域之间有什么区别
目录结构: 关键性代码: beans.xml <!-- ★bean的作用域 可以通过scope属性来指定bean的作用域 -singleton:默认值.当IOC容器一创建就会创建bean的实例, ...
- AWT和Swing之间的基本区别
AWT和Swing之间的基本区别:AWT 是基于本地方法的C/C++程序,其运行速度比较快:Swing是基于AWT 的Java程序,其运行速度比较慢. 对于一个嵌入式应用来说,目标平台的硬件资源往往非 ...
随机推荐
- WPF 自定义ColorDialog DropDownCustomColorPicker
今天分享一个 WPF 版的ColorDialog,该控件源自 这里,不过笔者已经该控件做了大量的修改工作,以适应自己的产品需求,闲话少说,先看看效果图: 1.DropDownCustomColorPi ...
- json、xml和java对象之间的转化
其实从面相对象的角度来理解这个问题,就会很清晰.java中的一切皆对象即把世间万物(Everything in the world)看做java对象,任何处理不了的问题都可以先转化成java对象在做处 ...
- bootstrap基础
相信大多数后端开发人员的html,css并不是太好(主要说我).想要做一些网页效果,难度会比较大.看了下bootstrap这个前端框架,发现这个框架比较好的解决了网页效果制作中一般性问题.总的来说,b ...
- Linux安装yum以及更新yum版本
.使用RedHat系统不能正常使用yum安装 由于RedHat没有注册,所有不能使用它自身的资源更新,于是使用yum instatll gcc-c++的时候出现This system is not r ...
- CSS动画效果的回调
用纯JS实现动画效果代码量大,计算复杂.因此现在前端页面的动画效果一般都采用CSS来实现. CSS动画实现简单高效,但是在处理动画,控制动画过程上却缺少一些有效手段. 例如我们想在动画效果完成时调用回 ...
- python 基本数据类型练习题
练习题一.元素分类有如下值集合 [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中.即: {' ...
- kotlin 语言入门指南一
基于官网的Getting Start部分,翻译如下: 基础语法 定义一个包 包的声明必须放在文件头部: package my.demo import java.util.* // ... 不需要加上p ...
- 模板类的约束模板友元函数:template friend functions
本来这篇博客是不打算写的,内容不是很难,对于我自己来讲,更多的是为了突出细节. 所谓template friend functions,就是使友元函数本身成为模板.基本步骤:1,在类定义的前面声明每个 ...
- SSM框架中常用的注解
@Controller:在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model , ...
- 1.Java 加解密技术系列之 BASE64
Java 加解密技术系列之 BASE64 序号 背景 正文 总结 序 这段时间,工作中 用到了 Java 的加解密技术,本着学习的态度,打算从这篇文章开始,详细的研究一番 Java 在加解密技术上有什 ...