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 ...
随机推荐
- 【CJOJ1372】【洛谷2730】【USACO 3.2.5】魔板
题面 Description 在成功地发明了魔方之后,鲁比克先生发明了它的二维版本,称作魔板.这是一张有8个大小相同的格子的魔板: 1 2 3 4 8 7 6 5 我们知道魔板的每一个方格都有一种颜色 ...
- [BZOJ2684][CEOI2004]锯木厂选址
BZOJ权限题! Description 从山顶上到山底下沿着一条直线种植了n棵老树.当地的政府决定把他们砍下来.为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂. 木材只能按照一个方向运输:朝山下运 ...
- 论文笔记(3):STC: A Simple to Complex Framework for Weakly-supervised Semantic Segmentation
论文题目是STC,即Simple to Complex的一个框架,使用弱标签(image label)来解决密集估计(语义分割)问题. 2014年末以来,半监督的语义分割层出不穷,究其原因还是因为pi ...
- Python可视化库-Matplotlib使用总结
在做完数据分析后,有时候需要将分析结果一目了然地展示出来,此时便离不开Python可视化工具,Matplotlib是Python中的一个2D绘图工具,是另外一个绘图工具seaborn的基础包 先总结下 ...
- 【noip模拟】Fantasia
Time Litmit: 1000ms Memory Limit: 256MB Description 给定一张 $N$ 个点.$M$ 条边的无向图 $G$ .每个点有个权值$W_i$. 我 ...
- JAVA通过COM接口操作PPT
一. 背景说明 在Eclipse环境下,开发JAVA代码操作PPT,支持对PPT模板的修改.包括修改文本标签.图表.表格.满足大多数软件生成PPT报告的要求,即先收工创建好模板,在程序中修改模板数据. ...
- C#编写一款qq消息群发器
先上软件成品图 功能编写大概分为以下几个部分了: 获取QQ分组 发送消息 先来讲发送消息吧,实现还是比较简单 //这段主要是用来打开会话窗口的(只能列表中的好友进行会话的) System.Diagno ...
- LAMP基础
前言:上一篇博文,说到了URL.http的协议.事务以及私有https的实现.此次 一. 概念: LAMP: a:apache m:mariadb,mysql p:php,perl,python 二. ...
- Python解析Yahoo的XML格式的天气预报数据
以下是Yahoo天气预报接口xml格式数据: <rss xmlns:yweather="http://xml.weather.yahoo.com/ns/rss/1.0" xm ...
- Apache中限制和允许特定IP访问
Apache中限制和允许特定IP访问<Directory "/var/www">Options AllAllowOverride NoneOrder Deny,Allo ...