为什么 color: #007bff; color: var(--primary); 在 IE 里不管用 你可能会想,既然写了两个 color,IE 总该挑一个吧?实际上,IE 看到第二行 color: var(--primary);,直接把它当成无效声明跳过,结果取的是继承值或 initial(比
color: #007bff; color: var(--primary); 在 IE 里不管用你可能会想,既然写了两个 color,IE 总该挑一个吧?实际上,IE 看到第二行 color: var(--primary);,直接把它当成无效声明跳过,结果取的是继承值或 initial(比如 background: initial 是 transparent)。它根本不走 fallback 逻辑,也不认“覆盖”概念。
color: var(--text-color, #333); —— 后备值和 var() 必须在同一行、同一声明中color: #333; 换行再写 color: var(--text-color);var(--x, var(--y, #000)) 在 IE 里只认最外层 #000,但嵌套本身无意义,因为 IE 根本不解析任何 var()postcss-custom-properties 必须设 preserve: false默认配置下,插件只是追加降级值:color: #007bff; color: var(--primary);,IE 依然失效。只有 preserve: false 才会真正移除 var() 那一行,只保留静态值。很多人在这里踩了坑,以为默认配置就够了。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
autoprefixer 之前运行,否则可能被后续处理干扰css-vars-ponyfill,就不能设 preserve: false——否则 ponyfill 找不到原始 var(),无法在运行时替换:root,且值为静态常量:--color: red; ,--size: calc(1rem + 2px); ,--c: var(--base); calc() 里不能套 var(),PostCSS 也救不了width: calc(100% - var(--gap)); 在 IE11 中不是“var() 不生效”,而是整个 calc() 表达式被 parser 直接跳过。PostCSS 插件默认不处理这种嵌套,因为它无法安全求值。这是个常见的盲区。
--gap: 12px 这种纯数值变量,直接写成 width: calc(100% - 12px);--gap 需动态变化,就得 JS 注入内联样式,或放弃 IE11 支持postcss-calc 和 postcss-custom-properties 链式工作——顺序错或配置漏,结果还是空值no-cssvars 类做兜底比 @supports 可靠@supports (background: var(--x)) 在 IE11 里根本不识别,整条规则被忽略,不能单独作为降级依据。
CSS.supports('color', 'var(--t)') ,CSS.supports('--t') (IE 报 TypeError).btn { background: var(--primary); } 和 .no-cssvars .btn { background: #007bff; }构建后务必打开产出的 CSS 文件,全局搜索 var(-- —— 只要有残留,说明变量定义位置不对、值含动态表达式,或者插件根本没生效。这是最后一道防线,千万不能省。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述