PostCSS 是一款使用 JS 插件转换样式的工具。这些插件可以对 CSS 进行 lint 处理,支持变量和混合宏,转换未来的 CSS 语法、内联图片等等。
PostCSS 已被 Wikipedia、Twitter、阿里巴巴和 JetBrains 等行业领导者广泛使用。Autoprefixer 和 Stylelint PostCSS 插件是最受欢迎的 CSS 工具之一。
PostCSS 获取 CSS 文件并提供 API 来分析和修改其规则(通过将其转换为抽象语法树)。然后,插件可以使用此 API 执行许多有用的操作,例如,自动查找错误或插入供应商前缀。
目前,PostCSS 拥有超过 200 个插件。您可以在插件列表中找到所有插件。以下是我们最喜欢的插件列表——它们完美地展示了如何在 PostCSS 上构建插件。
如果您有任何新想法,PostCSS 插件开发非常简单。
插件列表:https://github.com/postcss/postcss/blob/main/docs/plugins.md
postcss-use
允许您在 CSS 中显式设置 PostCSS 插件,postcss-modules
和 react-css-modules
自动隔离组件中的postcss-autoreset
是使用全局重置的替代方案,postcss-initial
添加了 all: initial
支持,可重置cq-prolyfill
添加了容器查询支持,允许样式响应autoprefixer
使用来自 Can I Use 的数据添加供应商前缀。postcss-preset-env
允许您立即使用未来的 CSS 功能。postcss-nested
像 Sass 一样解包嵌套规则。postcss-sorting
对规则和 @ 规则的内容进行排序。postcss-utilities
包含最常用的快捷键和辅助函数。short
添加并扩展了许多简写属性。postcss-url
postcss 插件,用于 rebase url()、内联或复制资源。postcss-sprites
生成图片精灵。font-magician
生成 CSS 中所需的所有 @font-face
规则。postcss-inline-svg
允许您内联 SVG 并自定义其样式。postcss-write-svg
允许您直接在 CSS 中编写简单的 SVG。webp-in-css
允许在 CSS 后台使用 WebP 图片格式。avif-in-css
允许在 CSS 后台使用 AVIF 图片格式。stylelint
是一个模块化样式表代码检查器。stylefmt
是一个根据 stylelint
规则自动格式化 CSS 的工具。doiuse
使用来自 Can I Use 的数据,检查 CSS 是否支持浏览器。colorguard
帮助您保持一致的调色板。PostCSS 可以转换任何语法的样式,而不仅仅是 CSS。如果您喜欢的语法尚未支持,您可以编写解析器和/或字符串生成器来扩展 PostCSS。
sugarss
是一种基于缩进的语法,类似于 Sass 或 Stylus。postcss-syntax
根据文件扩展名自动切换语法。postcss-html
解析类 HTML 文件中 <style>
标签中的样式。postcss-markdown
解析 Markdown 文件代码块中的样式。postcss-styled-syntax
解析 CSS-in-JS 模板字面量中的样式,postcss-jsx
解析源文件模板/对象字面量中的 CSS。postcss-styled
解析源文件模板字面量中的 CSS。postcss-scss
允许您使用 SCSSpostcss-sass
允许您使用 Sasspostcss-less
允许您使用 Lesspostcss-less-engine
允许您使用 Lesspostcss-js
允许您使用 JS 编写样式或转换postcss-safe-parser
查找并修复 CSS 语法错误。midas
将 CSS 字符串转换为高亮显示的 HTML。更多文章和视频,请访问 awesome-postcss 列表。
只需两步即可开始使用 PostCSS:
[选择插件]:https://postcss.org/docs/postcss-plugins
将 PostCSS 与 CSS-in-JS 结合使用的最佳方法是 [astroturf
]。将其加载器添加到您的 webpack.config.js
中:
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'postcss-loader'],
},
{
test: /\.jsx?$/,
use: ['babel-loader', 'astroturf/loader'],
}
]
}
}
Then create postcss.config.js
:
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: [
require('autoprefixer'),
require('postcss-nested')
]
}
module.exports = config
Parcel 内置了 PostCSS 支持。它已经使用了 Autoprefixer和 cssnano。如果您想更改插件,请在项目根目录中创建 postcss.config.js
:
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: [
require('autoprefixer'),
require('postcss-nested')
]
}
module.exports = config
Parcel 甚至会自动为您安装这些插件。
Use postcss-loader
in webpack.config.js
:
module.exports = {
module: {
rules: [
{
test: /\.css$/,
exclude: /node_modules/,
use: [
{
loader: 'style-loader',
},
{
loader: 'css-loader',
options: {
importLoaders: 1,
}
},
{
loader: 'postcss-loader'
}
]
}
]
}
}
Then create postcss.config.js
:
/** @type {import('postcss-load-config').Config} */
const config = {
plugins: [
require('autoprefixer'),
require('postcss-nested')
]
}
module.exports = config
Use gulp-postcss
and gulp-sourcemaps
.
gulp.task('css', () => {
const postcss = require('gulp-postcss')
const sourcemaps = require('gulp-sourcemaps')
return gulp.src('src/**/*.css')
.pipe( sourcemaps.init() )
.pipe( postcss([ require('autoprefixer'), require('postcss-nested') ]) )
.pipe( sourcemaps.write('.') )
.pipe( gulp.dest('build/') )
})
要从命令行界面或 npm Scripts 使用 PostCSS,
可以使用 postcss-cli
。
postcss --use autoprefixer -o main.css css/*.css
如果您想在浏览器中编译 CSS 字符串(例如,在 CodePen 等实时编辑工具中),只需使用 Browserify 或 webpack。它们会将 PostCSS 和插件文件打包成一个文件。
要将 PostCSS 插件应用于 React 内联样式、JSS、Radium以及其他 CSS-in-JS,您可以使用 postcss-js
并转换样式对象。
const postcss = require('postcss-js')
const prefixer = postcss.sync([ require('autoprefixer') ])
prefixer({ display: 'flex' }) //=> { display: ['-webkit-box', '-webkit-flex', '-ms-flexbox', 'flex'] }
@lodder/grunt-postcss
posthtml-postcss
poststylus
rollup-plugin-postcss
postcss-brunch
broccoli-postcss
postcss
enb-postcss
taskr-postcss
start-postcss
postcss-middleware
svelte-preprocess
对于其他环境,您可以使用 JS API:
const autoprefixer = require('autoprefixer')
const postcss = require('postcss')
const postcssNested = require('postcss-nested')
const fs = require('fs')
fs.readFile('src/app.css', (err, css) => {
postcss([autoprefixer, postcssNested])
.process(css, { from: 'src/app.css', to: 'dest/app.css' })
.then(result => {
fs.writeFile('dest/app.css', result.css, () => true)
if ( result.map ) {
fs.writeFile('dest/app.css.map', result.map.toString(), () => true)
}
})
})
有关 JS API 的更多详细信息,请参阅 PostCSS API 文档。
所有 PostCSS 运行器都应遵循 PostCSS 运行器指南。
大多数 PostCSS 运行器接受两个参数:
常用选项:
syntax
:提供语法解析器和字符串生成器的对象。parser
:特殊的语法解析器(例如,SCSS)。stringifier
:特殊的语法输出生成器(例如,Midas)。map
:源映射选项。from
:输入文件名(大多数运行器会自动设置)。to
:输出文件名(大多数运行器会自动设置)。在某些情况下,将 PostCSS 或其插件发出的任何警告视为构建失败可能会有所帮助。这可以确保不会遗漏任何警告,并有助于避免错误。虽然没有启用将警告视为错误的选项,但可以通过在 PostCSS plugins 的末尾添加 postcss-fail-on-warn
插件轻松实现:
module.exports = {
plugins: [
require('autoprefixer'),
require('postcss-fail-on-warn')
]
}
csstools.postcss
添加了 PostCSS 支持。smallcase.postcssense
为全局类添加智能感知Syntax-highlighting-for-PostCSS
添加 PostCSS 高亮。postcss.vim
添加 PostCSS 高亮。要在 WebStorm 和其他 JetBrains IDE 中获得 PostCSS 支持,您需要安装此插件。
如需报告安全漏洞,请使用 Tidelift 安全联系人。
Tidelift 将协调修复和披露工作。
作为 Tidelift 订阅的一部分提供。postcss
和其他数千个软件包的维护者正在与 Tidelift 合作,为您构建应用程序所需的开源依赖项提供商业支持和维护。节省时间、降低风险、并改善代码健康状况,同时支付您所使用的依赖项的维护者费用。了解更多。