# postcss

  1. 官方文档 (opens new window)

  2. github地址 (opens new window)

  3. PostCSS 入门教程 (opens new window)

  4. Postcss了解一下 (opens new window)

PostCSS 是一个用 JavaScript 工具和插件转换 CSS 代码的工具,常见的功能如:

  • 使用下一代css语法
  • 自动补全浏览器前缀
  • 自动把px代为转换成rem
  • css 代码压缩等等

PostCSS 可以称为一个平台,提供了一个解析器,能够将 CSS 解析成 AST,还需要配合插件使用。

大多数构建工具内置了 PostCSS,例如 vite,可以直接配置

# 与预处理器的区别

  • Less / Sass / Stylus,这类工具都属于 CSS 预处理工具。预处理指的是通过特殊的规则,将非 css 文本格式最终生成 css 文件。
  • postcss 则是对 CSS 进行处理,最终生成的还是 CSS。
  • 从其名字 postcss 可以看出早期是被当做后处理器的。也就是处理less/sass 编译后的 css。最常用的插件就是 autoprefixer,根据浏览器版本添加兼容前缀。(post:在...之后的,例如后序遍历 postorder)

# 接入 webpack

目前一般还是 postcss 和 less/sass 结合使用,在 webpack 配置中,postcss-loader 要写在 sass-loader/less-loader 前面。

module.exports = {
    module: {
        rules: [
            {
                test: /\.(css|less)$/i,
                use: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader'],
            },
        ]
    }
}

# 常用插件

  • Autoprefixer:前缀补全
  • postcss-pxtorem:把 px 转换成 rem
:fullscreen {
}

/* 处理后 */
:-webkit-full-screen {
}
:-ms-fullscreen {
}
:fullscreen {
}

# API 使用 (opens new window)

Postcss 除了插件的使用方式还提供了 api:

let postcss = require('postcss');
let autoprefixer = require('autoprefixer');

let css = `:fullscreen {}`

postcss([autoprefixer]).process(css).then(result => {
  console.log(result.css)
})

// 输出
// :-webkit-full-screen {}
// :-ms-fullscreen {}
// :fullscreen {}

# Result.root (opens new window)

除了 Result.css 还有 Result.root 等属性

result

# LazyResult (opens new window)

Post CSS 转换结果的 Promise 代理

const lazy = postcss([autoprefixer]).process(css)

通过同步插件处理输入 CSS 并返回 Result.root,也就是说两个 API 返回结果相同。

注意:此属性仅适用于同步插件。 如果处理器包含任何异步插件,它将引发错误。

let postcss = require('postcss');
const autoprefixer = require('autoprefixer');

let css = `:fullscreen {}`

const lazy = postcss([autoprefixer]).process(css)
console.log(lazy.root)
最后更新时间: 4/6/2023, 7:10:18 PM