less 中多值 css 属性(如 filter、transform、box-shadow、animation)必须用空格拼成单字符串,旧版“+”合并语法在 v4.x 已彻底移除;动态组合需用 list 函数(如 append),静态组合直接空格分隔;同时需注意 perspective、transform-style 等上下文属性的显式设置。

filter 多值必须拼成单字符串,否则后声明覆盖前声明
Less 不会自动合并 filter 属性,写两行 filter: blur(2px); filter: contrast(1.3); 的结果是只有 contrast(1.3) 生效。浏览器只认最后一个同名属性,编译器也不报错,视觉上就“失效”了。
安全做法是把所有滤镜函数用空格连成一个字符串,再赋给 filter:
@filter-list: blur(2px) contrast(1.3) brightness(0.9);-
filter: e(@filter-list);(e()移除引号,否则输出带引号的非法字符串) - 别用变量直接拼接:
filter: @blur @contrast;会报Expected ')'
transform 值不能用 + 合并,v4.x 已彻底移除该语法
transform+: rotate(10deg) 在 Less 4.2+ 中直接报 ParseError: Unexpected token '+'——不是配置没开,是语法被删了。旧教程里这类写法已不可用。
正确方式是用空格分隔的 list:
- 静态组合:
@tf: rotate(10deg) scale(1.2) translateX(8px); transform: @tf; - 动态追加(v3.8+):
@tf: []; @tf: append(@tf, rotate(10deg), space); - 避免
e("rotate(" + @deg + ")"):类型丢失,@deg未定义时输出rotate(),CSS 失效且无提示
box-shadow 和 animation 也遵循同一规则
box-shadow+、animation+ 等所有带 + 的旧合并语法,在 v4.x 全部失效。它们和 transform+ 一样,不是“兼容性开关”,而是被语言层移除。
替代方案统一用 list + 空格拼接:
@shadows: 0 2px 4px rgba(0,0,0,0.1), 0 4px 12px rgba(0,0,0,0.15); box-shadow: @shadows;@anims: slide-in 0.3s ease-out, fade 0.2s linear; animation: @anims;- 注意逗号分隔的是多个阴影/动画,而每个动画内部的参数之间用空格——
join()仅用于逗号分隔场景,此处不适用
容易被忽略的上下文陷阱
光拼对值还不够。比如 transform 链中含 rotateY() 却没设 perspective,整条声明会被浏览器静默丢弃;filter 开启 blur() 却没配 backdrop-filter 的容器隔离,可能造成意料外的模糊扩散。
这些不是 mixin 能“顺带处理”的事:
-
transform-origin必须显式声明,不能依赖默认值 -
perspective要写在父容器上,不是子元素自身 -
transform-style: preserve-3d是父容器级开关,影响子元素 Z 轴是否塌陷 - 它们和滤镜/变换值不在同一作用域,也不能塞进同一个 mixin 参数里一并传入
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











