Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork1.6k
Transforming styles with JS plugins
License
postcss/postcss
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
PostCSS is a tool for transforming styles with JS plugins.These plugins can lint your CSS, support variables and mixins,transpile future CSS syntax, inline images, and more.
PostCSS is used by industry leaders including Wikipedia, Twitter, Alibaba,and JetBrains. The Autoprefixer andStylelint PostCSS plugins are some of the most popular CSS tools.
Built byEvil Martians, go-to agency fordeveloper tools.
PostCSS needs your support. We are accepting donationsat Open Collective.

PostCSS takes a CSS file and provides an API to analyze and modify its rules(by transforming them into an Abstract Syntax Tree).This API can then be used byplugins to do a lot of useful things,e.g., to find errors automatically, or to insert vendor prefixes.
Currently, PostCSS has more than 200 plugins. You can find all of the pluginsin theplugins list. Below is a list of our favorite plugins —the best demonstrations of what can be built on top of PostCSS.
If you have any new ideas,PostCSS plugin development is really easy.
postcss-useallows you to explicitly set PostCSS plugins within CSSand execute them only for the current file.postcss-modulesandreact-css-modulesautomatically isolateselectors within components.postcss-autoresetis an alternative to using a global resetthat is better for isolatable components.postcss-initialaddsall: initialsupport, which resetsall inherited styles.cq-prolyfilladds container query support, allowing styles that respondto the width of the parent.
autoprefixeradds vendor prefixes, using data from Can I Use.postcss-preset-envallows you to use future CSS features today.
postcss-nestedunwraps nested rules the way Sass does.postcss-sortingsorts the content of rules and at-rules.postcss-utilitiesincludes the most commonly used shortcuts and helpers.shortadds and extends numerous shorthand properties.
postcss-urlpostcss plugin to rebase url(), inline or copy asset.postcss-spritesgenerates image sprites.font-magiciangenerates all the@font-facerules needed in CSS.postcss-inline-svgallows you to inline SVG and customize its styles.postcss-write-svgallows you to write simple SVG directly in your CSS.webp-in-cssto use WebP image format in CSS background.avif-in-cssto use AVIF image format in CSS background.
stylelintis a modular stylesheet linter.stylefmtis a tool that automatically formats CSSaccordingstylelintrules.doiuselints CSS for browser support, using data from Can I Use.colorguardhelps you maintain a consistent color palette.
cssnanois a modular CSS minifier.lostis a feature-richcalc()grid system.rtlcssmirrors styles for right-to-left locales.
PostCSS can transform styles in any syntax, not just CSS.If there is not yet support for your favorite syntax,you can write a parser and/or stringifier to extend PostCSS.
sugarssis a indent-based syntax like Sass or Stylus.postcss-syntaxswitch syntax automatically by file extensions.postcss-htmlparsing styles in<style>tags of HTML-like files.postcss-markdownparsing styles in code blocks of Markdown files.postcss-styled-syntaxparses styles in template literals CSS-in-JSlike styled-components.postcss-jsxparsing CSS in template / object literals of source files.postcss-styledparsing CSS in template literals of source files.postcss-scssallows you to work with SCSS(but does not compile SCSS to CSS).postcss-sassallows you to work with Sass(but does not compile Sass to CSS).postcss-lessallows you to work with Less(but does not compile LESS to CSS).postcss-less-engineallows you to work with Less(and DOES compile LESS to CSS using true Less.js evaluation).postcss-jsallows you to write styles in JS or transformReact Inline Styles, Radium or JSS.postcss-safe-parserfinds and fixes CSS syntax errors.midasconverts a CSS string to highlighted HTML.
- Some things you may think about PostCSS… and you might be wrong
- What PostCSS Really Is; What It Really Does
- PostCSS Guides
More articles and videos you can find onawesome-postcss list.
- Mastering PostCSS for Web Design by Alex Libby, Packt. (June 2016)
You can start using PostCSS in just two steps:
- Find and add PostCSS extensions for your build tool.
- Select plugins and add them to your PostCSS process.
The best way to use PostCSS with CSS-in-JS isastroturf.Add its loader to yourwebpack.config.js:
module.exports={module:{rules:[{test:/\.css$/,use:['style-loader','postcss-loader'],},{test:/\.jsx?$/,use:['babel-loader','astroturf/loader'],}]}}
Then createpostcss.config.js:
/**@type {import('postcss-load-config').Config} */constconfig={plugins:[require('autoprefixer'),require('postcss-nested')]}module.exports=config
Parcel has built-in PostCSS support. It already uses Autoprefixerand cssnano. If you want to change plugins, createpostcss.config.jsin project’s root:
/**@type {import('postcss-load-config').Config} */constconfig={plugins:[require('autoprefixer'),require('postcss-nested')]}module.exports=config
Parcel will even automatically install these plugins for you.
Please, be aware ofthe several issues in Version 1. Notice,Version 2 may resolve the issues viaissue #2157.
Usepostcss-loader inwebpack.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 createpostcss.config.js:
/**@type {import('postcss-load-config').Config} */constconfig={plugins:[require('autoprefixer'),require('postcss-nested')]}module.exports=config
Usegulp-postcss andgulp-sourcemaps.
gulp.task('css',()=>{constpostcss=require('gulp-postcss')constsourcemaps=require('gulp-sourcemaps')returngulp.src('src/**/*.css').pipe(sourcemaps.init()).pipe(postcss([require('autoprefixer'),require('postcss-nested')])).pipe(sourcemaps.write('.')).pipe(gulp.dest('build/'))})
To use PostCSS from your command-line interface or with npm scriptsthere ispostcss-cli.
postcss --use autoprefixer -o main.css css/*.cssIf you want to compile CSS string in browser (for instance, in live edittools like CodePen), just useBrowserify orwebpack. They will packPostCSS and plugins files into a single file.
To apply PostCSS plugins to React Inline Styles, JSS, Radiumand otherCSS-in-JS, you can usepostcss-js and transforms style objects.
constpostcss=require('postcss-js')constprefixer=postcss.sync([require('autoprefixer')])prefixer({display:'flex'})//=> { display: ['-webkit-box', '-webkit-flex', '-ms-flexbox', 'flex'] }
- Grunt:
@lodder/grunt-postcss - HTML:
posthtml-postcss - Stylus:
poststylus - Rollup:
rollup-plugin-postcss - Brunch:
postcss-brunch - Broccoli:
broccoli-postcss - Meteor:
postcss - ENB:
enb-postcss - Taskr:
taskr-postcss - Start:
start-postcss - Connect/Express:
postcss-middleware - Svelte Preprocessor:
svelte-preprocess
For other environments, you can use the JS API:
constautoprefixer=require('autoprefixer')constpostcss=require('postcss')constpostcssNested=require('postcss-nested')constfs=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)}})})
Read thePostCSS API documentation for more details about the JS API.
All PostCSS runners should passPostCSS Runner Guidelines.
Most PostCSS runners accept two parameters:
- An array of plugins.
- An object of options.
Common options:
syntax: an object providing a syntax parser and a stringifier.parser: a special syntax parser (for example,SCSS).stringifier: a special syntax output generator (for example,Midas).map:source map options.from: the input file name (most runners set it automatically).to: the output file name (most runners set it automatically).
In some situations it might be helpful to fail the build on any warningfrom PostCSS or one of its plugins. This guarantees that no warningsgo unnoticed, and helps to avoid bugs. While there is no option to enabletreating warnings as errors, it can easily be doneby addingpostcss-fail-on-warn plugin in the end of PostCSS plugins:
module.exports={plugins:[require('autoprefixer'),require('postcss-fail-on-warn')]}
csstools.postcssadds PostCSS support.smallcase.postcssenseadds Intellisense for global classes
Syntax-highlighting-for-PostCSSadds PostCSS highlight.
postcss.vimadds PostCSS highlight.
To get support for PostCSS in WebStorm and other JetBrains IDEs you need to installthis plugin.
To report a security vulnerability, please use theTidelift security contact.Tidelift will coordinate the fix and disclosure.
Available as part of the Tidelift Subscription.
The maintainers ofpostcss and thousands of other packages are workingwith Tidelift to deliver commercial support and maintenance for the open sourcedependencies you use to build your applications. Save time, reduce risk,and improve code health, while paying the maintainers of the exact dependenciesyou use.Learn more.
About
Transforming styles with JS plugins
Topics
Resources
License
Contributing
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Sponsor this project
Uh oh!
There was an error while loading.Please reload this page.
