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

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

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

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

我费了九牛二虎之力还是没有弄好  于是乎我开始弄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. [BZOJ3223] [Tyvj1729] 文艺平衡树 (splay)

    Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3  ...

  2. Java .classpath文件Classpath entry org.maven.eclipse.MAVEN2_CLASSPATH_CONTAINER will not be exported or published异常解决办法

    在实际用Maven构建Java Web项目开发过程中,有时候会出现上述情况的警告,如果不解决这个警告,就会在启动Web服务器的时候抛出无法加载Maven管理的第三方jar包的异常. 所以,要解决上面的 ...

  3. thinkPHP5使用的一些小配置

    开发环境: 版本:php5.6 系统:windows 工具:phpstudy.vscode 遇到的报错信息error: 一.原php5.4版本(不限定)切换到5.6版本,路由报错: No input ...

  4. Spring Boot 系列(八)@ControllerAdvice 拦截异常并统一处理

    在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler.@InitBinder.@ModelAttribute,并应用到所有@Requ ...

  5. Microsoft AI - Custom Vision

    概述 前几天的 Windows Developer Day 正式发布了 Windows AI Platform,而作为 Windows AI Platform 的模型定义和训练,更多还是需要借助云端来 ...

  6. 交换排序—快速排序(Quick Sort)

    基本思想: 1)选择一个基准元素,通常选择第一个元素或者最后一个元素, 2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小.另一部分记录的 元素值比基准值大. 3 ...

  7. 使用domain模块捕获异步回调中的异常

    和其他服务器端语言相比,貌似node.js 对于异常捕捉确实非常困难. 首先你会想到try/catch ,但是在使用过程中我们会发现并没有真正将错误控制在try/catch 语句中. 为什么? 答案是 ...

  8. 【Python】 docker-py 用Python调用Docker接口

    [docker-py] 官方文档:[https://docker-py.readthedocs.io/en/stable/images.html] 众所周知,Docker向外界提供了一个API来管理其 ...

  9. centos下mongodb备份(dump)与还原(restore)

    数据服务器,数据库采用mongodb数据库 安装:通过增加配置安装mongodb-org,版本为3.0.7,yum安装            yum install mongodb-org 数据备份与 ...

  10. Lucene详解

    一.lucene原理 Lucene 是apache软件基金会一个开放源代码的全文检索引擎工具包,是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎.它不是一个完整的搜索应用程序 ...