反webkit之战

历史总是在某个时候重演,这不,IE6离开历史舞台(国外,市场份额不足1%了)之后,webkit内核的浏览器成了大家的心腹大患,于是各种口诛笔伐开始了,甚至比当年打击IE6更甚。。。

标准与事实标准

最近10年,IE6对标准的支持让所有开发者都很头疼——事实上虽然在国外基本没人用了,但是在国内还远远没有结束,到现在IE6还有40%+的市场份额——IE6垄断了浏览器市场,它就是事实上的标准,所有的网站都要首先兼容IE6然后再兼容W3C标准,于是我们通常要为它对标准的不支持和自身的各种bug付出很多很多的时间和精力,所以你在一些页面中看到针对IE6甚至IE7的很不友好的行为或者源代码时,请理解一下前端开发者们极度苦逼的心情吧。。。

但是现在情况发生了很大的改变,IE6死了,而另一个垄断者webkit来了:

  1. 最近几年,webkit在apple的带领下发展很快,对W3C标准的支持方面一直在和opera/firefox赛跑。
  2. 托Google Chrome和Chromium开源项目(基于webkit内核)的福,webkit市场份额大增,Chrome在国外已经有接近四分之一的份额了,而国内,各种“壳”浏览器的“极速”、“快速”版等都是基于chromium开发的,也算是webkit
  3. 在智能终端,iOS+Android垄断了市场,它们的内置浏览器都是基于webkit内核,于是webkit成了移动终端的No.1。

所以在前几天,2月7日,在W3C的CSS工作组的一次会议上,Firefox/Opera/微软都表示,将支持-webkit-前缀的CSS语法。

于是国外各个大牛们开始各种吐槽,包括W3C联合主席丹尼尔·格拉兹曼带头讨伐担心webkit会阻碍开放标准的发展。。。

但是,罗马不是一日建成的:

  1. W3C联盟开发标准的流程是,会员单位发起某项提议,W3C接受后成立小组,然后开始写相关标准,经历草案、RC、建议等几个阶段后,才可以成为成熟的标准(详细流程可以查看@junchen的介绍
  2. 浏览器对实验性的CSS属性,比如W3C的草案阶段的CSS3属性或者W3C会员自己发起的一些新功能(如之前提到的CSS3 Region技术就是由Adobe发起的),会采用私有前缀-prefix-部分支持,待相关技术成熟并且浏览器能完成相应的测试用例之后,才可以去掉前缀。
  3. CSS3的各种新特性,基本各个浏览器最初都是用私有前缀来渲染——虽然现在有的最新版本的浏览器对某些属性已经不需要私有前缀了,但是对于旧版本,还是要做下向下兼容,前端开发的工作量大大增加,通常要写4种不懂的前缀。
  4. 于是出现了一些解决方案,比如LESS/SASS可以建一些能够重用的变量,还有一些类似-prefix-free的js方案。。。
  5. webkit现在成了移动终端的垄断者,一些移动网站/app开始不兼容webkit以外的浏览器。
  6. Firefox干脆开始支持某些-webkit-私有属性——最近半年陆陆续续在MDN上看到一些这方面的信息,泪流满面。。。
  7. 于是在2月7日W3C的会议上,浏览器厂商对这个问题进行了讨论,结论就是大家都支持-webkit-吧,而firefox无奈的称之为囚徒困境。。。

结语和争论

事情演变到现在,罪魁祸首还是垄断,垄断者就成了事实上的标准,于是很多开发者为了降低开发成本会开发一些只兼容webkit的网站或应用。

但是依然对其它浏览器厂商的行为表示非常不解:

  1. 将来webkit没落了,firefox上去了,那么大家都改成支持-moz-前缀吗?这种方法解决不了根本问题啊;
  2. W3C的存在就是要提供一套标准的方案,你们既然能支持-webkit-前缀的功能,为什么支持不了标准行为呢?
  3. 向webkit妥协之后,拿什么和webkit竞争?
  4. webkit作为一个开源项目,自己希望看到这样的结果吗?

当然,对于前端开发者,我还是希望大家不要偷懒,要保证自己项目的可访问性和可用性,这是最基本的用户体验。