原文首发于个人博客:还在手动给css加前缀?no!几种自动处理css前缀的方法简介

我们知道在写css的时候由于要兼容不同厂商浏览器,一些比较新的属性需要给它们添加厂商前缀来兼容。移动端还好,基本只要兼容webkit内核的即可,pc端就虐心了,ff、ie、Opera……可以说五花八门,应有尽有,每次要使用例如一些css3属性的时候,就要考虑到添加前缀兼容的问题,那么多属性那么多前缀,简直是泯灭人性!

不过好在现在各种工具的出现,已经可以很好地解决这个问题了,下面就简单介绍几个吧。

1. postcss

postcss是一个用JS插件转化样式的工具。这些插件可以检查CSS,支持变量和mixin,转译未来的CSS语法,内联图像等等……总之是一个非常强大的css处理工具。

在本文中我们主要介绍postcss里面使用率最高的一个插件Autoprefixer。Autoprefixer是专门用来添加厂商前缀的postcss插件,它处理兼容性的依据来源于caniuse

使用效果

编译前:

.example {
display: flex;
transition: all .5s;
user-select: none;
background: linear-gradient(to bottom, white, black);
}

编译后:

.example {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-transition: all .5s;
transition: all .5s;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background: -webkit-linear-gradient(top, white, black);
background: linear-gradient(to bottom, white, black);
}
如何使用?

使用构建工具gulp、webpack、grunt等

gulp

在gulp中,你可以安装npm包gulp-postcss来启用Autoprefixer。

var gulp = require('gulp');
gulp.task('autoprefixer', function () {
var postcss = require('gulp-postcss');
var autoprefixer = require('autoprefixer'); return gulp.src('./postcss/*.css')
.pipe(postcss([ autoprefixer({ browsers: ['last 2 versions'] }) ]))
.pipe(gulp.dest('./dist/postcss'));
});

webpack

在webpack中,你可以安装npm包postcss-loader来启用Autoprefixer。

var autoprefixer = require('autoprefixer');

module.exports = {
module: {
loaders: [
{
test: /\.css$/,
loader: "style-loader!css-loader!postcss-loader"
}
]
},
postcss: [ autoprefixer({ browsers: ['last 2 versions'] }) ]
}

grunt

在grunt中,你可以安装npm包grunt-postcss来启用Autoprefixer。

module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-postcss'); grunt.initConfig({
postcss: {
options: {
map: true,
processors: [
require('autoprefixer')({
browsers: ['last 2 versions']
})
]
},
dist: {
src: 'css/*.css'
}
}
}); grunt.registerTask('default', ['postcss:dist']);
};

2.在less、sass等css预处理器中处理前缀

less

在less中可以使用mixin来解决。

例如:

.animation(@args){
-webkit-animation:@args;
-moz-animation:@args;
-ms-animation:@args;
-o-animation:@args;
animation:@args;
}

然后调用:

div{
.animation(fadeIn 1s);
}

sass

在sass中可以使用工具库compass来帮助我们。(安装compass前需要先安装Ruby,如何安装自行百度)

然后我们在sass中引入compass模块中需要的部分,然后通过@include命令调用,例如:

@import "compass/css3";
.rounded {
@include border-radius(5px);
}

编译后结果:

.rounded {
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
-o-border-radius: 5px;
-ms-border-radius: 5px;
-khtml-border-radius: 5px;
border-radius: 5px;
}

3.css预处理搭配构建工具使用Autoprefixer更酸爽

其实我们也看出来了,在预处理中添加前缀其实还是有点麻烦的,但是在webpack等工具中同时使用它们会更为便捷,思路其实很简单,就是:先用预处理器把less、sass转为css,然后再通过Autoprefixer给编译好的css加前缀。以webpack为例:

var autoprefixer = require('autoprefixer');

module.exports = {
module: {
loaders: [
{
test: /\.less$/,
loader: "style-loader!css-loader!postcss-loader!less-loader"
}
]
},
postcss: [ autoprefixer({ browsers: ['last 2 versions'] }) ]
}

首先我们先用less-loader编译less为css,然后在通过postcss-loader给编译后的css加前缀,就是这么简单。

参考文章:

https://github.com/postcss/autoprefixer

http://www.ruanyifeng.com/blog/2012/11/compass.html

http://blog.csdn.net/natalie86/article/details/43524285

还在手动给css加前缀?no!几种自动处理css前缀的方法简介的更多相关文章

  1. 翻译 | 关键CSS和Webpack: 减少阻塞渲染的CSS的自动化解决方案

    原文地址: Critical CSS and Webpack: Automatically Minimize Render-Blocking CSS 原文作者: Anthony Gore 译者: 蜗牛 ...

  2. 关键CSS和Webpack: 减少阻塞渲染的CSS的自动化解决方案

    原文地址: Critical CSS and Webpack: Automatically Minimize Render-Blocking CSS 原文作者: Anthony Gore 译者: 蜗牛 ...

  3. webpack配置:less/sass文件打包和分离、自动处理css前缀、消除未使用的css及完整的webpack.config.js文件

    一.less文件打包和分离 1.要使用less,首先使用npm安装less服务:还需要安装Less-loader用来打包使用. npm install less --save-dev npm inst ...

  4. css加载优化

    <head> <script> // https://github.com/filamentgroup/loadCSS !function(e){"use stric ...

  5. CSS 加载新方式

    Chrome 浏览器有意改变<link rel="stylesheet">的加载方式,当其出现在<body>中时,这一变化将更加明显.笔者决定在本文中进行详 ...

  6. css加载会造成阻塞吗?

    终于考试完了,今天突然想起来前阵子找实习的时候,今日头条面试官问我,js执行会阻塞DOM树的解析和渲染,那么css加载会阻塞DOM树的解析和渲染吗?所以,接下来我就来对css加载对DOM树的解析和渲染 ...

  7. css加载会造成阻塞吗

    本文由云+社区发表 作者:嘿嘿嘿 可能大家都知道,js执行会阻塞DOM树的解析和渲染,那么css加载会阻塞DOM树的解析和渲染吗?接下来,我就来对css加载对DOM树的解析和渲染的影响做一个测试. 为 ...

  8. ASP.NET重写Render 加载CSS样式文件和JS文件(切换CSS换皮肤)

    网页换皮肤的方式有很多种,最简单的通常就是切换页面CSS,而CSS通常写在外部CSS文件里.那么切换CSS其实就是更换html里的link href路径.我在网上搜索了下. 一般有两种方式: 1.页面 ...

  9. vue-loader 调用了cssLoaders方法配置了css加载器属性。

    module: { loaders: [ // 这里也是相应的配置,test就是匹配文件,loader是加载器, { test: /\.vue$/, loader: 'vue' }, { test: ...

随机推荐

  1. 【转】阿里云Ubuntu系统搭建SVN服务器

    ##SVN服务器相关软件安装 1.使用SSH远程服务器 (1)对于MAC OS/Liunx的用户直接打开终端输入 ssh  用户名@实例名,例如 ssh root@192.168.1.100 执行上面 ...

  2. CentOS7服务器配置网络

    Centos7最小化安装 [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-enp5s0f0编辑如下:TYPE=Ethernet ...

  3. python3——print使用

        print的初步认识:对于科班出身的或有相关经验的人来说,学习python是相当有趣的事,因为可以做日常任务, 比如自动备份你的MP3:可以做网站,如YouTube就是Python写的:可以做 ...

  4. (转)CloudStack 安装及使用过程中常见问题汇总

    CloudStack 安装及使用过程中常见问题汇总             在做工程项目中对CloudStack 安装及使用过程中常见的几个问题及如何解决做一个总结.   1.Windows XP虚拟 ...

  5. html样式表格

    <html><body><table border="1">  <tr height="20px">    &l ...

  6. 大数据入门第二十二天——spark(二)RDD算子(1)

    一.RDD概述 1.什么是RDD RDD(Resilient Distributed Dataset)叫做分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变.可分区.里面的元素可并行计算的 ...

  7. Android下so注入汇总

    /**  作者:蟑螂一号*  原文链接:http://www.sanwho.com/133.html*  转载请注明出处*/ Android下so注入是基于ptrace系统调用,因此要想学会andro ...

  8. 20155318 《网络攻防》Exp6 信息搜集与漏洞扫描

    20155318 <网络攻防>Exp6 信息搜集与漏洞扫描 基础问题 哪些组织负责DNS,IP的管理. 互联网名称与数字地址分配机构,ICANN机构.其下有三个支持机构,其中地址支持组织( ...

  9. springmvc接收json注意事项

            在以前使用SpringMvc框架时,在接受json数据时碰到了一些奇怪的问题.这里记录下来,方便以后查阅. 1. data 里写json对象 , 即该json数据没有被单(双)引号包住 ...

  10. 【第十三课】监控Linux系统状态

    目录 1.查看系统负载命令:w.uptime 2.vmstat详解 3.top动态查看负载 4.sar命令(监控网卡流量) 5.nload命令(监控网卡流量) 6.iostat iotop(监控IO性 ...