Less 不支持直接写 JS 表达式,需用内置函数替代,如 round()、unit()、min()/max()、percentage();动态值应交由 CSS 自定义属性 + JS 处理,注意单位一致性。

Less 里不能直接写 JS 表达式
Less 编译器(无论是 less.js 浏览器端,还是 lessc 命令行)在解析时只认 Less 语法,eval()、Math.max() 这类 JS 函数不会被识别,直接写会报错:ParseError: Unrecognised input。这不是配置问题,是语言边界——Less 不是 JS 模板引擎。
用 Less 内置函数替代常见 JS 计算
Less 提供了足够多的数学和类型处理函数,能覆盖大多数“想用 JS 算”的场景。关键不是“怎么把 JS 塞进去”,而是“哪个 Less 函数等价”:
-
round(1.75px)→ 替代Math.round(1.75) -
unit(20, px)→ 替代20 + 'px'(注意:不能用20 + 'px',会拼成字符串20px但类型是 string,后续无法参与计算) -
min(16px, @base-font-size)和max(12px, @line-height)→ 替代Math.min()/Math.max() -
percentage(0.8)→ 输出80%,比手动乘 100 更安全(避免单位丢失)
所有这些函数都要求参数类型兼容:比如 min(16, 1.2em) 会报错,因为单位不一致;必须统一为 16px 和 1.2 * 16px 这类可比值。
需要真正 JS 运行时计算?换思路:CSS 自定义属性 + JS
如果数值依赖 DOM 尺寸、用户交互或 API 返回(比如根据容器宽度动态设 font-size),Less 编译期根本无从得知。这时不该强求 Less,而应让 JS 控制 style 或 :root 变量:
document.documentElement.style.setProperty('--dynamic-gap', `${window.innerWidth / 10}px`);
然后在 Less 中使用:
使用约定式提交(Conventional Commits)生成标准化的 Git 提交信息。适用于以下场景: (1) 暂存更改时需要提交信息; (2) 审查 diff 时希望获得结构化摘要; (3) 编写 PR 描述或变更日志(changelog)条目; (4) 用户明确要求“为本次更改编写提交信息”。 该功能会分析已暂存/未暂存的 diff,并生成按类型(type)划分范围的提交信息。
.box { margin: var(--dynamic-gap); }
注意:var(--dynamic-gap) 的值不会参与 Less 编译期计算(比如不能写 calc(var(--dynamic-gap) * 2) 再传给另一个变量),但它能被 CSS 运行时解析,且兼容性良好(IE 不支持,但现代项目通常已不考虑)。
警惕混合使用导致的单位混乱
Less 计算对单位极其敏感,一个常见坑是:把带单位的值传给期望纯数字的函数,或者反过来:
- ❌
round(16px)—— 报错,round()要求数字,16px是带单位量 - ✅
round(16px / 1px)或round(unit(16px, ''))先转纯数 - ❌
@size: 14; font-size: @size + 'px';—— 结果是字符串"14px",无法再参与加减 - ✅
font-size: unit(@size, px);—— 输出真正可计算的14px值
单位剥离和重建必须成对出现,漏一步,后面所有计算就断了。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










