问题又来了,既然需要添加必要的前缀,说明有些时候还是很有必要,那不得不加的情况下,那不是挺麻烦的?同样的一条规则要写三四遍,可能很多地方都要用,如何是好?别急,下面是几个对策:
1、使用工具来添加css属性的浏览器前缀
Prefixr,可以在开发的后期对代码进行处理。它会自动的添加需要的前缀和删去不必要的前缀。
Autoprefixer,如果想要在开发过程中更多的自主性,可以使用这个工具,开发者可以自定义浏览器支持范围,它也有多种使用方式,可以集成到多个开发环境中。 此外还有几种工具可供使用:cssFx、*css Agent*和-prefix-free。
2、借助css预处理技术
目前流行的有sass、less,具体方法是,针对css3样式特性定义一份模板样式。 优点是:避免大量重复代码,只需要维护一份定义。
3、不要过度添加浏览器前缀
有些开发者为了兼容所有浏览器,不管什么情况都为css代码加上了所有浏览器的前缀,这是一种消极的编码方式,增加了太多的重复代码,降低了浏览器的解析性能,增加了复杂度,同时某些前缀的属性可能没有被浏览器支持过。
4、添加css3标准属性定义
何为标准属性定义呢?就是不需要任何浏览器前缀,大家可能都会注意到,很多使用css3的地方都会在最后的地方写标准属性定义,为什么呢?因为当浏览器支持标准属性时,它可以覆盖前面添加了前缀的定义,css3中的属性标准定义才是符合规范的定义,添加了浏览器前缀的定义会随着浏览器的更新逐渐被淘汰。
当然,还有一点需要注意的是,某些属性,目前是属于Only webkit或者Only firefox的,那么就没有必要再写上标准定义及其他浏览器前缀了。
做好css3中新特性的兼容处理
说到兼容,就会提到低版本IE,比如很常见的圆角、透明图片等,有时候我们会给它们降级的处理,比如filter或者javascript,使用box-sizing、transform,推荐使用Modernizr,这个框架中包含了很多css3新特性的兼容方案。
无论是哪种方案,都会带来性能上的损耗,不能毫无章法的滥用,仍然是需要大家去权衡和选择。推荐一个如何更有效率的使用HTML5的建议网站:html5please。网站按照使用的方式把css3中的新特性分成了三类:
(1)直接使用
包含了大部分新特性,有些特性本身不会影响兼容性,如border-radius、media queries等,有些需要添加降级处理,如多背景图,要设置一个单背景图或者背景色作为备选。
(2)谨慎使用
这部分主要是性能问题,例如框阴影应用于占用很大区域的元素,页面滚动或鼠标悬停时,会引起不小性能问题。










