HTML+CSS入门 更便捷的CSS处理方式-postcss
沉沙 2018-10-31 来源 : 阅读 1176 评论 0

摘要:本篇教程介绍了HTML+CSS入门 更便捷的CSS处理方式-postcss,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门。

本篇教程介绍了HTML+CSS入门 更便捷的CSS处理方式-postcss,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门。

<

一般来说介绍一个东西都是要从是什么,怎么用的顺序来讲。我感觉这样很容易让大家失去兴趣,先看一下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是有两个含义的:

postcss本身,也就是我们npm install时的安装部分

基于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的一张图):

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

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

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

本文由职坐标整理发布,欢迎关注职坐标WEB前端HTML/CSS频道,获取更多HTML/CSS知识!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程