PostCSS
PostCSS 是一个用 JavaScript 工具和插件转换 CSS 代码的工具,可以理解为 CSS 的 Babel。
📋 学习目标
- ✅ 理解 PostCSS 的核心概念
- ✅ 掌握 PostCSS 的配置方法
- ✅ 能够使用常用插件
- ✅ 理解与构建工具的集成
- ✅ 掌握 CSS 优化技巧
什么是 PostCSS
PostCSS 是一个 CSS 后处理器,主要特点:
- 插件系统:丰富的插件生态
- CSS 转换:自动添加前缀、转换新特性
- 模块化:按需使用插件
- 高性能:基于插件的高性能处理
核心概念
工作流程
CSS 代码 → PostCSS 解析 → 插件处理 → 输出 CSS
与预处理器区别
- 预处理器:Sass、Less(扩展 CSS 语法)
- 后处理器:PostCSS(处理已生成的 CSS)
快速开始
安装
npm install -D postcss postcss-cli基础配置
postcss.config.js
module.exports = {
plugins: [
require('autoprefixer'),
],
}使用
npx postcss src/style.css -o dist/style.css常用插件
autoprefixer
自动添加浏览器前缀:
module.exports = {
plugins: [
require('autoprefixer')({
browsers: ['> 1%', 'last 2 versions'],
}),
],
}postcss-preset-env
使用未来的 CSS 特性:
module.exports = {
plugins: [
require('postcss-preset-env')({
stage: 2,
}),
],
}cssnano
CSS 压缩:
module.exports = {
plugins: [
require('cssnano')({
preset: 'default',
}),
],
}postcss-import
支持 @import:
module.exports = {
plugins: [
require('postcss-import'),
],
}postcss-nested
支持嵌套:
module.exports = {
plugins: [
require('postcss-nested'),
],
}完整配置示例
module.exports = {
plugins: [
require('postcss-import'),
require('postcss-nested'),
require('postcss-preset-env')({
stage: 2,
}),
require('autoprefixer'),
require('cssnano')({
preset: 'default',
}),
],
}与构建工具集成
Webpack
使用 postcss-loader:
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: [
'style-loader',
'css-loader',
{
loader: 'postcss-loader',
options: {
postcssOptions: {
plugins: [
require('autoprefixer'),
],
},
},
},
],
},
],
},
}Vite
Vite 内置 PostCSS 支持:
// vite.config.js
export default {
css: {
postcss: {
plugins: [
require('autoprefixer'),
],
},
},
}Rollup
使用 rollup-plugin-postcss:
import postcss from 'rollup-plugin-postcss'
export default {
plugins: [
postcss({
plugins: [
require('autoprefixer'),
],
}),
],
}CSS 优化
自动添加前缀
require('autoprefixer')({
overrideBrowserslist: ['> 1%', 'last 2 versions'],
})CSS 压缩
require('cssnano')({
preset: 'default',
})移除未使用的 CSS
使用 purgecss:
require('@fullhuman/postcss-purgecss')({
content: ['./src/**/*.html', './src/**/*.js'],
})现代 CSS 特性
使用 postcss-preset-env
require('postcss-preset-env')({
stage: 2, // 0-4,数字越小越实验性
features: {
'nesting-rules': true,
},
})支持的特性:
- 嵌套规则
- 自定义属性
- 颜色函数
- 逻辑属性
最佳实践
- 使用 autoprefixer:自动添加浏览器前缀
- 启用压缩:生产环境使用 cssnano
- 使用 preset-env:使用现代 CSS 特性
- 移除未使用 CSS:使用 purgecss
- 配置浏览器列表:使用 browserslist
相关链接
最后更新:2025