postcss的安装与使用
我是经过公司另外一个同事推荐的这个
他是一个资深的大哥哥 我觉得我确实需要跟多的学习和成长 而且我觉得我应该听他的话 多学学新知识
最近一直在做适配的网站 会出现很多媒体查询 我发现用这个写媒体查询 会很方面开发 能很大的提升开发速度
于是我今天特意来公司 (在家里没有学习的心思 就只想吃东西 但是我今天在公司还是吃了很多零食 )
我费了九牛二虎之力还是没有弄好 于是乎我开始弄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的安装与使用的更多相关文章
- postcss gulp 安装使用
备注: 测试使用的是gulp 进行的编译 1. 项目初始化 npm init mkdir src touch app.css body{ display: flex; } 2. 安装(gulp ...
- [译]PostCSS介绍
PostCSS介绍 原文链接:http://www.smashingmagazine.com/2015/12/introduction-to-postcss/ 转自:http://www.zcfy.c ...
- webpack 3.X学习之CSS处理
Loaders Loaders是Webpack最重要的功能之一,他也是Webpack如此盛行的原因.通过使用不同的Loader,Webpack可以的脚本和工具,从而对不同的文件格式进行特定处理. Lo ...
- Webpack3.X版 学习全文
如果你webpack用的是4.x版本,此文章部分知识有所改动,所以学习时尽量使用3.x的版本. 本文讲解的是Webpack3.0+的知识,努力做到全网最好的webpack3.0教程.文章通过一个半月的 ...
- 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'] ...
- 展望未来:使用 PostCSS 和 cssnext 书写 CSS
原文链接:A look into writing future CSS with PostCSS and cssnext 译者:nzbin 像twitter,google,bbc使用的一样,我打算看一 ...
- PostCSS深入学习: PostCSS和Sass、Stylus或LESS一起使用
如果你喜欢使用PostCSS,但又不想抛弃你最喜欢的预处理器.不用担心,你不需要作出二选一的选择,你可以把PostCSS和预处理器(Sass.Stylus或LESS)结合起来使用. 有几个PostCS ...
- 在 CSS 预编译器之后:PostCSS
提到css预编译器(css preprocessor),你可能想到Sass.Less以及Stylus.而本文要介绍的PostCSS,正是一个这样的工具:css预编译器可以做到的事,它同样可以做到. “ ...
- PostCSS一种更优雅、更简单的书写CSS方式
Sass团队创建了Compass大大提升CSSer的工作效率,你无需考虑各种浏览器前缀兼,只需要按官方文档的书写方式去写,会得到加上浏览器前缀的代码,如下: .row { @include displ ...
随机推荐
- sharepoint 2013实践
之前在一篇文章中说过了SharePoint环境的安装.那么如何使用SharePoint开发一个站点呢?这就是本篇所要阐述的问题. 在如何具体操作之前,我们先来普及下SharePoint基础知识.Far ...
- 手摸手教你微信小程序开发之自定义组件
前言 相信大家在开发小程序时会遇到某个功能多次使用的情况,比如弹出框.这个时候大家首先想到的是组件化开发,就是把弹出框封装成一个组件,然后哪里使用哪里就调用,对,看来大家都是有思路的人,但是要怎样实现 ...
- 今天给大家分享用Python matplotlib来写随机漫步的小程序
先安装两个库: pip install matplotlib pip install numpy 引用库: import matplotlib.pyplot as mp import numpy as ...
- call是什么?一次说个明白
首先简单粗暴的从例子中看概念 var a = {}; function foo() { this.name = "hello"; this.age = 100 } foo.call ...
- Unity3D打包 将发布的exe文件打包成一个Windows安装文件(自解压文件)
Unity打包Standalone时 会出现一个exe文件和一个data文件夹 可是我们平常见过的软件 基本没有这种像这种结构的 一般都是一个安装文件,然后点击安装,选择路径,生成快捷方式- 本篇博客 ...
- postgresql数据操作
windows下操作postgresql 删除数据库:dropdb.exe -U postgres 数据库名称 创建数据库createdb.exe -U postgres lilei_db1--lil ...
- 剑指Offer-链表中环的入口结点
package LinkedList; import java.util.HashSet; /** * 链表中环的入口结点 * 一个链表中包含环,请找出该链表的环的入口结点. */ public cl ...
- UVA 10305 Ordering Tasks(拓扑排序的队列解法)
题目链接: https://vjudge.net/problem/UVA-10305#author=goodlife2017 题目描述 John有n个任务,但是有些任务需要在做完另外一些任务后才能做. ...
- 线程池的submit和execute方法区别
线程池中的execute方法大家都不陌生,即开启线程执行池中的任务.还有一个方法submit也可以做到,它的功能是提交指定的任务去执行并且返回Future对象,即执行的结果.下面简要介绍一下两者的三个 ...
- JVM学习五:JVM之类加载器之编译常量和主动使用
在学习了前面几节的内容后,相信大家已经对JAVA 虚拟机 加载类的过程有了一个认识和了解,那么本节,我们就继续进一步巩固前面所学知识和特殊点. 一.类的初始化回顾 类在初始化的时候,静态变量的声明语句 ...