还在手动给css加前缀?no!几种自动处理css前缀的方法简介
原文首发于个人博客:还在手动给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前缀的方法简介的更多相关文章
- 翻译 | 关键CSS和Webpack: 减少阻塞渲染的CSS的自动化解决方案
原文地址: Critical CSS and Webpack: Automatically Minimize Render-Blocking CSS 原文作者: Anthony Gore 译者: 蜗牛 ...
- 关键CSS和Webpack: 减少阻塞渲染的CSS的自动化解决方案
原文地址: Critical CSS and Webpack: Automatically Minimize Render-Blocking CSS 原文作者: Anthony Gore 译者: 蜗牛 ...
- webpack配置:less/sass文件打包和分离、自动处理css前缀、消除未使用的css及完整的webpack.config.js文件
一.less文件打包和分离 1.要使用less,首先使用npm安装less服务:还需要安装Less-loader用来打包使用. npm install less --save-dev npm inst ...
- css加载优化
<head> <script> // https://github.com/filamentgroup/loadCSS !function(e){"use stric ...
- CSS 加载新方式
Chrome 浏览器有意改变<link rel="stylesheet">的加载方式,当其出现在<body>中时,这一变化将更加明显.笔者决定在本文中进行详 ...
- css加载会造成阻塞吗?
终于考试完了,今天突然想起来前阵子找实习的时候,今日头条面试官问我,js执行会阻塞DOM树的解析和渲染,那么css加载会阻塞DOM树的解析和渲染吗?所以,接下来我就来对css加载对DOM树的解析和渲染 ...
- css加载会造成阻塞吗
本文由云+社区发表 作者:嘿嘿嘿 可能大家都知道,js执行会阻塞DOM树的解析和渲染,那么css加载会阻塞DOM树的解析和渲染吗?接下来,我就来对css加载对DOM树的解析和渲染的影响做一个测试. 为 ...
- ASP.NET重写Render 加载CSS样式文件和JS文件(切换CSS换皮肤)
网页换皮肤的方式有很多种,最简单的通常就是切换页面CSS,而CSS通常写在外部CSS文件里.那么切换CSS其实就是更换html里的link href路径.我在网上搜索了下. 一般有两种方式: 1.页面 ...
- vue-loader 调用了cssLoaders方法配置了css加载器属性。
module: { loaders: [ // 这里也是相应的配置,test就是匹配文件,loader是加载器, { test: /\.vue$/, loader: 'vue' }, { test: ...
随机推荐
- P2731 骑马修栅栏 Riding the Fences
题目描述 John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编一个程序,读入栅栏网络的描述,并计算出一条修栅栏的路径,使每个栅栏都恰好被经过一次.John能从任何一个顶 ...
- CAN2.0A 和CAN2.0B
CAN2.0A 和CAN2.0B 原创 2015年08月03日 16:03:08 3969 CAN2.0A 是CAN协议的PART A部分,此部分定义了11bit的标识区 .CAN2.0B 是CAN协 ...
- 快速在Ubuntu安装PHP网站
快速安装使用的是tasksel,tasksel是Debian / Ubuntu的工具,安装多个相关软件包作为一个协调的“任务”到你的系统.这个lamp-server^跟taskel这个程序有关.下面是 ...
- odoo之自动生成编号问题
单独的seq.xml文件 <?xml version="1.0" encoding="utf-8"?><openerp> <dat ...
- Kafka查看topic、consumer group状态命令
最近工作中遇到需要使用kafka的场景,测试消费程序启动后,要莫名的过几十秒乃至几分钟才能成功获取到到topic的partition和offset,而后开始消费数据,于是学习了一下查看kafka br ...
- python基础学习1-流程控制和判断
python for循环和 if流程控制用法 Ages=22 for i in range(10): inputAges = int(input("输入年龄")) if input ...
- kvm虚拟化一: 图形化的管理方式
1.安装必要工具yum install -y / qemu-kvm //kvm主程序 libvirt //虚拟化服务库 libguestfs-tools //虚拟机系统管理工具 virt-instal ...
- 【python笔记】使用matplotlib,pylab进行python绘图
一提到python绘图,matplotlib是不得不提的python最著名的绘图库,它里面包含了类似matlab的一整套绘图的API.因此,作为想要学习python绘图的童鞋们就得在自己的python ...
- 《无所不能的JavaScript编程系列:setTimeout 简笔》
前言:问题引出 JavaScript中会经常用到setTimeout来推迟一个函数的执行,如: setTimeout(function(){alert("Hello World") ...
- jmeter的开启
先申明我以jmeter的3.2版本来描述本文内容,通常不要选择太新的版本,因为新版本容易出现不稳定和不兼容因素.启动jmeter的前提是JDK已经安装和配置,具体的JDK已经安装和配置自行查资料,此处 ...