有版本号啊……
这个是HTML的:
这个是JS的:
就CSS没有,结果搞出一地鸡毛,也就是所谓的Quirk Mode……
所以,CSS就是那群不懂编程的搞设计的家伙搞出来的怪异的玩意儿,给互联网带来无尽的灾难……
因为要兼容,新浏览器要兼容十几年不更新代码的网站,新网站要兼容 IE6。你给网站使用的语言加了版本号,那遇到不支持这个版本的客户端怎么办呢?
你先别着急思考这个问题,你先去研究一下过去二十年浏览器和网站都是怎样围绕这个问题演化的,然后你就知道答案了。
大多数网站,都不愿意放弃兼容任何一个能给自己带来显著流量的浏览器;大多数浏览器,都不敢说自己不兼容任何一个主流网站。这时候双方都无法向前迈步。
网站显然不可能先升级到更高的语言版本号,因为没有浏览器支持。浏览器先升级到更高级的语言版本号后,要如何说服网站升级呢?叫网站同时维护两个版本,分别用不同的语言版本号,然后根据浏览器版本来决定返回哪个语言版本?大多数网站都没有功夫给你手工维护两个版本,如果只维护一个版本的话,这个版本必须兼容升级前的浏览器。那这升级怎么进行?
这时候只有一个办法进行升级,就是同一个版本支持不同的浏览器。这个版本通过条件判断,遇到高级语言版本就做一件事情,遇到低级语言版本就做另外一件事情。但问题是,语言版本号一定是全序的吗?语言版本号保证不是偏序的?偏序的例子是,2.0 并不保证比所有的 1.x 都高级,2.0 在 1.5 之后发布,但后来又发布了 1.5.1 补丁,引入了 2.0 没有的功能。
如果语言版本号不保证是全序的,那根据语言版本号大小来判断做什么事情就会出错。现实中,浏览器发布新功能的顺序确实不是全序的,不同浏览器按照不同的顺序添加新的语言功能,根本不可能做出一个单调递增的语言版本号来。
这件事情不是没试过,大家曾经想着等 HTML5 定型了再开始设计 HTML6,等 CSS3 定型了再开始设计 CSS4。但因为某个版本是否定型是一个多方协商的结果,根本无法有效地推进。没有人希望再像 HTML4 一样,一拖拖个十年都无法决定下一个版本是什么样子的,新功能还是要要照常迭代的,唯一的出路就是大家各干各的,谁做出来什么新功能都可以发布。这意味全序版本号不可能实现。
因为版本号不能是全序的,所以这些语言不使用语言版本号。最后网站唯一能做的事情,就是不去想语言版本号这件事情,对自己需要用到的具体功能逐一侦测,侦测到有就做一件事情,否则就做另一件事情。