less本身不支持条件编译,@if仅用于值计算,无法控制选择器或声明块的输出;ie hack必须用~""转义字符串原样输出,或通过@import (css)引入纯css适配文件。

Less 本身不支持条件编译,别指望 @if 控制 IE 样式输出
Less 的 if() 函数只做值计算,不能跳过选择器或整条声明块。写成 .box { display: if(@ie, flex, block); } 只会让编译结果里固定出现一条 display: flex 或 display: block,不会生成两套规则,更不会“只在 IE 下生效”。所谓“IE 条件编译”是构建流程的事,不是 Less 语法能干的。
真正有效的 IE hack 必须用 ~"" 原样输出,否则直接被 Less 报错或丢弃
Less 解析器把 9、*property 当作非法语法:写 margin-top: 10px9; 会报 ParseError;写 *zoom: 1; 会被静默忽略。唯一可靠方式是用转义字符串强制透出:
-
margin-top: ~"10px9";→ 输出margin-top: 10px9; -
color: ~"#f00\9";→ 输出color: #f00\9;(注意反斜杠必须紧贴数字,不能有空格) -
display: ~"inline-block\9; *display: inline; *zoom: 1";→ 一行塞多个 hack
别把 ~"" 塞进变量或 mixin:@ie-margin: ~"10px9"; margin-top: @ie-margin; 在多数 Less 版本中会编译失败。
大量 IE 适配建议抽离为纯 CSS 文件,用 @import (css) 引入
把所有 、*prop、_prop 等 hack 集中写进 ie-hacks.css,再用:
@import (css) "ie-hacks.css";
这样做的好处很实在:
- 避免 Less 编译器反复解析 hack 语法,降低出错概率
- 团队成员一眼看出哪些是临时补丁,哪些是主逻辑
- 未来删 IE 支持时,删掉这一行就完事,不用 grep 全项目
注意:@import (css) 中的 (css) 是必需的,漏了它 Less 会尝试按 Less 语法解析那个文件,然后炸。
Autoprefixer 不处理 IE hack,也不降级语法,该手动写的还得手动写
很多人误以为开了 Autoprefixer 就万事大吉,其实它对 \9、-ms-grid、var(--x) 三类东西完全无感:
-
var(--x)全系 IE 不支持 → 必须用 Less 变量替代,如@primary: #007bff; -
display: grid在 IE10/11 要写成display: -ms-grid,且必须配套-ms-grid-columns,Autoprefixer 不生成这些 -
gap在 IE 无效 → 改用margin或封装成.grid-gap(@size)内部算 margin
最容易被忽略的是:你改了 browserslist 去掉 IE11,但代码里还留着 -ms- 前缀——它们不会自动消失,也不会被任何工具清理。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











