一开始学习CSS3的时候看到一个属性前面加一些莫名其妙的东西,后来发现这是浏览器前缀,居然要用四五行代码来完成实际上相同的一件事。对此,我的感受只是:烦躁,烦躁,烦躁。
后来经过深入学习,不仅仅只是在网上看视频或者学习资料,而且自己去图书馆借了一些前端的书来看才发现这件令我烦躁的事还是有很多好处的。
当一个浏览器实现一个新的属性、值或者选择器,而这个特征还不是处于候选推荐标准状态的时候,这属性的前面会添加一个前缀以便于它的渲染引擎识别。
为什么他们会存在
浏览器使用前缀来尝试一些新属性、值和选择器,即使他们还没有最终定稿——这是一个好的测试方法,在必要时也可以对他们进行修正或者重新定义。如果浏览器一上来就直接使用标准属性,那他们就会被直接锁定在这个特征的实现上而不易变更。
开发这可能会立即使用无前缀的属性,而且也会一直期望它能够保持同样的表现不再变更。如果浏览器在之后对这个属性做了变更,不管是由于它的实现存在缺陷,或者是由于规范本身发生了变更,所有现存的使用了这个属性的网站都有可能面临出问题的风险。除了会出现这样的锁定问题外,这种方式也有可能强迫其他浏览器和W3C去适配它的实现。
即使浏览器不会变更它的实现从而不去影响现有的网站,W3C如果改变了它的规范定义怎么办?如果其他的浏览器直接使用更新的规范中的新表现该怎么办?
有前缀的属性会告知开发者这个属性只是试验性质的而且很有可能变更。他给予浏览器在必要时进行变更的灵活性,这让浏览器能够更快地发布或者重新定义新的属性。这也让开发者能够更快地有机会尝试新的属性,并且能够参与到在真实环境下测试和修订这些特征的过程。
一旦规范开始稳定下来,浏览器也达到了能够正确实现属性的程度,他就可以去除这个前缀。如果开发者在样式表中同样提供了无前缀的属性定义——这是很好的向后兼容的方式——那么开发的页面就能够自适应最终定义完成的特征。如果开发者没有这样做,那这些页面也不会受到影响——旧有的前缀属性还是能够正常工作。没有任何一个使用前缀的网站会发生问题。
对学习,还是只有书能让我专心
网上的资料很多,很多的含义也就意味着很杂,很凌乱,难得系统。网上讲的很多是知识点,也基本只能是知识点,因为网上的视频大部分急于求成,使人知其然难知其所以然,在网上讲课的老师很少讲编程思想,很少讲一个问题的来龙去脉,只是教我们如何实现,很少涉及为什么以及它的原理。我只是觉得书上的知识理论更系统些。
学前端,我是从网上入门,在书中进阶。
Zoe Mickley Gillenwater《CSS3实用指南》 读书笔记