当前位置:   article > 正文

postcss的安装与使用

postcss的安装与使用

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

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

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

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

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

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

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

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

初始化目录

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

编写测试的css文件

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

  1. button {
  2. border-radius: 4px;
  3. transition: all 0.8s;
  4. color: $red;
  5. width: 100px;
  6. }

安装相关npm包

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

编写gulpfile.js

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

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

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

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

增加autoprefixer插件

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

  1. var gulp = require('gulp');
  2. var postcss = require('gulp-postcss');
  3. gulp.task('css', function() {
  4. var processors = [
  5. autoprefixer
  6. ];
  7. return gulp.src('./css/*.css')
  8. .pipe(postcss(processors))
  9. .pipe(gulp.dest('./build/'));
  10. });
  11. function autoprefixer(css) {
  12. css.walkDecls(function(decl) {
  13. if (decl.prop === 'border-radius' || decl.prop === 'transition') {
  14. decl.cloneBefore({prop: '-moz-' + decl.prop});
  15. decl.cloneBefore({prop: '-o-' + decl.prop});
  16. decl.cloneBefore({prop: '-webkit-' + decl.prop});
  17. }
  18. return decl;
  19. });
  20. }

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

  1. button {
  2. -moz-border-radius: 4px;
  3. -o-border-radius: 4px;
  4. -webkit-border-radius: 4px;
  5. border-radius: 4px;
  6. -moz-transition: all 0.8s;
  7. -o-transition: all 0.8s;
  8. -webkit-transition: all 0.8s;
  9. transition: all 0.8s;
  10. color: $red;
  11. width: 100px;
  12. }

增加resolveVar插件

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

  1. var gulp = require('gulp');
  2. var postcss = require('gulp-postcss');
  3. gulp.task('css', function() {
  4. var processors = [
  5. autoprefixer,
  6. resoleVar
  7. ];
  8. return gulp.src('./css/*.css')
  9. .pipe(postcss(processors))
  10. .pipe(gulp.dest('./build/'));
  11. });
  12. function autoprefixer(css) {
  13. css.walkDecls(function(decl) {
  14. if (decl.prop === 'border-radius' || decl.prop === 'transition') {
  15. decl.cloneBefore({prop: '-moz-' + decl.prop});
  16. decl.cloneBefore({prop: '-o-' + decl.prop});
  17. decl.cloneBefore({prop: '-webkit-' + decl.prop});
  18. }
  19. return decl;
  20. });
  21. }
  22. function resoleVar(css) {
  23. css.walkDecls(function(decl) {
  24. if (decl.prop === 'color' && decl.value.indexOf('$red') > -1) {
  25. decl.value = decl.value.replace('$red', '#f00');
  26. }
  27. return decl;
  28. });
  29. }

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

  1. button {
  2. -moz-border-radius: 4px;
  3. -o-border-radius: 4px;
  4. -webkit-border-radius: 4px;
  5. border-radius: 4px;
  6. -moz-transition: all 0.8s;
  7. -o-transition: all 0.8s;
  8. -webkit-transition: all 0.8s;
  9. transition: all 0.8s;
  10. color: #f00;
  11. width: 100px;
  12. }

增加px2rem插件

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

  1. var gulp = require('gulp');
  2. var postcss = require('gulp-postcss');
  3. gulp.task('css', function() {
  4. var processors = [
  5. autoprefixer,
  6. resoleVar,
  7. px2rem
  8. ];
  9. return gulp.src('./css/*.css')
  10. .pipe(postcss(processors))
  11. .pipe(gulp.dest('./build/'));
  12. });
  13. function autoprefixer(css) {
  14. css.walkDecls(function(decl) {
  15. if (decl.prop === 'border-radius' || decl.prop === 'transition') {
  16. decl.cloneBefore({prop: '-moz-' + decl.prop});
  17. decl.cloneBefore({prop: '-o-' + decl.prop});
  18. decl.cloneBefore({prop: '-webkit-' + decl.prop});
  19. }
  20. return decl;
  21. });
  22. }
  23. function resoleVar(css) {
  24. css.walkDecls(function(decl) {
  25. if (decl.prop === 'color' && decl.value.indexOf('$red') > -1) {
  26. decl.value = decl.value.replace('$red', '#f00');
  27. }
  28. return decl;
  29. });
  30. }
  31. function px2rem(css) {
  32. css.walkDecls(function(decl) {
  33. if(/\d+px/.test(decl.value)) {
  34. decl.value = decl.value.replace(/\d+px/, function(dest) {
  35. return parseInt(dest) / 20 + 'rem';
  36. })
  37. }
  38. return decl;
  39. });
  40. }

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

  1. button {
  2. -moz-border-radius: 0.2rem;
  3. -o-border-radius: 0.2rem;
  4. -webkit-border-radius: 0.2rem;
  5. border-radius: 0.2rem;
  6. -moz-transition: all 0.8s;
  7. -o-transition: all 0.8s;
  8. -webkit-transition: all 0.8s;
  9. transition: all 0.8s;
  10. color: #f00;
  11. width: 5rem;
  12. }

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

postcss插件

autoprefixer

npm install autoprefixer --save

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

precss

npm install precss --save

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

如何使用

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

  1. /**
  2. * 此处省略N行
  3. */
  4. var autoprefixer = require('autoprefixer');
  5. var precss = require('precss');
  6. /**
  7. * 此处省略N行
  8. */
  9. var processors = [
  10. autoprefixer({browsers: ['last 10 version'], cascade: false, remove: false}),
  11. resoleVar,
  12. px2rem,
  13. precss
  14. ];
  15. /**
  16. * 此处省略N行
  17. */

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

  1. button {
  2. border-radius: 4px;
  3. transition: all 0.8s;
  4. color: $red;
  5. width: 100px;
  6. box-sizing: border-box;
  7. }
  8. .menu {
  9. a {
  10. text-decoration: none;
  11. }
  12. }

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

  1. button {
  2. -webkit-border-radius: 0.2rem;
  3. border-radius: 0.2rem;
  4. -webkit-transition: all 0.8s;
  5. transition: all 0.8s;
  6. color: #f00;
  7. width: 5rem;
  8. -webkit-box-sizing: border-box;
  9. box-sizing: border-box;
  10. }
  11. .menu a {
  12. text-decoration: none;
  13. }
昂 文章到此结束了!
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号