翻译:即将到来的CSS私有前缀灾难

这篇文章发布于 2012年02月20日,星期一,18:05,归类于 外文翻译。 阅读 59919 次, 今日 5 次 17 条评论

 

CSS工作组(CSS Working Group)联合主席Daniel Glazmang告知大家非WebKit的浏览器厂商正在考虑支持-webkit-前缀CSS属性。

一石激起千层浪,于是业内展开了激烈的官方讨论。这里,翻译篇相关文章,希望米娜桑对该讨论有所了解,并发表自己的一些观点。

以下为翻译全文

对于CSS的私有前缀,开发者可谓爱恨交加。他们可以让我们在花费大量冗余代码的基础上使用一些前言技术。

background-image: -webkit-linear-gradient(#fff, #000);
background-image: -moz-linear-gradient(#fff, #000);
background-image: -ms-linear-gradient(#fff, #000);
background-image: -o-linear-gradient(#fff, #000);
background-image: linear-gradient(#fff, #000);

上面代码理论上可行,但是考虑到实际……

  1. 实验性质的属性往往都是先拿webkit引擎作小白鼠,没人能保证他们会复制在其他浏览器上。
  2. 通常很难界定私有前缀是否属于CSS规范的一部分。一些浏览器生产商提交的属性并不标准。
  3. 即使变成了标准属性,其不准确的私有前缀版本依旧支持。你的老代码依旧可以工作;你不会重新改正。

你会经常看到一些站点只使用-webkit-, 即使其他浏览器已经对该属性无前缀写法有了广泛的支持(例如border-radius)。因此,Chrome和Safari比竞争对手的浏览器看起来更好——其他厂商不乐意看到。

该问题已经在2012/2/7 W3C会议上提出并讨论。

Web标准积极分子正教人使用webkit. 你会看到所有的web标准倡导者,提倡人们使用WebKit的前缀。

我们的工作就是要解决互通性。

在这一点上,我们试图找出它和多少WebKit的前缀属性,真正在Mozilla实现了支持。

如果我们不支持WebKit的前缀,我们会把自己锁在移动网络部分的外面。

让我们花点功夫好好理解下。

无-webkit浏览器将支持-webkit前缀。这就是W3C想出来的解决之法。

这个想法可能是失败的。两个或两个以上相同的WebKit属性的实现将不兼容,因此开发人员将不能够在任何地方使用它。没有人最终胜利 – 包括苹果和谷歌。

但我更关心如果解决方案是成功的,它会造成不可挽回的损失。一旦开发者发现Firefox, IE和Opera都支持WebKit的前缀,他们会期望他们所有属性都起作用。 Webkit-only将成倍增加,供应商将被迫从头到尾应用这些前缀。在这一点上,WebKit的属性将成为既定事实上的标准而无视任何W3C规范。游戏结束:开发的web就此关闭。

其影响不只是CSS: 许多新的JavaScript API有私有前缀。

谁之过

失败在于:

W3C工作组

web标准达到成熟时间过长。这可能是不可避免的,但浏览器厂商都绕过该过程。

浏览器生产商

匆忙推出个新技术,对于生产商,添加个前缀然后忘记它太容易了。Web开发者需要更多的信息:是否该属性被W3C认可,什么时候前缀可以去掉?

在一个理想的世界中,一旦浏览器实现了标准的属性,实验性质的前缀会消失。生产商不会如此做,因为这会破坏站点,但是他们可以突显问题。例如,为开发控制台提供过时的检测工具或输出错误消息。

苹果和谷歌

在推销webkit前缀上,两者都是有罪的,好像他们就是日常HTML5 web开发的标准部分。苹果已经被指控与W3C积极作对。

Mozilla, Microsoft和Opera

其他浏览器生产商通常滞后webkit数月——否则数年。添加WebKit的前缀是一个可笑的解决方案:是时候繁冗他们的游戏咯。

技术网站以及狂热分子

我们都喜欢很酷的实例,“传教士”们总是忽略属性是实验性质的,可能永远都不会所有浏览器都支持(恩,是的,包括SitePoint)。理想的情况下,代码应该至少在两个浏览器下生效,至少表明需要多个供应商的前缀。

web开发者

我们太懒惰。我们编写特定浏览器的代码,尽管我们可能心里想的是以后纠正,但我们很少做。

你还记得最后一次有针对性的开发特定的浏览器?这就是IE6. 十年后我们仍然和这个决定的遗产相伴。难道你真的希望历史重演?

是时候行动了

我反对非WebKit的浏览器支持WebKit的前缀。充其量,它使前缀无法使用。在最坏的情况下,它打破了整个标准化进程。无论你可以同意或不同意,姑且让同事知道你的意见,通过博客和社交网络上。 W3C和浏览器厂商将听取您的反馈,你只需要提供一些。

然后在多个浏览器测试您的网站。一点点优雅降级是好的,但忽视中的一个或多个现代浏览器而具有同等的支持是不可取的。修复代码,否则你的网站会对这个问题作出了贡献。

以上为翻译全文

译者语及其他补充观点

我个人态度也是不支持非webkit核心浏览器支持webkit属性。因为我想想都觉得麻烦。自己缺乏预见性而造成的问题需自己买单。

附上其他一些人的观点:

Remy Sharp: 这是个糟糕的想法,因为它影响开发商的预期,将有可能使我们使用前缀更加懒惰。

Christian Heilmann: 作为开发者,我们自己搞出来的混乱,应该由我们自己从中走出来内容)。

Aaron Gustafson乞求我们至少解决我们自己的东西并制作了个请愿书来对抗其他浏览器生产商支持-webkit-.

Eric Meyer则相当肯定我们不会赢得这场战争。

还有其他同行:Rachel AndrewBruce LawsonGilles Vandenoostende

国内不是不少公司已经加入W3C了吗,期望有相关同行可以现身说法。

(本篇完)

分享到:


发表评论(目前17 条评论)

  1. tabliu说道:

    如果让其他浏览器支持webkit前缀,那还不如让W3C支持webkit前缀为标准

  2. stefan说道:

    CSS前缀还好,关键是从CSS前缀到DOM前缀是不是都要这么搞?是不是别的浏览器也要搞成el.style.WebkitBorderRadius = xxx这样?微软已经在IE8+干过ms小写开头DOM属性的事情了,O和Moz还不错,dom属性开头是大写。尼玛webkit非要来个两者都行。。。这混乱啊,混乱啊,混乱啊!!!!!!!!!!!!!11

  3. alex说道:

    完全没有必要。。。身为标准的w3c怎么能用加大这样的非统一性呢?!

  4. miniflycn说道:

    开发者大概不会赢这场战争,让人想起臭名昭著的在辨别浏览器版本中的Moz前缀……

  5. colee说道:

    这个主席会遗臭万年,做为标准就应该坚持统一规范到底,并且保证公正,硬搞出多种规范来违背了实行标准的意图,偏心于某个核心浏览器只会使标准化进程难度加大。

  6. Drak说道:

    最近一在看你的博客 非常好 不过还是希望将代码更加公开化 更利于我们新人学习和交流

  7. 女人心女性网说道:

    好久没有来看博主的博客了,仍然更新的那么快,总是能在这里获得一些很有用的信息,博主辛苦了。。。

  8. 小山说道:

    不要前缀难道不是更好吗?

  9. 爱前端说道:

    强烈反对!

  10. 张泰然说道:

    非常喜欢您的文章,我也在学html5+css3,希望能和您有个交流,我也有一些问题想请教您,可以加我的QQ吗?771876542,麻烦了~~

  11. dvaknheo说道:

    IE 没有进入 W3C 组真是失败啊

  12. Gravatarer说道:

    偶尔用着玩还行,反正现在还是在围观这东西怎么稳定下来。

  13. ZodiacMa说道:

    出来混,迟早要还的~ 最大的问题永远是历史遗留问题~

  14. lianghaijun说道:

    个人有不同的意见, 我反而觉得, 这是一个好的方法
    假如是webkit制定出来的标准, 就全部采用webkit打头, 以后firefox实现这一标准, 也可以用-webkit打头, 这样大家都是用-webkit打头的
    如果firefox第一个出来的标准, 就用 -moz的
    如果是w3c的, 可能没有前缀, 说不定以后, 也会有 -w3c的~~

  15. yangyang说道:

    哎。有什么办法啊。。。这东西。。进度太慢了。。。搞笑的是。。为什么各大网站还都要招聘做过HTML5+css3的技术人员。。。写出来的东西。。质量和效率没法保证啊。。。

  16. 北河说道:

    想想大部分浏览器支持webkit-XXX的属性,css文件里都是webkit-XXX的属性,就觉得蛋疼。

  17. 滴水成冰说道:

    是挺恶心的,尤其对于web开发者来说,希望早日出来新标准