You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Sass函数中使用CSS变量?解决random函数报错问题

问题原因

Sass 是预处理器,所有函数(包括random())在编译阶段就会执行计算,而 CSS 变量(var(--bottom-value))是浏览器运行阶段才会解析的动态值。当你把var(--bottom-value)传给random()时,Sass 编译时只能拿到字符串"var(--bottom-value)",并非数字类型,因此会抛出$limit: "var(--bottom-value)" is not a number for random'`的错误。

解决方案1:直接用JS生成阴影值(推荐动态场景)

既然页面高度是通过JS获取的,直接在JS里生成多组box-shadow参数,再设置到元素上,完全绕开Sass编译时的限制:

// 获取页面高度
const pageHeight = Math.max(
  document.body.scrollHeight, 
  document.body.offsetHeight,
  document.documentElement.clientHeight, 
  document.documentElement.scrollHeight, 
  document.documentElement.offsetHeight
);

// 生成n组box-shadow的函数
function generateMultipleBoxShadow(n, maxSize) {
  const shadows = [];
  for (let i = 0; i < n; i++) {
    const x = Math.floor(Math.random() * maxSize);
    const y = Math.floor(Math.random() * maxSize);
    shadows.push(`${x}px ${y}px #FFF`);
  }
  return shadows.join(', ');
}

// 调用函数生成阴影(示例:生成5组)
const boxShadowValue = generateMultipleBoxShadow(5, pageHeight);

// 设置到目标元素上
document.querySelector('.your-target-element').style.boxShadow = boxShadowValue;

如果需要响应窗口大小变化,可添加resize事件监听:

window.addEventListener('resize', () => {
  const newPageHeight = Math.max(
    document.body.scrollHeight, 
    document.body.offsetHeight,
    document.documentElement.clientHeight, 
    document.documentElement.scrollHeight, 
    document.documentElement.offsetHeight
  );
  const newBoxShadowValue = generateMultipleBoxShadow(5, newPageHeight);
  document.querySelector('.your-target-element').style.boxShadow = newBoxShadowValue;
});
解决方案2:Sass配合构建工具(仅适合静态高度场景)

如果页面高度是固定值,或能在编译前获取到,可通过构建工具将高度值注入Sass编译流程。以Webpack的sass-loader为例:

// webpack.config.js
module.exports = {
  module: {
    rules: [
      {
        test: /\.s[ac]ss$/i,
        use: [
          'style-loader',
          'css-loader',
          {
            loader: 'sass-loader',
            options: {
              // 注入全局Sass变量(pageHeight需为Node环境下获取的静态高度)
              additionalData: `$page-height: ${pageHeight};`,
            },
          },
        ],
      },
    ],
  },
};

修改后的Sass函数:

@function multiple-box-shadow($n) {
    $value: '#{random($page-height)}px #{random($page-height)}px #FFF';
    @for $i from 2 through $n {
        $value: '#{$value} , #{random($page-height)}px #{random($page-height)}px #FFF';
    }
    @return unquote($value);
}

注意:此方法仅适用于静态高度场景,窗口resize后无法自动更新阴影值。

内容的提问来源于stack exchange,提问作者Dr.Powar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 17:36:03