我是经过公司另外一个同事推荐的这个

他是一个资深的大哥哥  我觉得我确实需要跟多的学习和成长 而且我觉得我应该听他的话 多学学新知识

最近一直在做适配的网站 会出现很多媒体查询 我发现用这个写媒体查询 会很方面开发 能很大的提升开发速度

于是我今天特意来公司 (在家里没有学习的心思 就只想吃东西 但是我今天在公司还是吃了很多零食 )

我费了九牛二虎之力还是没有弄好  于是乎我开始弄less 发现很好弄 但是我还是不想死心

就在我心灰意冷的时候发现了一篇文章 虽然我也好复制 但是还是要把原作地址写出来

https://segmentfault.com/a/1190000006735589#articleHeader0

下面我开始ctrl + c and ctrl + v 了   因为他写的有一写很死的东西  我想粘出来 后续做修改

初始化目录

cd ~/workspace/postcss #进入你自己的工具目录
mkdir postcss
cd postcss
mkidr css
npm init #初始化package.json,一路回车即可

编写测试的css文件

进入到css目录,新建一个index.css文件,键入如下内容:

button {
border-radius: 4px;
transition: all 0.8s;
color: $red;
width: 100px;
}

安装相关npm包

npm install gulp gulp-postcss --save #安装需要的包,这里使用gulp来构建、打包

编写gulpfile.js

postcss文件夹根目录新建一个gulpfile.js文件,键入如下内容:

var gulp = require('gulp');
var postcss = require('gulp-postcss'); gulp.task('css', function() {
//postcss处理器列表,暂时为空
var processors = [];
return gulp.src('./css/*.css')
.pipe(postcss(processors))
.pipe(gulp.dest('./build/'));
});

执行gulp css,测试一下打包是否正常!

查看生成的build/index.css文件,和原始文件一样。
因为目前processors数组还没有加入任何插件!

增加autoprefixer插件

修改gulpfile.js,完成后如下:

var gulp = require('gulp');
var postcss = require('gulp-postcss'); gulp.task('css', function() {
var processors = [
autoprefixer
];
return gulp.src('./css/*.css')
.pipe(postcss(processors))
.pipe(gulp.dest('./build/'));
}); function autoprefixer(css) {
css.walkDecls(function(decl) {
if (decl.prop === 'border-radius' || decl.prop === 'transition') {
decl.cloneBefore({prop: '-moz-' + decl.prop});
decl.cloneBefore({prop: '-o-' + decl.prop});
decl.cloneBefore({prop: '-webkit-' + decl.prop});
}
return decl;
});
}

重新执行gulp css打包,完成后查看`build/index.css',如下:

button {
-moz-border-radius: 4px;
-o-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
-moz-transition: all 0.8s;
-o-transition: all 0.8s;
-webkit-transition: all 0.8s;
transition: all 0.8s;
color: $red;
width: 100px;
}

增加resolveVar插件

修改gulpfile.js,完成后如下:

var gulp = require('gulp');
var postcss = require('gulp-postcss'); gulp.task('css', function() {
var processors = [
autoprefixer,
resoleVar
];
return gulp.src('./css/*.css')
.pipe(postcss(processors))
.pipe(gulp.dest('./build/'));
}); function autoprefixer(css) {
css.walkDecls(function(decl) {
if (decl.prop === 'border-radius' || decl.prop === 'transition') {
decl.cloneBefore({prop: '-moz-' + decl.prop});
decl.cloneBefore({prop: '-o-' + decl.prop});
decl.cloneBefore({prop: '-webkit-' + decl.prop});
}
return decl;
});
} function resoleVar(css) {
css.walkDecls(function(decl) {
if (decl.prop === 'color' && decl.value.indexOf('$red') > -1) {
decl.value = decl.value.replace('$red', '#f00');
}
return decl;
});
}

重新执行gulp css打包,完成后查看`build/index.css',如下:

button {
-moz-border-radius: 4px;
-o-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
-moz-transition: all 0.8s;
-o-transition: all 0.8s;
-webkit-transition: all 0.8s;
transition: all 0.8s;
color: #f00;
width: 100px;
}

增加px2rem插件

修改gulpfile.js,完成后如下:

var gulp = require('gulp');
var postcss = require('gulp-postcss'); gulp.task('css', function() {
var processors = [
autoprefixer,
resoleVar,
px2rem
];
return gulp.src('./css/*.css')
.pipe(postcss(processors))
.pipe(gulp.dest('./build/'));
}); function autoprefixer(css) {
css.walkDecls(function(decl) {
if (decl.prop === 'border-radius' || decl.prop === 'transition') {
decl.cloneBefore({prop: '-moz-' + decl.prop});
decl.cloneBefore({prop: '-o-' + decl.prop});
decl.cloneBefore({prop: '-webkit-' + decl.prop});
}
return decl;
});
} function resoleVar(css) {
css.walkDecls(function(decl) {
if (decl.prop === 'color' && decl.value.indexOf('$red') > -1) {
decl.value = decl.value.replace('$red', '#f00');
}
return decl;
});
} function px2rem(css) {
css.walkDecls(function(decl) {
if(/\d+px/.test(decl.value)) {
decl.value = decl.value.replace(/\d+px/, function(dest) {
return parseInt(dest) / 20 + 'rem';
})
}
return decl;
});
}

重新执行gulp css打包,完成后查看`build/index.css',如下:

button {
-moz-border-radius: 0.2rem;
-o-border-radius: 0.2rem;
-webkit-border-radius: 0.2rem;
border-radius: 0.2rem;
-moz-transition: all 0.8s;
-o-transition: all 0.8s;
-webkit-transition: all 0.8s;
transition: all 0.8s;
color: #f00;
width: 5rem;
}

经过了上面这三个简单的processor之后,相信大家对postcss的认识会更直白一点了吧。。。

postcss插件

autoprefixer

npm install autoprefixer --save

和之前我们自己实现autoprefixer的类似,只不过这个插件做的更好更全一点。

precss

npm install precss --save

press语法和Sass极其相似,你可以毫不费力的使用它。

如何使用

和上面的一样,加入到processors即可,如下:

/**
* 此处省略N行
*/
var autoprefixer = require('autoprefixer');
var precss = require('precss');
/**
* 此处省略N行
*/
var processors = [
autoprefixer({browsers: ['last 10 version'], cascade: false, remove: false}),
resoleVar,
px2rem,
precss
];
/**
* 此处省略N行
*/

为了验证插件确实生效了,修改一下css文件,如下:

button {
border-radius: 4px;
transition: all 0.8s;
color: $red;
width: 100px;
box-sizing: border-box;
} .menu {
a {
text-decoration: none;
}
}

执行gulp css再次重新打包,结果如下:

 
button {
-webkit-border-radius: 0.2rem;
border-radius: 0.2rem;
-webkit-transition: all 0.8s;
transition: all 0.8s;
color: #f00;
width: 5rem;
-webkit-box-sizing: border-box;
box-sizing: border-box;
} .menu a {
text-decoration: none;
}
昂 文章到此结束了!

postcss的安装与使用的更多相关文章

  1. postcss gulp 安装使用

    备注:    测试使用的是gulp 进行的编译 1. 项目初始化 npm init mkdir src touch app.css body{ display: flex; } 2. 安装(gulp ...

  2. [译]PostCSS介绍

    PostCSS介绍 原文链接:http://www.smashingmagazine.com/2015/12/introduction-to-postcss/ 转自:http://www.zcfy.c ...

  3. webpack 3.X学习之CSS处理

    Loaders Loaders是Webpack最重要的功能之一,他也是Webpack如此盛行的原因.通过使用不同的Loader,Webpack可以的脚本和工具,从而对不同的文件格式进行特定处理. Lo ...

  4. Webpack3.X版 学习全文

    如果你webpack用的是4.x版本,此文章部分知识有所改动,所以学习时尽量使用3.x的版本. 本文讲解的是Webpack3.0+的知识,努力做到全网最好的webpack3.0教程.文章通过一个半月的 ...

  5. nuxt/eapress 安装报错Module build failed: ValidationError: PostCSS Loader Invalid OptionsModule build failed: ValidationError: PostCSS Loader Invalid Options options['useConfigFile'] is an invalid additi

    错误信息: Module build failed: ValidationError: PostCSS Loader Invalid Options options['useConfigFile'] ...

  6. 展望未来:使用 PostCSS 和 cssnext 书写 CSS

    原文链接:A look into writing future CSS with PostCSS and cssnext 译者:nzbin 像twitter,google,bbc使用的一样,我打算看一 ...

  7. PostCSS深入学习: PostCSS和Sass、Stylus或LESS一起使用

    如果你喜欢使用PostCSS,但又不想抛弃你最喜欢的预处理器.不用担心,你不需要作出二选一的选择,你可以把PostCSS和预处理器(Sass.Stylus或LESS)结合起来使用. 有几个PostCS ...

  8. 在 CSS 预编译器之后:PostCSS

    提到css预编译器(css preprocessor),你可能想到Sass.Less以及Stylus.而本文要介绍的PostCSS,正是一个这样的工具:css预编译器可以做到的事,它同样可以做到. “ ...

  9. PostCSS一种更优雅、更简单的书写CSS方式

    Sass团队创建了Compass大大提升CSSer的工作效率,你无需考虑各种浏览器前缀兼,只需要按官方文档的书写方式去写,会得到加上浏览器前缀的代码,如下: .row { @include displ ...

随机推荐

  1. HiHocoder1419 : 后缀数组四·重复旋律4&[SPOJ]REPEATS:Repeats

    题面 Hihocoder Vjudge Sol 题目的提示说的也非常好 我对求\(LCP(P - L + len \% l, P + len \% L)\)做补充 \(len=LCP(P, P + L ...

  2. [BZOJ1006] [HNOI2008] 神奇的国度 (弦图)

    Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则.他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的.为了巩固三角关系,K国禁止四边关系,五边关系 ...

  3. [BZOJ4291] [PA2015] Kieszonkowe

    Description 给定n个数,请从中选出若干个数,使得总和为偶数,请最大化这个总和.  Input 第一行包含一个正整数n(1<=n<=1000000). 第二行包含n个正整数a_1 ...

  4. oracle 裸设备划分 --centos6.5

    主题思想:物理卷PV->卷组VG->逻辑卷LV(类型:raw)->添加表空间 操作过程 vg_orcl         8g 一:划分 二:创建裸设备 方法1:目前最常用的方法 #c ...

  5. 关于如何使用SVN的一些建议

    SVN是管理源码的主流方式之一,当多人同时编辑同一项目时经常会出现冲突,本文主要针对Asp.net 项目开发中使用SVN提出一点建议. 1.忽略asp.net 项目中的非源代码文件 .VS目录是vis ...

  6. 用Node.js写爬虫,撸羞羞的图片

    说到爬虫,很多人都认为是很高大上的东西.哇塞,是不是可以爬妹纸图啊,是不是可以爬小片片啊.答案就是对的.爬虫可以完成这些东西的操作.但是,作为一个正直的程序员,我们要在法律允许范围内用爬虫来为我们服务 ...

  7. PAT 个位数统计

    描述 给定一个k位整数N = dk-1*10k-1 + ... + d1*101 + d0 (0<=di<=9, i=0,...,k-1, dk-1>0),请编写程序统计每种不同的个 ...

  8. Android_内部文件读取

    我们这里做一个安卓的简易的文件读取程序之记住密码 首先我们先明确安卓的存储路径, 所有安装至手机的应用都会在 data/data 目录下生成一个安卓文件夹(包名),这个文件夹就是安卓存储的路径 在运行 ...

  9. JAVA代码提示

    经过以上过程,整个项目需要的环境差不多搭建完成了.接下来一个小技巧,如下图进行配置之后就可以将只在.出现时进行代码提示换成任意字母+.出现时的代码提示了(.abcdefghijklmnopqrstuv ...

  10. Konckout第三个实例:循环绑定 -- table列表数据的填充

    传统js:拼接字符串,再写入指定标签中 <!DOCTYPE html> <html> <head> <meta charset="utf-8&quo ...