less 不支持用户定义函数,只能用内置函数、mixin 或 js 插件实现类函数行为;内置函数如 lighten()、round() 等在编译期执行,要求参数类型严格匹配,否则静默失败或报错。

Less 里没有真正意义上的“用户定义函数”,function myFn() {} 这种写法在 .less 文件中直接报错。你只能用内置函数做编译期静态计算,或靠 mixin 模拟、JS 插件实现类函数行为。
Less 内置函数怎么用才不翻车
所有 lighten()、percentage()、round() 等函数都在编译时执行,输出纯 CSS 字符串,不参与运行时逻辑。
-
lighten(#ff6b6b, 10%)✅ 正常提亮;但lighten(255, 107, 107, 10%)❌ 报错——必须包在rgb()或hsl()里 -
floor(10px / 3px)→ 输出3(单位被约去),后续若写成width: floor(10px / 3px)px就会错,得手动补单位或改用unit() -
desaturate(#ccc, 20%)无视觉变化,因为灰度色饱和度为 0;spin(#000, 30)也无效——黑/白/灰无法旋转色相 - 嵌套调用如
darken(lighten(@c, 10%), 5%)❌ 编译失败,必须拆成两步:@tmp: lighten(@c, 10%); @result: darken(@tmp, 5%);
用 mixin “假装”是函数:能传参、能复用,但不返回值
mixins 不是函数,它不返回值,只展开代码块。但它是最常用、最安全的参数化复用方式。
- 定义:
.calc-width(@ratio) { width: round(100% * @ratio); } - 调用:
.calc-width(0.618);→ 输出width: 62%; - 不能这么写:
@w: .calc-width(0.618);❌ Less 不允许把 mixin 赋值给变量 - 慎用嵌套调用:比如在
&:hover里再调用一个带 & 的 mixin,容易生成冗余选择器链
真要 JS 计算?只能走插件或 ~` 表达式(慎用)
Less 支持 ~`js code` 语法,在 Node.js 编译环境下执行 JS 表达式,但浏览器端不支持,且调试困难、易出错。
-
@timestamp: ~`(new Date()).getTime();`→ 编译时插入当前毫秒数(仅限 Node.js 环境) -
color: ~`(function(c) { return c === '#fff' ? '#000' : '#fff'; })('@primary-color')`→ 可行但难维护,别在生产样式里玩条件判断 - 自定义函数唯一正途:写 Less plugin,在
less.render()时通过functions选项注入,例如注册clamp() - 注意:
~`中的 JS 无法访问 Less 变量作用域,所有变量需显式传入字符串拼接,极易引号逃逸错误
最容易被忽略的是:所有 Less 函数参数类型和顺序必须严格匹配文档,少一个百分号、多一个空格、单位位置不对,都会静默失败或输出意外结果——它不会报错,只会跳过或编译出错 CSS。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











