CSS 3中-webkit-, -moz-, -o-, -ms-这些私有前缀的含义和兼容

css3作为页面样式的表现语言,增加了很多新的属性,但是部分css3属性在一些浏览器上还处于试验阶段,所以为了有效的显示css3的样式,对应不同的浏览器内核需要不同的前缀声明,例如:

-moz- :Firefox,GEcko引擎

-webkit-: Safari和Chrome,Webkit引擎

-o- :Opera(早期),Presto引擎,后改为Webkit引擎

-ms- :Internet Explorer,Trident引擎

使用这些前缀,才能保证css3的属性在特定浏览器渲染引擎下生效。统一引擎一般不识别其它引擎的前缀,目前移动端的浏览器相对比较统一,都是采用的webkit引擎,所以如果我们只需要兼容移动端,只需要带-webkit-前缀即可。

在使用css3新属性的时候,一般需要把带有前缀的属性放于前面,把不带前缀的版本放到最后一行:

1 -webkit-box-shadow: 0 5px 5px rgba(0, 0, 0, .5);
2 -moz-box-shadow: 0 5px 5px rgba(0, 0, 0, .5);
3 -o-box-shadow: 0 5px 5px rgba(0, 0, 0, .5);
4 box-shadow: 0 5px 5px rgba(0, 0, 0, .5);

随着浏览器的升级,目前大多数新版本浏览器都已经支持不带前缀的写法了,所以带前缀只是为了兼容低版本,不带前端的才是标准属性。

那么如果想移除这些前缀,同时又满足兼容的办法也是有的。我们可以选择Autoprefixer工具,一个以最好的方式处理浏览器前缀的后处理插件​,无论你是用webpack、gulp、grunt还是fis,它都能完美配合。

使用Autoprefixer你可以完全忘记有CSS前缀这东西,尽管按照最新的W3C规范来正常书写你的CSS而不需要浏览器前缀。像这样:

1 a {
2     display: flex;
3 }

Autoprefixer使用一个数据库根据当前浏览器的普及度以及属性支持提供给你前缀,输出:

1 a {
2     display: -webkit-box;
3     display: -webkit-flex;
4     display: -ms-flexbox;
5     display: flex
6 }