SCSS中acos函数有何变更?本地引入动画代码报SassError如何解决?
问题原因
新版Dart Sass(v1.33+)对数值单位的运算规则做了严格限制:
- 数学函数(如
acos、sin、cos等)返回的是无单位的弧度数值,不再允许直接与带角度单位(如deg)的数值进行乘法运算,否则会抛出「Undefined operation」错误。 - 老版本(如LibSass)对单位运算的兼容性更宽松,所以Codepen上的旧代码能正常运行,但本地用新版Sass编译就会报错。
修复方法
针对报错的代码行,有两种简洁的修复方式:
方式1:使用Sass内置的degrees()函数(推荐)
Sass提供了degrees()函数,可直接将弧度值转换为带deg单位的角度值,避免单位运算冲突:
$angle: degrees(acos($t/($a + $b)));
方式2:调整运算顺序,先完成数值计算再添加单位
如果不想使用内置函数,可以先把弧度转成角度的无单位比例,再乘以1deg:
$radian: acos($t/($a + $b)); $angle: ($radian * 180 / 3.14159) * 1deg;
额外注意:避免acos参数超出范围
acos的参数必须在[-1, 1]之间,否则会返回NaN导致编译错误。可以用clamp()函数限制参数范围,增强代码健壮性:
$angle: degrees(acos(clamp(-1, $t/($a + $b), 1)));
内容的提问来源于stack exchange,提问作者Zwenn
相关产品推荐
相关产品推荐

