Less 不支持 π 和 e 等数学常量,需手动定义高精度小数(如 @pi: 3.1415926535;),注意单位匹配与无量纲性,所有运算在编译期完成,精度影响最终 CSS 输出。

Less 没有内置 π 或 e 这类数学常量,也不提供 Math.PI、Math.E 等 JavaScript 风格的全局常量访问方式。所有“常量”都得手动定义或通过函数间接逼近。
Less 里根本没有 π 和 e 的原生支持
你写 @pi: Math.PI; 或 @e: e(); 都会报错——前者是 JS 语法,后者会被 Less 当作未声明函数或字符串拼接处理。Less 的函数库(如 ceil()、round()、unit())只处理已有数值,不提供超越数生成能力。
-
pi()、e()、sin()、cos()等均不存在于 Less 标准函数集中(截至 2026 年 5 月) - 试图用
~"Math.PI"或e("...")只是字符串转义,无法参与运算 - 浏览器端运行时的
calc()也不认识pi,CSS 原生不支持该符号
替代方案:手动定义 + 单位兼容性兜底
若真需在尺寸、旋转、渐变角度等场景用到 π(比如圆角弧度换算、三角函数近似),唯一可行路径是显式赋值并确保单位上下文安全:
- 用高精度小数定义:
@pi: 3.1415926535;,后续参与乘除时注意单位匹配(如@radius: 10px; @circumference: @radius * 2 * @pi;→ 合法,结果为62.83185307px) - 避免混入单位:
@pi-rem: 3.1415926535rem;是错误用法——rem是长度单位,不是无量纲常量,会导致后续运算单位污染 - 若用于
transform: rotate(),角度必须带单位:rotate(@pi * 180deg / 3.1415926535)这种写法冗余且易错;更稳妥的是直接用rotate(180deg),或封装为.rotate-half-circle() { transform: rotate(180deg); }
为什么不能靠 convert() 或 unit() 推导 π
convert() 只做单位换算(如 convert(1in, px)),不处理无量纲数学常量;unit(@val, '') 可剥离单位得纯数字,但前提是 @val 本身是带单位的值——而 π 本质无单位,强行套用反而触发类型错误。
立即学习“前端免费学习笔记(深入)”;
-
unit(3.1415926535, '')返回3.1415926535✅,但这是冗余操作,不如直接用字面量 -
unit(@pi, 'deg')会失败:因为@pi无单位,unit()要求第一个参数原本就含指定单位才能转换 - 没有
pi-to-deg()或e-to-ratio()这类函数,所有映射逻辑必须手写
真正容易被忽略的是:Less 中所有“常量感”的值,本质都是静态变量。它们不随屏幕尺寸、媒体查询或用户交互变化,也无法被 when 条件混合宏动态重赋。一旦定义,就固定参与编译期运算——这意味着 π 的精度选多少,直接影响最终 CSS 输出的小数位和可读性,建议统一用 round(@value, 4) 控制。


















