更便捷的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的一张图):

其实这里我们更应该关联起来的是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的更多相关文章

  1. css处理工具PostCss

    在 Web 应用开发中,CSS 代码的编写是重要的一部分.CSS 规范从最初的 CSS1 到现在的 CSS3,再到 CSS 规范的下一步版本,规范本身一直在不断的发展演化之中.这给开发人员带来了效率上 ...

  2. CSS引入方式的区别详解

    在web前端开发中,CSS是一种用来表现HTML或XML等文件样式的语言.很多处于web前端初学阶段的朋友,很多人都不知道CSS引入方式存在三种方法,css引入方式分别为标签内联书写.页面头部书写.外 ...

  3. 23----2013.07.01---Div和Span区别,Css常用属性,选择器,使用css的方式,脱离文档流,div+css布局,盒子模型,框架,js基本介绍

    01 复习内容 复习之前的知识点 02演示VS创建元素 03div和span区别 通过display属性进行DIV与Span之间的转换.div->span 设置display:inline   ...

  4. Android源码浅析(三)——Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机

    Android源码浅析(三)--Android AOSP 5.1.1源码的同步sync和编译make,搭建Samba服务器进行更便捷的烧录刷机 最近比较忙,而且又要维护自己的博客,视频和公众号,也就没 ...

  5. 前端开发周报: CSS 布局方式方式与JavaScript数据结构和算法

    前端开发周报:CSS 布局方式与JavaScript动画库 1.常见 CSS 布局方式详见: 一些常见的 CSS 布局方式梳理,涉及 Flex 布局.Grid 布局.圣杯布局.双飞翼布局等.http: ...

  6. 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结

    史上最全的CSS hack方式一览 2013年09月28日 15:57:08 阅读数:175473 做前端多年,虽然不是经常需要hack,但是我们经常会遇到各浏览器表现不一致的情况.基于此,某些情况我 ...

  7. 项目复习期总结3:CSS引入方式,凝视,命名规范,背景,行高,文本属性

    文件夹: 1.CSS凝视的书写 怎么写?优点? 2.CSS引入方式  各种的优缺点 3.选择器的写法与选择器的优先级 4.CSS命名规范 5.背景,行高 6.文本(text与font开头)等全部属性 ...

  8. 更便捷的Mybatis增强插件——EasyMybatis

    easy-mybatis是一个对Mybatis的增强框架(插件).在Spring集成Mybatis的基础上,将项目开发中对数据库的常用操作统一化.使用本框架可以很便捷的对数据库进行操作,提高开发效率, ...

  9. HarmonyOS新能力让数据多端协同更便捷,数据跨端迁移更高效!

    作者:yijian,终端OS分布式文件系统专家:gongashi,终端OS分布式数据管理专家 HarmonyOS作为分布式操作系统,其分布式数据管理能力非常重要.我们也一直围绕持续为开发者带来全局&q ...

随机推荐

  1. 【Spring】渲染Web视图

    前言 前面学习了编写Web请求的控制器,创建简单的视图,本篇博文讲解控制器完成请求到结果渲染到用户的浏览器的过程. 渲染Web视图 理解视图解析 前面所编写的控制器方法都没有直接产生浏览器中渲染所需要 ...

  2. sed基本常用命令

    sed的基本操作 sed 's/a/b/g' 文件a 把文件a中的a修改成b 注意这只是临时的 注:s就是所有的意思,g是缓存区的意思 sed -i 's/a/b/g' 文件a 把文件a中的a修改成b ...

  3. 一键生成koa/koa2项目:

    一键生成koa/koa2项目: 1. npm install -g koa-generator 2.新建项目目录 koa mytest (koa1项目) koa2 koa2test (koa2项目) ...

  4. yum常用选项和参数

    列举包文件 # yum list #列出资源库中所有可以安装或更新的rpm包 # yum list updates #列出资源库中所有可以更新的rpm包 # yum list installed #列 ...

  5. docker下编译mangoszero WOW60级服务端(二)

    开始搭建基于docker的mangoszero WOW服务端,我自己的操作系统是mac os,其他平台操作可以等价替换 1.准备工作 (1) 安装docker,参考docker官方文档,https:/ ...

  6. fs-max、file-nr和nofile的关系

    1. file-max /proc/sys/fs/file-max: 这个文件决定了系统级别所有进程可以打开的文件描述符的数量限制,如果内核中遇到VFS: file-max limit <num ...

  7. 在foreach的判断条件里执行方法会有效率问题吗?

    楼猪平时一有空就有看别人代码的习惯,从许多优秀规范的代码中学习到了很多简约高效的写法和画龙点睛的思想精华.但是有的时候也会觉得某些写法很值得玩味.比如刚看到一段代码,在foreach的条件判断里加了一 ...

  8. C#中的Unsafe和Fixed

    托管代码 (managed code):由公共语言运行库环境(而不是直接由操作系统)执行的代码.托管代码应用程序可以获得公共语言运行库服务,例如自动垃圾回收.运行库类型检查和安全支持等.这些服务帮助提 ...

  9. [转载] Tomcat架构分析

    转载自http://gearever.iteye.com/category/223001

  10. VPN连接机器不再输入密码以及Pin码方法

    连接机器不输入密码 #!/usr/bin/env expect   spawn ssh guosong@xx_ip; expect "*password*"; send  &quo ...