多层阴影必须用英文逗号分隔,否则仅第一层生效;变量拼接需避免尾随逗号;box-shadow mixin 应用 length()+extract() 循环生成;box-shadow+ 可合并声明;text-shadow 需递归控制偏移与透明度,禁用 blur;border-radius 限制阴影清晰度。

直接用逗号分隔多层值,别拼字符串;真正需要“算法”的地方,是动态生成、组合或主题适配,不是语法本身。
多层阴影必须用英文逗号分隔,否则只生效第一层
Less 编译器不会自动补逗号,漏写就等于丢掉后面所有层。这不是 bug,是 CSS 语法约束被严格继承。
- 正确写法:
.shadow(0 2px 4px rgba(0,0,0,.1), 0 4px 12px rgba(0,0,0,.08)) - 错误写法:
.shadow(0 2px 4px rgba(0,0,0,.1) 0 4px 12px rgba(0,0,0,.08))(缺逗号 → 后半被忽略) - 变量拼接时也要小心:
@shadow-sm和@shadow-lg本身不能带尾随逗号,否则生成box-shadow: ... , ;会失效
.box-shadow(@shadows) mixin 必须拆解列表,不能直接传 @arguments
直接写 box-shadow: @arguments 看似省事,但 Less 会把整个参数列表当单个值处理,编译后可能带引号、换行或空格错位,浏览器解析失败。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
- 推荐用
length()+extract()+ 循环拼接,确保输出无引号、无多余空格 - Less v3.10+ 可用
each()简化逻辑;旧版本需手写递归.loop()守卫终止条件 - 关键点:每层值必须是完整合法的 box-shadow 片段,比如
inset 0 0 8px rgba(0,0,0,.05),不能只传偏移量
用 box-shadow+ 合并多处声明,适合模块化叠加
这是 Less 编译器硬编码支持的合并机制,仅对白名单属性有效(box-shadow、background、transform 等),不是通用函数。
- 必须写成
box-shadow+: 0 2px 4px @shadow-sm, 0 8px 16px @shadow-lg;(冒号后紧跟值,逗号分隔) - 不能写成
box-shadow_或box-shadow +:(空格会导致解析失败) - 若某处用了普通
box-shadow:,它会覆盖之前所有box-shadow+的结果,不是追加
长投影(text-shadow)要用递归循环,且模糊半径必须为 0
视觉上的“拉长感”靠的是逐层同步偏移 + 渐变透明度,不是靠 blur。加 blur 会糊成一团,违背设计意图。
- 核心逻辑:
@x: @i * 1px、@y: @i * 1px、@color: fade(#000, 100% - @i * 2%),@blur: 0 - 守卫条件必须明确,如
.loop(@i) when (@i > 0),否则易栈溢出或无限循环 - 移动端和旧版 Safari 对超长
text-shadow列表解析慢,建议控制在 8–12 层,必要时用@supports (text-shadow: 0 0 0 #000)做降级
真正容易被忽略的不是怎么写循环,而是渲染边界——border-radius 不是装饰,它是裁剪框;box-shadow 是按原始矩形扩散的。只要 @blur + @spread > @radius,边缘发虚就是必然结果,跟 mixin 写得再漂亮也没用。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










