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

JS使用setProperty修改:root CSS变量引用失效问题排查

问题根因

修改后的代码失效是两个语法错误导致的:

  • 引用CSS自定义属性(CSS变量)必须使用var()函数包裹,直接传入裸变量名时,浏览器会将其判定为非法属性值直接丢弃,不会生效
  • 传入的变量名缺少CSS变量强制要求的双横杠--前缀:你在:root中定义的变量名是--onpxfont,而非onpxfont
修复方法

将所有setProperty调用的第二个参数,替换为var()包裹的完整CSS变量名即可,以10px字号选项为例:

onpx.onclick = function() {
  // 正确写法:传入var()包裹的带--前缀的变量
  document.documentElement.style.setProperty('--currentfont', 'var(--onpxfont)');
  onpx.classList.add('active'),
    onikipx.classList.remove('active'),
    ondortpx.classList.remove('active'),
    onaltipx.classList.remove('active');
}

其余三个字号选项按相同规则修改即可,对应传入值分别为var(--onikipxfont)、var(--ondortpxfont)、var(--onaltipxfont)。

可选优化

当前代码中四个点击事件重复编写了类名移除/添加逻辑,可以抽离为公共函数减少冗余:

const fontOptions = [onpx, onikipx, ondortpx, onaltipx];
function setActiveFont(target) {
  fontOptions.forEach(el => el.classList.remove('active'));
  target.classList.add('active');
}

// 事件绑定可简化为
onpx.onclick = () => {
  document.documentElement.style.setProperty('--currentfont', 'var(--onpxfont)');
  setActiveFont(onpx);
}
onikipx.onclick = () => {
  document.documentElement.style.setProperty('--currentfont', 'var(--onikipxfont)');
  setActiveFont(onikipx);
}
ondortpx.onclick = () => {
  document.documentElement.style.setProperty('--currentfont', 'var(--ondortpxfont)');
  setActiveFont(ondortpx);
}
onaltipx.onclick = () => {
  document.documentElement.style.setProperty('--currentfont', 'var(--onaltipxfont)');
  setActiveFont(onaltipx);
}

内容的提问来源于stack exchange,提问作者Wuqqers

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:12:15