Skip to content

参考:Less 速查与对照表

基于 Less 4.6.7 · 核于 2026-07

速查

  • 定位:向后兼容 CSS 的预处理器,JS 实现,编译期出标准 CSS;当前版本 4.6.7
  • 变量@ 前缀;惰性求值 + 最后定义生效;插值 @{var};变量变量 @@name;属性即变量 $prop(3.0+)。
  • 混合.m() 定义/调用括号必需;参数/默认/命名(分号)/剩余 @rest...@arguments!important
  • 守卫when (...)and/逗号,(或)/not;类型函数 isnumber 等;CSS 守卫加在选择器上。
  • 嵌套/&&:hover&--x&&(复合)、& &(后代)、& + &(兄弟)、.x &(前置)。
  • 运算+ - * 直接算;除法 / 需括号(v4 默认 parens-division);parens=全需括号。
  • @import 选项reference/inline/less/css/once/multiple/optional
  • 组织:命名空间 #lib()、映射 @m[key](3.5+)、脱离规则集 @r: {..}:extend(... all)
  • CLIlessc [opts] in.less out.css--math --modify-var --source-map --include-path --strict-units
  • vs Sass@vs$、惰性vs命令式、无模块系统vs@use、守卫vs@if/@each、JS vs Dart。

一、语法元素速查

元素语法示例
变量声明/取值@name: 值; / @name@c: #333; color: @c;
变量插值@{name}.@{x} {}url("@{p}/a.png")
变量变量@@name@@theme
属性作为变量$propbackground: $color;
混合定义/调用.m() {} / .m();.radius(8px);
参数默认值.m(@r: 4px)无参用默认
命名参数.m(@a: 1; @b: 2)分号分隔、可乱序
剩余参数.m(@rest...)承接多余入参
守卫.m() when (...)when (@a > 0)
父选择器&&:hover&--active
转义~"..."~"(min-width: 768px)"
注释//(静默)/ /* */(保留)

二、父选择器 & 组合对照

写法(父为 .link编译结果用途
&:hover.link:hover伪类
&--active.link--activeBEM 修饰符
&&.link.link复合类,提权重
& &.link .link后代
& + &.link + .link相邻兄弟
.no-js &.no-js .link把父级前置

三、v4 数学模式对照

模式+ - */备注
always(v3 默认)会误算 font: 14px/1.5
parens-division(v4 默认)需括号裸斜杠原样保留
parens / strict需括号需括号最保守
less
// v4 默认下
width: 3 + 5;       // 8
width: 100px / 4;   // 100px / 4(保留)
width: (100px / 4); // 25px

四、@import 选项对照

选项作用
reference只引用不输出,仅 extend/mixin 用到才产出(控体积)
inline原样包含、不编译
less强制按 Less 编译(无视扩展名)
css强制当 CSS,输出原生 @import
once默认,只引一次
multiple允许多次引入
optional缺失则跳过、不报错

扩展名默认行为:.less/无扩展名 → 内联编译;.css → 保留成原生 @import

五、常用内置函数速查

类别函数
颜色定义rgb rgba hsl hsla hsv argb
颜色通道hue saturation lightness red green blue alpha luma
颜色操作lighten darken saturate desaturate fade fadein fadeout spin mix tint shade greyscale contrast
数学ceil floor round percentage sqrt abs pow mod min max pi
字符串e escape replace %()
列表length extract range each
类型isnumber iscolor isstring iskeyword isurl ispixel isem ispercentage isunit isdefined
杂项if boolean unit get-unit convert data-uri default svg-gradient

顺序提醒:spin(saturate(#aaa, 10%), 10) 优于 saturate(spin(#aaa, 10), 10%)(减少色彩损失);image-size 等需 Node 环境;default() 仅在守卫内有效。

六、lessc 命令行常用选项

选项作用
--source-map[=file]生成 source map
--math=[always|parens-division|parens]数学模式
--strict-units[=on]严格单位(不兼容单位运算报错)
--modify-var="name=value"外部覆盖变量(多主题)
--global-var="name=value"注入全局变量
--include-path=PATH1;PATH2@import 搜索路径
--rewrite-urls=[all|local|off]URL 重写策略
-x / --compress压缩(已不推荐,用专门工具)
bash
lessc --source-map --math=parens styles.less styles.css
lessc --modify-var="primary=#f00" theme.less theme-red.css

七、Less vs Sass 核心差异

维度LessSass(Dart Sass)
变量前缀@$
求值惰性 + 最后定义生效命令式、逐行覆盖(!default/!global
模块系统无正式模块(@import (reference) 近似)@use / @forward(命名空间/私有)
条件守卫混合 when + CSS 守卫@if / @else
循环递归守卫 / each()@each / @for / @while
函数混合当函数 [@result]@function / @return
映射@m[key](3.5+,弱)一等 map(可迭代)
实现JavaScriptDart(Ruby/LibSass 已弃用)

八、常见坑对照

现象根因解法
同名变量取到「意料外」的值惰性 + 最后定义生效拆作用域 / 用参数传值
width: 100px/4 没被计算v4 除法需括号写成 (100px / 4)
font: 14px/1.5 被算成怪值用了 always 旧模式用默认 parens-division
插值不生效名字处漏了 @{}名字/字符串用 @{var},取值用 @var
引入库后 CSS 暴涨未用 reference@import (reference) 按需产出
混合多了一条 .m {} 规则定义漏了括号定义写 .m() {}
2px + 3em 结果可疑单位不兼容--strict-units 提前报错
运行时切不了主题@var 是编译期改用 CSS 自定义属性 --var
颜色链式结果偏色函数顺序不当先饱和度后 spin
.css 没被内联默认保留成 @import@import (less) "x.css"

九、权威链接