PostCSS 是 CSS 领域的 Babel,通过插件(如 autoprefixer、postcss-preset-env)将新语法转为兼容代码;依赖 browserslist 配置,共享 AST 实现精准转换与链式处理。
PostCSS 不是 Babel,但它在 CSS 领域扮演的角色,确实和 Babel 在 JavaScript 领域一模一样:把“写起来爽、但浏览器还不认”的代码,变成“能跑、能兼容、能上线”的代码。
autoprefixer 是 PostCSS 的
就像
根据
自动决定要不要转译
或可选链,
也完全依赖
配置——它不硬编码哪些属性要加前缀,而是查 Can I Use 数据,动态注入
、
等前缀。
常见错误现象:
写了
却没生效 → 没配
,
默认只处理已广泛支持的属性
打包后出现大量冗余前缀 →
写成了
,覆盖了太多老旧版本
实操建议:
立即学习
“
前端免费学习笔记(深入)
”;
把
配置统一写在
里,避免
和构建工具(如 Webpack/Vite)各自维护一套
用
命令验证当前配置实际命中哪些浏览器版本
不要在 CSS 里手动写
,交给
统一管理,否则插件可能重复添加或漏掉
post
css
-preset-env 就是 CSS 的
集合
允许你直接写
、
这类新语法,再由插件按需降级。它的行为逻辑和 Babel 插件高度一致:声明式启用、阶段控制(Stage 0–4)、可配置是否 polyfill。
使用HTML,CSS,JavaScript开发Android应用程序 英文文字pdf版附源文件
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
下载
容易踩的坑:
开启
后,
能转译,但
(Stage 2)不会 → 它严格按 CSS 提案阶段走,不是“越新越好”
用了
但没装
→
默认不包含嵌套,得单独加插件或开
开发时热更新不触发重编译 → Vite/Webpack 对
文件的 AST 变更监听不如 JS 敏感,改了
插件顺序后必须重启 dev server
postcss-import / postcss-nested 让 CSS 拥有模块化和结构表达力
传统 CSS 缺少 import 和嵌套能力,靠文件拼接或预处理器模拟。而
和
是纯标准 CSS 的“语法糖层”,不引入 DSL,也不改变最终输出格式 —— 这和 Babel 把
转成
、把
转成函数调用,本质相同。
关键差异点:
处理的是
,不是
;它不解析 Sass 语法,只做路径解析 + 内联合并
支持
和
,但不支持
或变量作用域 —— 它只解决嵌套,不越界做预处理
多个
的顺序影响最终 CSS 优先级,和 JS 中
执行顺序一致,不是“随便放”
为什么不能直接用 Babel 处理 CSS?
Babel 解析的是 JavaScript AST,对 CSS 字符串无感知;即使你用
,也只是把样式塞进 JS 对象里,没解决原生 CSS 文件的转换问题。PostCSS 的不可替代性在于它专精 CSS AST:能精确识别
里的
,也能区分
是
还是
,还能安全地重写
而不破坏注释位置。
真正容易被忽略的一点:PostCSS 插件之间共享同一棵 AST。你加了
模拟 CSS 变量,再接
压缩,后者能真正把
替换成
—— 因为它们操作的是同一个内存中的 AST 节点,不是字符串流式传递。这点,任何基于正则或文本替换的“伪 PostCSS”方案都做不到。
babel-preset-envbabel-preset-envbrowserslistconstautoprefixerbrowserslist-webkit--moz-display: gridbrowserslistautoprefixerbrowserslistlast 2 versionsbrowserslistpackage.jsonpostcss.config.jsnpx browserslist-webkit-xxxautoprefixer@babel/plugin-proposal-*postcss-preset-envcolor-mix(in srgb, red 50%, blue)@container (min-width: 400px)stage: 3:has()color-contrast()nestingpostcss-nestedpostcss-preset-envstage: 0.csspostcss.config.jspostcss-importpostcss-nestedimportrequireclasspostcss-import@import "xxx.css"@import "xxx.scss"postcss-nested&&:hover@mixin@importimportbabel-plugin-css-in-jsdecl.valuevar(--color)atrule.name@media@layerrule.selectorspostcss-custom-propertiescssnanocolor: var(--primary)color: #3b82f6