{"id":13396537,"url":"https://github.com/postcss/autoprefixer","last_synced_at":"2026-01-30T21:11:06.063Z","repository":{"id":7430854,"uuid":"8768406","full_name":"postcss/autoprefixer","owner":"postcss","description":" Parse CSS and add vendor prefixes to rules by Can I Use","archived":false,"fork":false,"pushed_at":"2025-12-14T17:23:24.000Z","size":8284,"stargazers_count":22639,"open_issues_count":41,"forks_count":1277,"subscribers_count":363,"default_branch":"main","last_synced_at":"2026-01-26T12:42:09.446Z","etag":null,"topics":["css","postcss-plugins","prefixer"],"latest_commit_sha":null,"homepage":"https://twitter.com/autoprefixer","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/postcss.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"open_collective":"postcss","tidelift":"npm/autoprefixer","github":"ai"}},"created_at":"2013-03-14T05:04:51.000Z","updated_at":"2026-01-26T07:34:59.000Z","dependencies_parsed_at":"2023-02-14T15:16:11.510Z","dependency_job_id":"e13a74fe-e99d-4f8c-b984-ff1e1bf4341a","html_url":"https://github.com/postcss/autoprefixer","commit_stats":{"total_commits":2487,"total_committers":206,"mean_commits":"12.072815533980583","dds":"0.15802171290711697","last_synced_commit":"dae6eb465da5640bb03ecda8b6d6b73e9ba26429"},"previous_names":["ai/autoprefixer"],"tags_count":202,"template":false,"template_full_name":null,"purl":"pkg:github/postcss/autoprefixer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/postcss%2Fautoprefixer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/postcss%2Fautoprefixer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/postcss%2Fautoprefixer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/postcss%2Fautoprefixer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/postcss","download_url":"https://codeload.github.com/postcss/autoprefixer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/postcss%2Fautoprefixer/sbom","scorecard":{"id":741723,"data":{"date":"2025-08-11","repo":{"name":"github.com/postcss/autoprefixer","commit":"541295c0e6dd348db2d3f52772b59cd403c59d29"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.3,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":1,"reason":"Found 4/30 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: topLevel 'contents' permission set to 'write': .github/workflows/release.yml:7","Info: topLevel 'contents' permission set to 'read': .github/workflows/test.yml:8","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/release.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/postcss/autoprefixer/release.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/release.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/postcss/autoprefixer/release.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/postcss/autoprefixer/test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/postcss/autoprefixer/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/postcss/autoprefixer/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/postcss/autoprefixer/test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/postcss/autoprefixer/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/postcss/autoprefixer/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/postcss/autoprefixer/test.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:68: update your workflow using https://app.stepsecurity.io/secureworkflow/postcss/autoprefixer/test.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/postcss/autoprefixer/test.yml/main?enable=pin","Info:   0 out of   7 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   4 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 4 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":8,"reason":"2 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-xffm-g5w8-qvg7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T17:37:38.569Z","repository_id":7430854,"created_at":"2025-08-22T17:37:38.569Z","updated_at":"2025-08-22T17:37:38.569Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28919470,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T20:25:28.696Z","status":"ssl_error","status_checked_at":"2026-01-30T20:25:13.426Z","response_time":66,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["css","postcss-plugins","prefixer"],"created_at":"2024-07-30T18:00:56.351Z","updated_at":"2026-01-30T21:11:06.056Z","avatar_url":"https://github.com/postcss.png","language":"JavaScript","readme":"# Autoprefixer [![Cult Of Martians][cult-img]][cult]\n\n\u003cimg align=\"right\" width=\"94\" height=\"71\"\n     src=\"https://postcss.github.io/autoprefixer/logo.svg\"\n     title=\"Autoprefixer logo by Anton Lovchikov\"\u003e\n\n[PostCSS] plugin to parse CSS and add vendor prefixes to CSS rules using values\nfrom [Can I Use]. It is recommended by Google and used in Twitter and Alibaba.\n\nWrite your CSS rules without vendor prefixes (in fact, forget about them\nentirely):\n\n```css\n::placeholder {\n  color: gray;\n}\n\n.image {\n  width: stretch;\n}\n```\n\nAutoprefixer will use the data based on current browser popularity and property\nsupport to apply prefixes for you. You can try the [interactive demo]\nof Autoprefixer.\n\n```css\n::-moz-placeholder {\n  color: gray;\n}\n::placeholder {\n  color: gray;\n}\n\n.image {\n  width: -webkit-fill-available;\n  width: -moz-available;\n  width: stretch;\n}\n```\n\nTwitter account for news and releases: [@autoprefixer].\n\n\u003ca href=\"https://evilmartians.com/?utm_source=autoprefixer\"\u003e\n\u003cimg src=\"https://evilmartians.com/badges/sponsored-by-evil-martians.svg\" alt=\"Sponsored by Evil Martians\" width=\"236\" height=\"54\"\u003e\n\u003c/a\u003e\n\n[interactive demo]: https://autoprefixer.github.io/\n[@autoprefixer]:    https://twitter.com/autoprefixer\n[Can I Use]:        https://caniuse.com/\n[cult-img]:         https://cultofmartians.com/assets/badges/badge.svg\n[PostCSS]:          https://github.com/postcss/postcss\n[cult]:             https://cultofmartians.com/tasks/autoprefixer-grid.html\n\n\n## Contents\n\n* [Contents](#contents)\n* [Browsers](#browsers)\n* [FAQ](#faq)\n  * [Does Autoprefixer polyfill Grid Layout for IE?](#does-autoprefixer-polyfill-grid-layout-for-ie)\n  * [Does it add polyfills?](#does-it-add-polyfills)\n  * [Why doesn’t Autoprefixer add prefixes to `border-radius`?](#why-doesnt-autoprefixer-add-prefixes-to-border-radius)\n  * [Why does Autoprefixer use unprefixed properties in `@-webkit-keyframes`?](#why-does-autoprefixer-use-unprefixed-properties-in--webkit-keyframes)\n  * [How to work with legacy `-webkit-` only code?](#how-to-work-with-legacy--webkit--only-code)\n  * [Does Autoprefixer add `-epub-` prefix?](#does-autoprefixer-add--epub--prefix)\n  * [Why doesn’t Autoprefixer transform generic font-family `system-ui`?](#why-doesnt-autoprefixer-transform-generic-font-family-system-ui)\n* [Usage](#usage)\n  * [Gulp](#gulp)\n  * [Webpack](#webpack)\n  * [CSS-in-JS](#css-in-js)\n  * [CLI](#cli)\n  * [Other Build Tools](#other-build-tools)\n    * [Preprocessors](#preprocessors)\n    * [GUI Tools](#gui-tools)\n  * [JavaScript](#javascript)\n  * [Text Editors and IDE](#text-editors-and-ide)\n* [Warnings](#warnings)\n* [Disabling](#disabling)\n  * [Prefixes](#prefixes)\n  * [Features](#features)\n  * [Control Comments](#control-comments)\n* [Options](#options)\n* [Environment Variables](#environment-variables)\n  * [Using environment variables to support CSS Grid prefixes in Create React App](#using-environment-variables-to-support-css-grid-prefixes-in-create-react-app)\n* [Grid Autoplacement support in IE](#grid-autoplacement-support-in-ie)\n  * [Beware of enabling autoplacement in old projects](#beware-of-enabling-autoplacement-in-old-projects)\n  * [Autoplacement limitations](#autoplacement-limitations)\n    * [Both columns and rows must be defined](#both-columns-and-rows-must-be-defined)\n    * [Repeat auto-fit and auto-fill are not supported](#repeat-auto-fit-and-auto-fill-are-not-supported)\n    * [No manual cell placement or column/row spans allowed inside an autoplacement grid](#no-manual-cell-placement-or-columnrow-spans-allowed-inside-an-autoplacement-grid)\n    * [Do not create `::before` and `::after` pseudo elements](#do-not-create-before-and-after-pseudo-elements)\n    * [When changing the `grid gap` value, columns and rows must be re-declared](#when-changing-the-grid-gap-value-columns-and-rows-must-be-re-declared)\n* [Debug](#debug)\n* [Security Contact](#security-contact)\n* [For Enterprise](#for-enterprise)\n\n## Browsers\n\nAutoprefixer uses [Browserslist], so you can specify the browsers\nyou want to target in your project with queries like `\u003e 5%`\n(see [Best Practices]).\n\nThe best way to provide browsers is a `.browserslistrc` file in your project\nroot, or by adding a `browserslist` key to your `package.json`.\n\nWe recommend the use of these options over passing options to Autoprefixer so\nthat the config can be shared with other tools such as [babel-preset-env] and\n[Stylelint].\n\nSee [Browserslist docs] for queries, browser names, config format, and defaults.\n\n[Browserslist docs]: https://github.com/browserslist/browserslist#queries\n[babel-preset-env]:  https://github.com/babel/babel/tree/master/packages/babel-preset-env\n[Best Practices]:    https://github.com/browserslist/browserslist#best-practices\n[Browserslist]:      https://github.com/browserslist/browserslist\n[Stylelint]:         https://stylelint.io/\n\n\n## FAQ\n\n### Does Autoprefixer polyfill Grid Layout for IE?\n\nAutoprefixer can be used to translate modern CSS Grid syntax into IE 10\nand IE 11 syntax, but this polyfill will not work in 100% of cases.\nThis is why it is disabled by default.\n\nFirst, you need to enable Grid prefixes by using either the `grid: \"autoplace\"`\noption or the `/* autoprefixer grid: autoplace */` control comment.\nAlso you can use environment variable to enable Grid:\n`AUTOPREFIXER_GRID=autoplace npm build`.\n\nSecond, you need to test every fix with Grid in IE. It is not an enable and\nforget feature, but it is still very useful.\nFinancial Times and Yandex use it in production.\n\nThird, there is only very limited auto placement support. Read the\n[Grid Autoplacement support in IE](#grid-autoplacement-support-in-ie) section\nfor more details.\n\nFourth, if you are not using the autoplacement feature, the best way\nto use Autoprefixer is by using  `grid-template` or `grid-template-areas`.\n\n```css\n.page {\n  display: grid;\n  grid-gap: 33px;\n  grid-template:\n    \"head head  head\" 1fr\n    \"nav  main  main\" minmax(100px, 1fr)\n    \"nav  foot  foot\" 2fr /\n    1fr   100px 1fr;\n}\n.page__head {\n  grid-area: head;\n}\n.page__nav {\n  grid-area: nav;\n}\n.page__main {\n  grid-area: main;\n}\n.page__footer {\n  grid-area: foot;\n}\n```\n\nSee also:\n\n* [The guide about Grids in IE and Autoprefixer].\n* [`postcss-gap-properties`] to use new `gap` property\n  instead of old `grid-gap`.\n* [`postcss-grid-kiss`] has alternate “everything in one property” syntax,\n  which makes using Autoprefixer’s Grid translations safer.\n\n[The guide about Grids in IE and Autoprefixer]: https://css-tricks.com/css-grid-in-ie-css-grid-and-the-new-autoprefixer/\n[`postcss-gap-properties`]:                     https://github.com/jonathantneal/postcss-gap-properties\n[`postcss-grid-kiss`]:                          https://github.com/sylvainpolletvillard/postcss-grid-kiss\n\n\n### Does it add polyfills?\n\nNo. Autoprefixer only adds prefixes.\n\nMost new CSS features will require client side JavaScript to handle a new\nbehavior correctly.\n\nDepending on what you consider to be a “polyfill”, you can take a look at some\nother tools and libraries. If you are just looking for syntax sugar,\nyou might take a look at:\n\n- [postcss-preset-env] is a plugins preset with polyfills and Autoprefixer\n  to write future CSS today.\n- [Oldie], a PostCSS plugin that handles some IE hacks (opacity, rgba, etc).\n- [postcss-flexbugs-fixes], a PostCSS plugin to fix flexbox issues.\n\n[postcss-flexbugs-fixes]: https://github.com/luisrudge/postcss-flexbugs-fixes\n[postcss-preset-env]:     https://github.com/jonathantneal/postcss-preset-env\n[Oldie]:                  https://github.com/jonathantneal/oldie\n\n\n### Why doesn’t Autoprefixer add prefixes to `border-radius`?\n\nDevelopers are often surprised by how few prefixes are required today.\nIf Autoprefixer doesn’t add prefixes to your CSS, check if they’re still\nrequired on [Can I Use].\n\n[Can I Use]: https://caniuse.com/\n\n\n### Why does Autoprefixer use unprefixed properties in `@-webkit-keyframes`?\n\nBrowser teams can remove some prefixes before others, so we try to use all\ncombinations of prefixed/unprefixed values.\n\n\n### How to work with legacy `-webkit-` only code?\n\nAutoprefixer needs unprefixed property to add prefixes. So if you only\nwrote `-webkit-gradient` without W3C’s `gradient`,\nAutoprefixer will not add other prefixes.\n\nBut [PostCSS] has plugins to convert CSS to unprefixed state.\nUse [postcss-unprefix] before Autoprefixer.\n\n[postcss-unprefix]: https://github.com/gucong3000/postcss-unprefix\n\n\n### Does Autoprefixer add `-epub-` prefix?\n\nNo, Autoprefixer works only with browsers prefixes from Can I Use.\nBut you can use [postcss-epub] for prefixing ePub3 properties.\n\n[postcss-epub]: https://github.com/Rycochet/postcss-epub\n\n\n### Why doesn’t Autoprefixer transform generic font-family `system-ui`?\n\n`system-ui` is technically not a prefix and the transformation is not\nfuture-proof. You can use [postcss-font-family-system-ui] to transform\n`system-ui` to a practical font-family list.\n\n[postcss-font-family-system-ui]: https://github.com/JLHwung/postcss-font-family-system-ui\n\n\n## Usage\n\n### Gulp\n\nIn Gulp you can use [gulp-postcss] with `autoprefixer` npm package.\n\n```js\ngulp.task('autoprefixer', () =\u003e {\n  const autoprefixer = require('autoprefixer')\n  const sourcemaps = require('gulp-sourcemaps')\n  const postcss = require('gulp-postcss')\n\n  return gulp.src('./src/*.css')\n    .pipe(sourcemaps.init())\n    .pipe(postcss([ autoprefixer() ]))\n    .pipe(sourcemaps.write('.'))\n    .pipe(gulp.dest('./dest'))\n})\n```\n\nWith `gulp-postcss` you also can combine Autoprefixer\nwith [other PostCSS plugins].\n\n[gulp-postcss]:          https://github.com/postcss/gulp-postcss\n[other PostCSS plugins]: https://github.com/postcss/postcss#plugins\n\n\n### Webpack\n\nIn [webpack] you can use [postcss-loader] with `autoprefixer`\nand [other PostCSS plugins].\n\n```js\nmodule.exports = {\n  module: {\n    rules: [\n      {\n        test: /\\.css$/,\n        use: [\"style-loader\", \"css-loader\", \"postcss-loader\"]\n      }\n    ]\n  }\n}\n```\n\nAnd create a `postcss.config.js` with:\n\n```js\nmodule.exports = {\n  plugins: [\n    require('autoprefixer')\n  ]\n}\n```\n\n[other PostCSS plugins]: https://github.com/postcss/postcss#plugins\n[postcss-loader]:        https://github.com/postcss/postcss-loader\n[webpack]:               https://webpack.js.org/\n\n\n### CSS-in-JS\n\nThe best way to use PostCSS with CSS-in-JS is [`astroturf`].\nAdd its loader to your `webpack.config.js`:\n\n```js\nmodule.exports = {\n  module: {\n    rules: [\n      {\n        test: /\\.css$/,\n        use: ['style-loader', 'postcss-loader'],\n      },\n      {\n        test: /\\.jsx?$/,\n        use: ['babel-loader', 'astroturf/loader'],\n      }\n    ]\n  }\n}\n```\n\nThen create `postcss.config.js`:\n\n```js\nmodule.exports = {\n  plugins: [\n    require('autoprefixer')\n  ]\n}\n```\n\n[`astroturf`]: https://github.com/4Catalyzer/astroturf\n\n\n### CLI\n\nYou can use the [postcss-cli] to run Autoprefixer from CLI:\n\n```sh\nnpm install postcss postcss-cli autoprefixer\nnpx postcss *.css --use autoprefixer -d build/\n```\n\nSee `postcss -h` for help.\n\n[postcss-cli]: https://github.com/postcss/postcss-cli\n\n\n### Other Build Tools\n\n* **Grunt:** [grunt-postcss]\n* **Ruby on Rails**: [autoprefixer-rails]\n* **Neutrino**: [neutrino-middleware-postcss]\n* **Jekyll**: add `autoprefixer-rails` and `jekyll-assets` to `Gemfile`\n* **Brunch**: [postcss-brunch]\n* **Broccoli**: [broccoli-postcss]\n* **Middleman**: [middleman-autoprefixer]\n* **Mincer**: add `autoprefixer` npm package and enable it:\n  `environment.enable('autoprefixer')`\n\n[neutrino-middleware-postcss]: https://www.npmjs.com/package/neutrino-middleware-postcss\n[middleman-autoprefixer]:      https://github.com/middleman/middleman-autoprefixer\n[autoprefixer-rails]:          https://github.com/ai/autoprefixer-rails\n[broccoli-postcss]:            https://github.com/jeffjewiss/broccoli-postcss\n[postcss-brunch]:              https://github.com/iamvdo/postcss-brunch\n[grunt-postcss]:               https://github.com/C-Lodder/grunt-postcss\n\n\n#### Preprocessors\n\n* **Less**: [less-plugin-autoprefix]\n* **Stylus**: [autoprefixer-stylus]\n* **Compass**: [autoprefixer-rails#compass]\n\n[less-plugin-autoprefix]: https://github.com/less/less-plugin-autoprefix\n[autoprefixer-stylus]:    https://github.com/jenius/autoprefixer-stylus\n[autoprefixer-rails#compass]:     https://github.com/ai/autoprefixer-rails#compass\n\n\n#### GUI Tools\n\n* [CodeKit](https://codekitapp.com/help/autoprefixer/)\n* [Prepros](https://prepros.io)\n\n\n### JavaScript\n\nYou can use Autoprefixer with [PostCSS] in your Node.js application\nor if you want to develop an Autoprefixer plugin for a new environment.\n\n```js\nconst autoprefixer = require('autoprefixer')\nconst postcss = require('postcss')\n\npostcss([ autoprefixer ]).process(css).then(result =\u003e {\n  result.warnings().forEach(warn =\u003e {\n    console.warn(warn.toString())\n  })\n  console.log(result.css)\n})\n```\n\nThere is also a [standalone build] for the browser or for a non-Node.js runtime.\n\nYou can use [html-autoprefixer] to process HTML with inlined CSS.\n\n[html-autoprefixer]: https://github.com/RebelMail/html-autoprefixer\n[standalone build]:  https://raw.github.com/ai/autoprefixer-rails/master/vendor/autoprefixer.js\n[PostCSS]:           https://github.com/postcss/postcss\n\n\n### Text Editors and IDE\n\nAutoprefixer should be used in assets build tools. Text editor plugins are not\na good solution, because prefixes decrease code readability and you will need\nto change values in all prefixed properties.\n\nI recommend you to learn how to use build tools like [Parcel].\nThey work much better and will open you a whole new world of useful plugins\nand automation.\n\nIf you can’t move to a build tool, you can use text editor plugins:\n\n* [Visual Studio Code](https://github.com/mrmlnc/vscode-autoprefixer)\n* [Sublime Text](https://github.com/sindresorhus/sublime-autoprefixer)\n\n[Parcel]: https://parceljs.org/\n\n\n## Warnings\n\nAutoprefixer uses the [PostCSS warning API] to warn about really important\nproblems in your CSS:\n\n* Old direction syntax in gradients.\n* Old unprefixed `display: box` instead of `display: flex`\n  by latest specification version.\n\nYou can get warnings from `result.warnings()`:\n\n```js\nresult.warnings().forEach(warn =\u003e {\n  console.warn(warn.toString())\n})\n```\n\nEvery Autoprefixer runner should display these warnings.\n\n[PostCSS warning API]: https://postcss.org/api/#warning\n\n\n## Disabling\n\n### Prefixes\n\nAutoprefixer was designed to have no interface – it just works.\nIf you need some browser specific hack just write a prefixed property\nafter the unprefixed one.\n\n```css\na {\n  transform: scale(0.5);\n  -moz-transform: scale(0.6);\n}\n```\n\nIf some prefixes were generated incorrectly, please create an [issue on GitHub].\n\n[issue on GitHub]: https://github.com/postcss/autoprefixer/issues\n\n\n### Features\n\nYou can use these plugin options to control some of Autoprefixer’s features.\n\n* `grid: \"autoplace\"` will enable `-ms-` prefixes for Grid Layout including some\n  [limited autoplacement support](#grid-autoplacement-support-in-ie).\n* `supports: false` will disable `@supports` parameters prefixing.\n* `flexbox: false` will disable flexbox properties prefixing.\n  Or `flexbox: \"no-2009\"` will add prefixes only for final and IE\n  versions of specification.\n* `remove: false` will disable cleaning outdated prefixes.\n\nYou should set them inside the plugin like so:\n\n```js\nautoprefixer({ grid: 'autoplace' })\n```\n\n\n### Control Comments\n\nIf you do not need Autoprefixer in some part of your CSS,\nyou can use control comments to disable Autoprefixer.\n\n```css\n.a {\n  transition: 1s; /* will be prefixed */\n}\n\n.b {\n  /* autoprefixer: off */\n  transition: 1s; /* will not be prefixed */\n}\n\n.c {\n  /* autoprefixer: ignore next */\n  transition: 1s; /* will not be prefixed */\n  mask: url(image.png); /* will be prefixed */\n}\n```\n\nThere are three types of control comments:\n\n* `/* autoprefixer: (on|off) */`: enable/disable all Autoprefixer translations for the\n  whole block both *before* and *after* the comment.\n* `/* autoprefixer: ignore next */`: disable Autoprefixer only for the next property\n  or next rule selector or at-rule parameters (but not rule/at‑rule body).\n* `/* autoprefixer grid: (autoplace|no-autoplace|off) */`: control how Autoprefixer handles\n  grid translations for the whole block:\n  * `autoplace`: enable grid translations with autoplacement support.\n  * `no-autoplace`: enable grid translations with autoplacement\n    support *disabled* (alias for deprecated value `on`).\n  * `off`: disable all grid translations.\n\nYou can also use comments recursively:\n\n```css\n/* autoprefixer: off */\n@supports (transition: all) {\n  /* autoprefixer: on */\n  a {\n    /* autoprefixer: off */\n  }\n}\n```\n\nNote that comments that disable the whole block should not be featured in the same\nblock twice:\n\n```css\n/* How not to use block level control comments */\n\n.do-not-do-this {\n  /* autoprefixer: off */\n  transition: 1s;\n  /* autoprefixer: on */\n  transform: rotate(20deg);\n}\n```\n\n\n## Options\n\nFunction `autoprefixer(options)` returns a new PostCSS plugin.\nSee [PostCSS API] for plugin usage documentation.\n\n```js\nautoprefixer({ cascade: false })\n```\n\nAvailable options are:\n\n* `env` (string): environment for Browserslist.\n* `cascade` (boolean): should Autoprefixer use Visual Cascade,\n  if CSS is uncompressed. Default: `true`\n* `add` (boolean): should Autoprefixer add prefixes. Default is `true`.\n* `remove` (boolean): should Autoprefixer [remove outdated] prefixes.\n  Default is `true`.\n* `supports` (boolean): should Autoprefixer add prefixes for `@supports`\n  parameters. Default is `true`.\n* `flexbox` (boolean|string): should Autoprefixer add prefixes for flexbox\n  properties. With `\"no-2009\"` value Autoprefixer will add prefixes only\n  for final and IE 10 versions of specification. Default is `true`.\n* `grid` (false|`\"autoplace\"`|`\"no-autoplace\"`): should Autoprefixer\n  add IE 10-11 prefixes for Grid Layout properties?\n    * `false` (default): prevent Autoprefixer from outputting\n       CSS Grid translations.\n    * `\"autoplace\"`: enable Autoprefixer grid translations\n      and *include* autoplacement support. You can also use\n      `/* autoprefixer grid: autoplace */` in your CSS.\n    * `\"no-autoplace\"`: enable Autoprefixer grid translations\n      but *exclude* autoplacement support. You can also use\n      `/* autoprefixer grid: no-autoplace */` in your CSS.\n      (alias for the deprecated `true` value)\n* `stats` (object): custom [usage statistics] for `\u003e 10% in my stats`\n  browsers query.\n* `overrideBrowserslist` (array): list of queries for target browsers.\n  Try to not use it. The best practice is to use `.browserslistrc` config\n  or `browserslist` key in `package.json` to share target browsers\n  with Babel, ESLint and Stylelint. See [Browserslist docs]\n  for available queries and default value.\n* `ignoreUnknownVersions` (boolean): do not raise error on unknown browser\n  version in Browserslist config. Default is `false`.\n\nPlugin object has `info()` method for debugging purpose.\n\nYou can use PostCSS processor to process several CSS files\nto increase performance.\n\n[usage statistics]: https://github.com/browserslist/browserslist#custom-usage-data\n[PostCSS API]:      https://postcss.org/api/\n\n## Environment Variables\n\n* `AUTOPREFIXER_GRID`: (`autoplace`|`no-autoplace`) should Autoprefixer\n  add IE 10-11 prefixes for Grid Layout properties?\n    * `autoplace`: enable Autoprefixer grid translations\n      and *include* autoplacement support.\n    * `no-autoplace`: enable Autoprefixer grid translations\n      but *exclude* autoplacement support.\n\nEnvironment variables are useful, when you want to change Autoprefixer options but don't have access to config files.\n[Create React App] is a good example of this.\n\n[Create React App]: (https://reactjs.org/docs/create-a-new-react-app.html#create-react-app)\n\n### Using environment variables to support CSS Grid prefixes in Create React App\n\n1. Install the latest version of Autoprefixer and [cross-env](https://www.npmjs.com/package/cross-env):\n\n```\nnpm install autoprefixer@latest cross-env --save-dev\n```\n\n2. Under `\"browserslist\"` \u003e `\"development\"` in the package.json file, add `\"last 1 ie version\"`\n\n```\n\"browserslist\": {\n  \"production\": [\n    \"\u003e0.2%\",\n    \"not dead\",\n    \"not op_mini all\"\n  ],\n  \"development\": [\n    \"last 1 chrome version\",\n    \"last 1 firefox version\",\n    \"last 1 safari version\",\n    \"last 1 ie version\"\n  ]\n}\n```\n\n3. Update `\"scripts\"` in the package.json file to the following:\n\n```\n\"scripts\": {\n  \"start\": \"cross-env AUTOPREFIXER_GRID=autoplace react-scripts start\",\n  \"build\": \"cross-env AUTOPREFIXER_GRID=autoplace react-scripts build\",\n  \"test\": \"cross-env AUTOPREFIXER_GRID=autoplace react-scripts test\",\n  \"eject\": \"react-scripts eject\"\n},\n```\n\nReplace `autoplace` with `no-autoplace` in the above example if you prefer to disable Autoprefixer Grid autoplacement support.\n\nNow when you run `npm start` you will see CSS Grid prefixes automatically being applied to your output CSS.\n\nSee also [Browserslist environment variables] for more examples on how to use environment variables in your project.\n\n[Browserslist environment variables]: https://github.com/browserslist/browserslist#environment-variables\n\n## Grid Autoplacement support in IE\n\nIf the `grid` option is set to `\"autoplace\"`, limited autoplacement support is added to Autoprefixers grid translations. You can also use\nthe `/* autoprefixer grid: autoplace */` control comment or\n`AUTOPREFIXER_GRID=autoplace npm build` environment variable.\n\nAutoprefixer will only autoplace grid cells if both `grid-template-rows`\nand `grid-template-columns` has been set. If `grid-template`\nor `grid-template-areas` has been set, Autoprefixer will use area based\ncell placement instead.\n\nAutoprefixer supports autoplacement by using `nth-child` CSS selectors.\nIt creates [number of columns] x [number of rows] `nth-child` selectors.\nFor this reason Autoplacement is only supported within the explicit grid.\n\n```css\n/* Input CSS */\n\n/* autoprefixer grid: autoplace */\n\n.autoplacement-example {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  grid-template-rows: auto auto;\n  grid-gap: 20px;\n}\n```\n\n```css\n/* Output CSS */\n\n/* autoprefixer grid: autoplace */\n\n.autoplacement-example {\n  display: -ms-grid;\n  display: grid;\n  -ms-grid-columns: 1fr 20px 1fr;\n  grid-template-columns: 1fr 1fr;\n  -ms-grid-rows: auto 20px auto;\n  grid-template-rows: auto auto;\n  grid-gap: 20px;\n}\n\n.autoplacement-example \u003e *:nth-child(1) {\n  -ms-grid-row: 1;\n  -ms-grid-column: 1;\n}\n\n.autoplacement-example \u003e *:nth-child(2) {\n  -ms-grid-row: 1;\n  -ms-grid-column: 3;\n}\n\n.autoplacement-example \u003e *:nth-child(3) {\n  -ms-grid-row: 3;\n  -ms-grid-column: 1;\n}\n\n.autoplacement-example \u003e *:nth-child(4) {\n  -ms-grid-row: 3;\n  -ms-grid-column: 3;\n}\n```\n\n### Beware of enabling autoplacement in old projects\n\nBe careful about enabling autoplacement in any already established projects that have\npreviously not used Autoprefixer's grid autoplacement feature before.\n\nIf this was your html:\n\n```html\n\u003cdiv class=\"grid\"\u003e\n  \u003cdiv class=\"grid-cell\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n```\n\nThe following CSS will not work as expected with the autoplacement feature enabled:\n\n```css\n/* Unsafe CSS when Autoplacement is enabled */\n\n.grid-cell {\n  grid-column: 2;\n  grid-row: 2;\n}\n\n.grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  grid-template-rows: repeat(3, 1fr);\n}\n```\n\nSwapping the rules around will not fix the issue either:\n\n```css\n/* Also unsafe to use this CSS */\n\n.grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  grid-template-rows: repeat(3, 1fr);\n}\n\n.grid-cell {\n  grid-column: 2;\n  grid-row: 2;\n}\n```\n\nOne way to deal with this issue is to disable autoplacement in the\ngrid-declaration rule:\n\n```css\n/* Disable autoplacement to fix the issue */\n\n.grid {\n  /* autoprefixer grid: no-autoplace */\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  grid-template-rows: repeat(3, 1fr);\n}\n\n.grid-cell {\n  grid-column: 2;\n  grid-row: 2;\n}\n```\n\nThe absolute best way to integrate autoplacement into already existing projects\nthough is to leave autoplacement turned off by default and then use a control\ncomment to enable it when needed. This method is far less likely to cause\nsomething on the site to break.\n\n```css\n/* Disable autoplacement by default in old projects */\n/* autoprefixer grid: no-autoplace */\n\n/* Old code will function the same way it always has */\n.old-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  grid-template-rows: repeat(3, 1fr);\n}\n.old-grid-cell {\n  grid-column: 2;\n  grid-row: 2;\n}\n\n/* Enable autoplacement when you want to use it in new code */\n.new-autoplace-friendly-grid {\n  /* autoprefixer grid: autoplace */\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  grid-template-rows: repeat(3, auto);\n}\n```\n\nNote that the `grid: \"no-autoplace\"` setting and the\n`/* autoprefixer grid: no-autoplace */` control comment share identical\nfunctionality to the `grid: true` setting and the `/* autoprefixer grid: on */`\ncontrol comment. There is no need to refactor old code to use `no-autoplace`\nin place of the old `true` and `on` statements.\n\n### Autoplacement limitations\n\n#### Both columns and rows must be defined\n\nAutoplacement only works inside the explicit grid. The columns and rows need to be defined\nso that Autoprefixer knows how many `nth-child` selectors to generate.\n\n```css\n.not-allowed {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n}\n\n.is-allowed {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  grid-template-rows: repeat(10, auto);\n}\n```\n\n#### Repeat auto-fit and auto-fill are not supported\n\nThe `repeat(auto-fit, ...)` and `repeat(auto-fill, ...)` grid functionality relies on\nknowledge from the browser about screen dimensions and the number of available grid\nitems for it to work properly. Autoprefixer does not have access to this information\nso unfortunately this little snippet will _never_ be IE friendly.\n\n```css\n.grid {\n  /* This will never be IE friendly */\n  grid-template-columns: repeat(auto-fit, min-max(200px, 1fr))\n}\n```\n\n#### No manual cell placement or column/row spans allowed inside an autoplacement grid\n\nElements must not be manually placed or given column/row spans inside\nan autoplacement grid. Only the most basic of autoplacement grids are supported.\nGrid cells can still be placed manually outside the the explicit grid though.\nSupport for manually placing individual grid cells inside an explicit\nautoplacement grid is planned for a future release.\n\n```css\n.autoplacement-grid {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  grid-template-rows: repeat(3, auto);\n}\n\n/* Grid cells placed inside the explicit grid\n   will break the layout in IE */\n.not-permitted-grid-cell {\n  grid-column: 1;\n  grid-row: 1;\n}\n\n/* Grid cells placed outside the\n   explicit grid will work in IE */\n.permitted-grid-cell {\n  grid-column: 1 / span 2;\n  grid-row: 4;\n}\n```\n\nIf manual cell placement is required, we recommend using `grid-template` or\n`grid-template-areas` instead:\n\n```css\n.page {\n  display: grid;\n  grid-gap: 30px;\n  grid-template:\n      \"head head\"\n      \"nav  main\" minmax(100px, 1fr)\n      \"foot foot\" /\n      200px 1fr;\n}\n.page__head {\n  grid-area: head;\n}\n.page__nav {\n  grid-area: nav;\n}\n.page__main {\n  grid-area: main;\n}\n.page__footer {\n  grid-area: foot;\n}\n```\n\n#### Do not create `::before` and `::after` pseudo elements\n\nLet's say you have this HTML:\n\n```html\n\u003cdiv class=\"grid\"\u003e\n  \u003cdiv class=\"grid-cell\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n```\n\nAnd you write this CSS:\n\n```css\n.grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  grid-template-rows: auto;\n}\n\n.grid::before {\n  content: 'before';\n}\n\n.grid::after {\n  content: 'after';\n}\n```\n\nThis will be the output:\n\n```css\n.grid {\n  display: -ms-grid;\n  display: grid;\n  -ms-grid-columns: 1fr 1fr;\n  grid-template-columns: 1fr 1fr;\n  -ms-grid-rows: auto;\n  grid-template-rows: auto;\n}\n\n.grid \u003e *:nth-child(1) {\n  -ms-grid-row: 1;\n  -ms-grid-column: 1;\n}\n\n\n.grid \u003e *:nth-child(2) {\n  -ms-grid-row: 1;\n  -ms-grid-column: 2;\n}\n\n.grid::before {\n  content: 'before';\n}\n\n.grid::after {\n  content: 'after';\n}\n```\n\nIE will place `.grid-cell`, `::before` and `::after` in row 1 column 1.\nModern browsers on the other hand will place `::before` in row 1 column 1,\n`.grid-cell` in row 1 column 2, and `::after` in row 2 column 1.\n\nSee this [CodePen](https://codepen.io/daniel-tonon/pen/gBymVw) to see a visualization\nof the issue. View the CodePen in both a modern browser and IE to see the difference.\n\nNote that you can still create `::before` and `::after` elements as long as you manually\nplace them outside the explicit grid.\n\n#### When changing the `grid gap` value, columns and rows must be re-declared\n\nIf you wish to change the size of a `grid-gap`, you will need to redeclare the grid columns and rows.\n\n```css\n.grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  grid-template-rows: auto;\n  grid-gap: 50px;\n}\n\n/* This will *NOT* work in IE */\n@media (max-width: 600px) {\n  .grid {\n    grid-gap: 20px;\n  }\n}\n\n/* This will *NOT* work in IE */\n.grid.small-gap {\n  grid-gap: 20px;\n}\n```\n\n```css\n.grid {\n  display: grid;\n  grid-template-columns: 1fr 1fr;\n  grid-template-rows: auto;\n  grid-gap: 50px;\n}\n\n/* This *WILL* work in IE */\n@media (max-width: 600px) {\n  .grid {\n    grid-template-columns: 1fr 1fr;\n    grid-template-rows: auto;\n    grid-gap: 20px;\n  }\n}\n\n/* This *WILL* work in IE */\n.grid.small-gap {\n  grid-template-columns: 1fr 1fr;\n  grid-template-rows: auto;\n  grid-gap: 20px;\n}\n```\n\n## Debug\n\nRun `npx autoprefixer --info` in your project directory to check\nwhich browsers are selected and which properties will be prefixed:\n\n```console\n$ npx autoprefixer --info\nBrowsers:\n  Edge: 16\n\nThese browsers account for 0.26% of all users globally\n\nAt-Rules:\n  @viewport: ms\n\nSelectors:\n  ::placeholder: ms\n\nProperties:\n  appearance: webkit\n  flow-from: ms\n  flow-into: ms\n  hyphens: ms\n  overscroll-behavior: ms\n  region-fragment: ms\n  scroll-snap-coordinate: ms\n  scroll-snap-destination: ms\n  scroll-snap-points-x: ms\n  scroll-snap-points-y: ms\n  scroll-snap-type: ms\n  text-size-adjust: ms\n  text-spacing: ms\n  user-select: ms\n```\n\nJS API is also available:\n\n```js\nconsole.log(autoprefixer().info())\n```\n\n## Security Contact\n\nTo report a security vulnerability, please use the [Tidelift security contact].\nTidelift will coordinate the fix and disclosure.\n\n[Tidelift security contact]: https://tidelift.com/security\n\n## For Enterprise\n\nAvailable as part of the Tidelift Subscription.\n\nThe maintainers of `autoprefixer` and thousands of other packages are working\nwith Tidelift to deliver commercial support and maintenance for the open source\ndependencies you use to build your applications. Save time, reduce risk,\nand improve code health, while paying the maintainers of the exact dependencies\nyou use. [Learn more.](https://tidelift.com/subscription/pkg/npm-autoprefixer?utm_source=npm-autoprefixer\u0026utm_medium=referral\u0026utm_campaign=enterprise\u0026utm_term=repo)\n","funding_links":["https://opencollective.com/postcss","https://tidelift.com/funding/github/npm/autoprefixer","https://github.com/sponsors/ai","https://tidelift.com/security","https://tidelift.com/subscription/pkg/npm-autoprefixer?utm_source=npm-autoprefixer\u0026utm_medium=referral\u0026utm_campaign=enterprise\u0026utm_term=repo"],"categories":["css","Post-Processing CSS","JavaScript","What’s included?","Code formatting","\u003e 10k ★","打包工具","前端开发框架及项目","Plugins","Ep142: Vendor Prefixes, Media Queries, JavaScript","Tools \u0026 Utilities","Инструменты разработчика","插件","Front-end Development"],"sub_categories":["`Button.js`","webpack 辅助工具、Loader 和插件","其他_文本生成、文本对话","Result","Miscellaneous Plugins","其他插件"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpostcss%2Fautoprefixer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpostcss%2Fautoprefixer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpostcss%2Fautoprefixer/lists"}