还在手动给css加前缀?no!几种自动处理css前缀的方法简介

原文首发于我的博客:还在手动给css加前缀?no!几种自动处理css前缀的方法简介
咱们知道在写css的时候因为要兼容不一样厂商浏览器,一些比较新的属性须要给它们添加厂商前缀来兼容。移动端还好,基本只要兼容webkit内核的便可,pc端就虐心了,ff、ie、Opera……能够说五花八门,应有尽有,每次要使用例如一些css3属性的时候,就要考虑到添加前缀兼容的问题,那么多属性那么多前缀,简直是泯灭人性!css

不过好在如今各类工具的出现,已经能够很好地解决这个问题了,下面就简单介绍几个吧。html

1. postcss

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

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

使用效果

编译前:git

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

编译后:github

.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等web

gulpnpm

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

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

相关文章
相关标签/搜索