PostCSS 常用插件 #

PostCSS 拥有丰富的插件生态,本文介绍最常用和实用的插件。

兼容性处理插件 #

Autoprefixer #

自动添加浏览器前缀,是最流行的 PostCSS 插件。

安装 #

bash
npm install autoprefixer --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('autoprefixer')({
      overrideBrowserslist: [
        '> 1%',
        'last 2 versions',
        'not dead'
      ]
    })
  ]
}

使用示例 #

css
/* 输入 */
.container {
  display: flex;
  user-select: none;
  backdrop-filter: blur(10px);
}

/* 输出 */
.container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  -webkit-backdrop-filter: blur(10px);
  backdrop-filter: blur(10px);
}

常用选项 #

选项 说明 默认值
overrideBrowserslist 浏览器列表 从 browserslist 配置读取
grid 是否添加 grid 前缀 false
flexbox 是否添加 flexbox 前缀 true
remove 是否移除过时的前缀 true

postcss-preset-env #

使用未来的 CSS 特性,自动转换为兼容代码。

安装 #

bash
npm install postcss-preset-env --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-preset-env')({
      stage: 2,
      features: {
        'nesting-rules': true,
        'custom-media-queries': true
      }
    })
  ]
}

Stage 说明 #

Stage 说明 示例特性
0 非官方草案 自定义选择器
1 编辑草案 嵌套规则
2 工作草案 自定义媒体查询
3 候选推荐 all 属性
4 推荐标准 CSS 变量

使用示例 #

css
/* 输入 */
:root {
  --primary: #007bff;
}

.button {
  color: var(--primary);
  
  &:hover {
    color: color(var(--primary) blackness(+20%));
  }
}

@custom-media --mobile (max-width: 480px);

@media (--mobile) {
  .container {
    width: 100%;
  }
}

/* 输出 */
:root {
  --primary: #007bff;
}

.button {
  color: var(--primary);
}

.button:hover {
  color: rgb(0, 94.8, 191);
}

@media (max-width: 480px) {
  .container {
    width: 100%;
  }
}

语法扩展插件 #

postcss-nested #

支持 CSS 嵌套语法。

安装 #

bash
npm install postcss-nested --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-nested')
  ]
}

使用示例 #

css
/* 输入 */
.nav {
  ul {
    list-style: none;
  }
  
  li {
    display: inline-block;
    
    a {
      text-decoration: none;
      
      &:hover {
        color: blue;
      }
    }
  }
}

/* 输出 */
.nav ul {
  list-style: none;
}

.nav li {
  display: inline-block;
}

.nav li a {
  text-decoration: none;
}

.nav li a:hover {
  color: blue;
}

postcss-simple-vars #

支持 Sass 风格的变量。

安装 #

bash
npm install postcss-simple-vars --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-simple-vars')({
      variables: {
        primary: '#007bff',
        secondary: '#6c757d',
        basePadding: '20px'
      },
      unknown: (node, name, result) => {
        node.warn(result, `Unknown variable $${name}`)
      }
    })
  ]
}

使用示例 #

css
/* 输入 */
$primary: #007bff;
$basePadding: 20px;

.button {
  color: $primary;
  padding: $basePadding;
}

/* 输出 */
.button {
  color: #007bff;
  padding: 20px;
}

postcss-mixins #

支持 Mixin 功能。

安装 #

bash
npm install postcss-mixins --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-mixins')({
      mixins: {
        clearfix: {
          '&::after': {
            content: '""',
            display: 'table',
            clear: 'both'
          }
        },
        borderRadius: (radius = '4px') => ({
          'border-radius': radius
        })
      }
    })
  ]
}

使用示例 #

css
/* 输入 */
@define-mixin button $color, $padding: 10px {
  background: $color;
  padding: $padding;
  border: none;
  cursor: pointer;
}

.primary {
  @mixin button blue;
}

.secondary {
  @mixin button gray, 15px;
}

.container {
  @mixin clearfix;
}

/* 输出 */
.primary {
  background: blue;
  padding: 10px;
  border: none;
  cursor: pointer;
}

.secondary {
  background: gray;
  padding: 15px;
  border: none;
  cursor: pointer;
}

.container::after {
  content: "";
  display: table;
  clear: both;
}

postcss-import #

处理 CSS 导入。

安装 #

bash
npm install postcss-import --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-import')({
      path: ['src/styles'],
      plugins: [],
      filter: path => !path.includes('node_modules')
    })
  ]
}

使用示例 #

css
/* variables.css */
:root {
  --primary: #007bff;
}

/* mixins.css */
.clearfix::after {
  content: "";
  display: table;
  clear: both;
}

/* style.css */
@import 'variables.css';
@import 'mixins.css';

.button {
  color: var(--primary);
}

/* 输出 */
:root {
  --primary: #007bff;
}

.clearfix::after {
  content: "";
  display: table;
  clear: both;
}

.button {
  color: var(--primary);
}

优化压缩插件 #

cssnano #

CSS 压缩和优化工具。

安装 #

bash
npm install cssnano --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('cssnano')({
      preset: ['default', {
        discardComments: { removeAll: true },
        normalizeWhitespace: true,
        colormin: true,
        reduceIdents: false,
        zindex: false
      }]
    })
  ]
}

预设选项 #

javascript
// default 预设包含的优化
{
  calc: true,              // 计算 calc()
  colormin: true,          // 压缩颜色
  convertValues: true,     // 优化值
  discardComments: true,   // 删除注释
  discardDuplicates: true, // 删除重复规则
  discardEmpty: true,      // 删除空规则
  discardOverridden: true, // 删除覆盖规则
  mergeLonghand: true,     // 合并长属性
  mergeRules: true,        // 合并规则
  minifyFontValues: true,  // 压缩字体值
  minifyGradients: true,   // 压缩渐变
  minifyParams: true,      // 压缩 @ 规则参数
  normalizeCharset: true,  // 标准化 charset
  normalizeUrl: true,      // 标准化 URL
  reduceIdents: true,      // 压缩标识符
  reduceInitial: true,     // 压缩 initial
  reduceTransforms: true,  // 压缩 transform
  svgo: true,              // 优化 SVG
  uniqueSelectors: true    // 去重选择器
}

使用示例 #

css
/* 输入 */
.container {
  margin: 10px 10px 10px 10px;
  padding: 0px;
}

.button {
  color: #ff0000;
  background: #ffffff;
}

/* 输出 */
.container{margin:10px;padding:0}.button{color:red;background:#fff}

postcss-discard-comments #

删除 CSS 注释。

安装 #

bash
npm install postcss-discard-comments --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-discard-comments')({
      removeAll: true
    })
  ]
}

使用示例 #

css
/* 输入 */
/* This is a comment */
.button {
  color: red; /* inline comment */
}

/* 输出 */
.button {
  color: red;
}

功能增强插件 #

postcss-pxtorem #

将 px 单位转换为 rem。

安装 #

bash
npm install postcss-pxtorem --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-pxtorem')({
      rootValue: 16,           // 根元素字体大小
      unitPrecision: 5,        // 小数位数
      propList: ['*', '!border*'],  // 转换的属性
      selectorBlackList: [],   // 忽略的选择器
      replace: true,           // 替换而不是添加
      mediaQuery: false,       // 是否转换媒体查询
      minPixelValue: 2         // 最小转换值
    })
  ]
}

使用示例 #

css
/* 输入 */
.container {
  font-size: 32px;
  padding: 16px;
  border: 1px solid #ccc;
}

/* 输出 */
.container {
  font-size: 2rem;
  padding: 1rem;
  border: 1px solid #ccc;
}

postcss-px-to-viewport #

将 px 转换为 vw 单位,用于移动端适配。

安装 #

bash
npm install postcss-px-to-viewport --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-px-to-viewport')({
      viewportWidth: 375,      // 设计稿宽度
      viewportHeight: 667,     // 设计稿高度
      unitPrecision: 5,        // 小数位数
      viewportUnit: 'vw',      // 转换单位
      selectorBlackList: [],   // 忽略的选择器
      minPixelValue: 1,        // 最小转换值
      mediaQuery: false,       // 是否转换媒体查询
      exclude: [/node_modules/] // 排除文件
    })
  ]
}

使用示例 #

css
/* 输入(设计稿 375px) */
.container {
  width: 375px;
  height: 200px;
  font-size: 16px;
}

/* 输出 */
.container {
  width: 100vw;
  height: 53.33333vw;
  font-size: 4.26667vw;
}

postcss-sprites #

自动生成 CSS 雪碧图。

安装 #

bash
npm install postcss-sprites --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-sprites')({
      spritePath: './dist/sprites',
      retina: true,
      hooks: {
        onUpdateRule: (rule, token, image) => {
          // 自定义输出规则
        }
      }
    })
  ]
}

使用示例 #

css
/* 输入 */
.icon-home {
  background-image: url('./icons/home.png');
}

.icon-user {
  background-image: url('./icons/user.png');
}

/* 输出 */
.icon-home {
  background-image: url('./dist/sprites/sprite.png');
  background-position: 0 0;
  width: 32px;
  height: 32px;
}

.icon-user {
  background-image: url('./dist/sprites/sprite.png');
  background-position: -32px 0;
  width: 32px;
  height: 32px;
}

rtlcss #

生成 RTL(从右到左)样式。

安装 #

bash
npm install rtlcss --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('rtlcss')
  ]
}

使用示例 #

css
/* 输入 */
.container {
  margin-left: 10px;
  padding-right: 20px;
  text-align: left;
  float: left;
}

/* 输出 */
.container {
  margin-right: 10px;
  padding-left: 20px;
  text-align: right;
  float: right;
}

代码检查插件 #

stylelint #

CSS 代码检查工具。

安装 #

bash
npm install stylelint postcss-stylelint --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('stylelint')({
      configFile: '.stylelintrc.json',
      fix: true
    })
  ]
}
json
// .stylelintrc.json
{
  "extends": "stylelint-config-standard",
  "rules": {
    "color-hex-length": "short",
    "declaration-block-no-duplicate-properties": true,
    "no-descending-specificity": true,
    "property-no-unknown": true
  }
}

doiuse #

检查 CSS 浏览器兼容性。

安装 #

bash
npm install doiuse --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('doiuse')({
      browsers: ['> 1%', 'last 2 versions'],
      ignore: ['rem'],
      onFeatureUsage: (usageInfo) => {
        console.log(usageInfo.message)
      }
    })
  ]
}

其他实用插件 #

postcss-reporter #

美化 PostCSS 输出信息。

安装 #

bash
npm install postcss-reporter --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('autoprefixer'),
    require('postcss-reporter')({
      clearAllMessages: true,
      throwError: false
    })
  ]
}

postcss-browser-comments #

根据浏览器支持删除 CSS 注释。

安装 #

bash
npm install postcss-browser-comments --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-browser-comments')({
      browsers: ['> 1%', 'last 2 versions']
    })
  ]
}

使用示例 #

css
/* 输入 */
.button {
  display: flex;
}

/*! IE 11 only */
.button {
  display: -ms-flexbox;
}

/* 输出(不支持 IE 11) */
.button {
  display: flex;
}

postcss-normalize #

添加 CSS normalize 样式。

安装 #

bash
npm install postcss-normalize --save-dev

配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-normalize')
  ]
}

使用示例 #

css
/* 输入 */
@import "normalize.css";

.button {
  color: blue;
}

/* 输出(包含完整的 normalize.css 内容) */
/* normalize.css 内容... */

.button {
  color: blue;
}

插件组合示例 #

基础配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('autoprefixer')
  ]
}

开发环境配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-import'),
    require('postcss-nested'),
    require('postcss-simple-vars'),
    require('autoprefixer'),
    require('postcss-reporter')
  ]
}

生产环境配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-import'),
    require('postcss-nested'),
    require('postcss-simple-vars'),
    require('postcss-preset-env')({ stage: 2 }),
    require('autoprefixer'),
    require('cssnano')({ preset: 'default' })
  ]
}

移动端适配配置 #

javascript
// postcss.config.js
module.exports = {
  plugins: [
    require('postcss-import'),
    require('postcss-nested'),
    require('postcss-px-to-viewport')({
      viewportWidth: 375,
      unitPrecision: 5
    }),
    require('autoprefixer'),
    require('cssnano')
  ]
}

下一步 #

现在你已经了解了常用的 PostCSS 插件,接下来学习 Autoprefixer 详解 深入了解最流行的插件!

最后更新:2026-03-28