PostCSS揭秘-包括css的预处理和后处理

623 阅读2分钟

原理

用JS来处理CSS 每个 PostCSS 插件都是一个 NodeJS 的模块

现在有200多个插件,但还不够用

主要功能

  • 把 CSS 解析成 JavaScript 可以操作的 AST;
  • 调用插件 处理 AST,得到结果

可以支持变量和混入(mixin),增加浏览器相关的声明前缀,

或是把使用将来的 CSS 规范的样式规则转译(transpile)成当前的 CSS 规范支持的格式

常用的PostCSS插件

1. postcss-reporter

在控制台中,记录PostCSS消息 postcss报告器 一个PostCSS插件,用于对它的他PostCSS插件注册的消息( 警告,等等 ) 进行 console.log() 处理。命令行目就 PostCSS 4.1而言,单个PostCSS进程可以从它所使用的

2. Autoprefixer

#content {
 display: flex;
}

变为:

#content {
 display: -webkit-box;
 display: -webkit-flex;
 display: -ms-flexbox;
 display: flex;
}

3. cssnext

允许开发者在当前项目中使用将来CSS版本的新特性(就像将ES6/7/8 转为 ES5)

  • 自定义属性和变量
  • 可以写变量
  • 样式规则嵌套
.message {
 font-weight: normal;
 & .header {
   font-weight: bold;
 }
  @nest .body & {
   color: black;
 }
}

// 用cssnext转换为:

.message {
 font-weight: normal
}
 
.message .header {
 font-weight: bold;
}
 
.body .message {
 color: black;
}
// 模块化CSS modules

:global .title {
 font-size: 20px;
}
 
.content {
 font-weight: bold;
}
// 变为:

.title {
 font-size: 20px;
}
 
._content_6xmce_5 {
 font-weight: bold;
}

不能简单的把 PostCSS 归类成 CSS 预处理或后处理工具。PostCSS 所能执行的任务非常多,同时涵盖了传统意义上的预处理和后处理。

CSS在项目中目前是什么样子

目前大家都是 SASS + PostCSS 这样的开发模式,其实我认为是不错的,取长补短嘛,当然,在 PostCSS 平台上都是可以做到的,只是目前这个过渡期,这样更好,更工程化。 还有一些方法来纯粹是用 PostCSS。

参考