更便捷的css处理方式-postcss

摘要:
一种更方便的css处理方法——PostCSS通常会介绍什么是东西以及如何使用它。什么是明信片?现在让我们回到postcss是什么的基本问题。我认为主要原因是它提供了丰富的插件功能,这可以使工作更加简单和方便。总之,您只需要编写基本的CSS,其他功能可以移交给Postcss。Postcs可以很容易地引入当前工作流。
更便捷的css处理方式-PostCSS

一般来说介绍一个东西都是要从是什么,怎么用的顺序来讲。我感觉这样很容易让大家失去兴趣,先看一下postcss能做点什么,有兴趣的话再往下看,否则可能没有耐心看下去。让我们开始吧

postcss能做什么

补全css属性浏览器前缀

手写的代码可以是这样的:

.div{
    display: flex;
}

postcss可以转换之后成了这样:

.div{
    display: -webkit-box;
    display: -ms-flexbox;
    display: flex;
}

检查css语法

    body{
    color: #f0;
    }

会有以下提示:

src/er.css
 2:12  ✖  Unexpected invalid hex color "#f0"   color-no-invalid-hex



[18:27:28] 'css-lint' errored after 98 ms
[18:27:28] Error in plugin 'gulp-stylelint'
Message:
    Failed with 1 error

拥抱下个版本规范的css 即css4

对于下个规范的css而言,变量,方法等功能的都会增加上去,你可以这样来定义一个变量:

:root { 
    --red: #d33;
  }
  a { 
      color: var(--red);
  }

当然直接在现有浏览器上是跑不通的,就正如es2015刚开始一样,我们需要一个转化器来将其转成当前可用规范。postcss的插件就可以做到。

a{
    color:#d33
}

除了上面之外还有其他很多功能,postcss及其插件都能提供。

什么是postcss

现在让我们回到最基本的问题,postcss是什么。
援引官网的定义,一种使用js来转化css的工具(A tool for transforming CSS with JavaScript)。其实我们更多的时候提到postcss是有两个含义的:

  1. postcss本身,也就是我们npm install时的安装部分
  2. 基于postCss的丰富插件系统。
    上文那些功能,都是基于postcss的插件提供的功能。

postcss本身并不直接用于处理样式,只有配合它的插件,才能完成相关的编译工作。

postcss不是预编译语言的替代品

我想你脑海里一直在复现两个名词,less/sass,开始的时候我也一样,认为postcss跟二者一样是一种css预编译语言或者起到类似作用的一种语言。postcss不是要取代哪一个,更多的是提供的一种补充,完全可以是互补的概念。
作为一个是使用js将css转化为AST然后进行处理的工具,完全不是预处理语言的替代品,postcss处理的必须是css文件,所以完全可以和预编译语言结合,使用预编译语言转化为css之后然后进行处理。
我一直认为两者不是互斥的关系,完全可以互补使用。

为什么需要postcss

大家可能有这么个疑问既然两者不互相冲突,目前我使用less/sass 也很容易满足我的需求,为什么要使用新的东西呢。我认为主要原因是其提供的丰富的插件功能,可以工作更加的简单化,便捷化,一句话,你只需要编写基本的css,其他的功能交给postcss就好。做了简单的对比可能更加清晰明了。

实现给css属性加上浏览器前缀的功能

对比一下less和postcss的实现:

1、 对于less而言,肯定是写一个方法

.flex-block() {
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
}
.test{
    .flex-block()
}

2、使用postcss

.test{
    display: flex;
}

只需要编译的时候使用autoprefixer处理就好。
可能一个属性的效果不是特别明显,要是有很多个属性需要处理呢?

.flex-block() {
    display: -ms-flexbox;
    display: -webkit-flex;
    display: flex;
}
.transform(){
    //仅仅是举例子
}
.ccc(){
}
.test{
    .flex-block()
    .transform()
    .ccc()
}

这时候postcss还是只需要如下:

.test{
    display: flex;
    transform:rotate(7deg);
}

这时候就能看出来postcss的便捷性了,我一直认为可以抽象公共化的东西完全没有必要去重复的去手动开发。

postcss工作原理

postcss本身是一个node模块,可以将css文件解析为抽象语法树(AST),将该树在多个插件方法传递,然后将AST转换为字符串返回,该字符串可以输出到目标文件中。传递过程中的插件可以选择是否改变该语法树,上诉改变可以通过sourcemap来记录。如下面的流程所示(借用w3cplus的一张图):
更便捷的css处理方式-postcss第1张

其实这里我们更应该关联起来的是babel,看一下功能:

  • 将未来规范的转化为当前规范的转义器
  • 实现相同,都是将源文件解析为AST然后经由插件处理。
  • 丰富的插件,满足不同的需求
  • 支持自定义插件的开发

当前工作流中引入postcss

大家可能会有这种想法,又是一种新的工具,我当前的开发框架中岂不是要大动。其实这种担心是没必要的。postcss是很容易引入当前的工作流中的。无论是webpack还是gulp,都有比较方便的方式。官方有详细的介绍文档

结束语

原先很早就看到postCss,当时太年轻认为是less的一种替代品罢了,所以一直没有去关注。了解之后感觉真的不错,至于如何使用这里就不去演示了,有兴趣的可以查看下我的简单示例希望更多的人使用。

参考文章

http://davidtheclark.com/its-time-for-everyone-to-learn-about-postcss/
http://julian.io/some-things-you-may-think-about-postcss-and-you-might-be-wrong/

免责声明:文章转载自《更便捷的css处理方式-postcss》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇微服务中的网关HttpClient+ ResourceBundle接口配置优化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue中引入第三方字体图标库iconfont,及iconfont引入彩色图标

转载原文:https://www.cnblogs.com/goloving/p/8855794.html iconfont字体图标使用就不多说了,大致是几部: 1、在iconfont官网选图标,加入购物车,加入项目,下载到本地,解压 2、在项目assets目录新建目录iconfont,用于存放刚才下载解压的代码 3、在main.js导入iconfont.c...

css如何画出类似原生的线条?

做前端的程序猿特别是移动端的,都很头疼遇到一种情况就是需要div底部加一个线条但是 1px的效果很粗,跟设计案上的不符合。 我的一个伙伴查找出来的一个解决方法: 在需要加上的线条的地方加上一个div class是一下对应的类,(使用的时候自己试试就知道了) css代码: .list-up-down-line:before { content: " "; p...

css定义div圆角阴影边框

2013-11-01 设置div的圆角边框  首先给大家上个图片展示吧     1、首先下载Pie文件,在http://css3pie.com/下载Pie.js文件,最好是里面的文件不要删减,我是直接用的  2、然后上hmtl代码吧      <div>  111111111111111</div>   css样式:     &l...

第十一节:Bundles压缩合并js和css及原理分析

一. 简介  1.背景:浏览器默认一次性请求的网络数是有上限的,如果你得js和css文件太多,就会导致浏览器需要多次加载,影响页面的加载速度, MVC中提供Bundles的方式压缩合并js和css,是MVC中特有的一种优化方式。  (当然现在前端也有很多基于node的工作流插件,可以合并压缩混淆js或css) 2. 原理(了解即可):核心方法ApplyTr...

CSS拾遗

1:CSS样式的声明 选择符{ 属性:值; 属性:值; 。。。 } 其中,选择符有: 标签选择器:标签名{样式} 类选择器: .类名{样式} ID选择器: #ID名{样式} 另外:样式属性的书写格式为:小写单词,用 - 分割。 比如:font-size 、 font-family 2:注释 /*注释*/ 3:CSS可以出现...

更改file文件上传默认CSS样式

前言: 多数时候我们需要表单上传文件,如图片。但是浏览器默认的input[file]样式很不友好, 需要我们自己手动修改. 如图基于bootstrap布局的表单, 但file文件上传样式不敢恭维. 1 <div class="form-group"> 2 <label for="avatar" class="col-md...