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

如何一次性批量更新多个CSS自定义属性?

如何一次性批量更新多个CSS自定义属性?

其实你已经把事儿做对一半啦!你在CSS里已经完整定义了dark(默认)和light主题的所有变量,根本不需要在JS里手动挨个设置每个自定义属性——只需要给<html>元素切换light类名,所有主题变量会自动从CSS里生效,这才是最优雅的方案!

为什么不用挨个改变量?

你看,你已经写了html.light的变量覆盖规则:当<html>标签上有light类时,浏览器会自动用这个选择器下的变量值替换默认的:root变量;移除类名就回到默认的dark主题。所有样式逻辑都集中在CSS里,JS只需要负责触发类名切换就行,完美分离职责,也不用重复维护变量值。

改进后的JS代码

把你原来的setTheme函数改成这样就行,超级简洁:

function setTheme(theme) {
  const htmlElement = document.documentElement;
  if (theme === "dark") {
    htmlElement.classList.remove("light");
  } else {
    htmlElement.classList.add("light");
  }
}

把额外变量也整合进主题

如果你想把--table-sticky-heading-bg-color也一起批量处理,直接把它加到CSS的主题定义里就好,不用再在JS里单独设置:

在:root的变量集合里加上:

:root {
  /* 你的原有变量... */
  --table-sticky-heading-bg-color: rgba(0,0,0,1);
}

然后在html.light的定义里加上对应的变量值:

html.light {
  /* 你的原有变量... */
  --table-sticky-heading-bg-color: rgba(255,255,255,1);
}

这样之后,切换主题时这个变量也会自动跟着变化,JS里完全不用额外处理它。

这种方式不仅代码更简洁,而且所有主题相关的样式都集中在CSS里维护,以后要加新的主题变量,直接在CSS里补充就行,不用动JS,维护起来方便太多啦!

备注:内容来源于stack exchange,提问作者Murphstar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 13:37:57