在CSS中使用数据主题变量值

问题描述 投票:0回答:1

我想在数据主题属性中存储颜色的十六进制值,例如

    document.body.setAttribute("data-theme", "#a20000")

如何在 CSS 文件中使用这个值,如下所示

    body[data-theme] {
      ---theameColor: "data-theme";
    }

我想创建一个用于设置所有其他类的样式的变量。

我尝试了这个方法,但不起作用

body[data-theme] {
  ---theameColor: "data-theme";
}
javascript css reactjs colors styles
1个回答
0
投票

我认为您不能完全按照您描述的方式做到这一点,但可以通过使用

:root
中设置的变量并在何时更改变量值来实现。

function setDarkTheme() {
  document.body.setAttribute("data-theme-dark", "");
}
:root {
  --theme-color: #f1f2f3;
  --text-color: #000000;
}

body[data-theme-dark] {
  --theme-color: #494d50;
  --text-color: #FFFFFF;
}

body {
  background: var(--theme-color);
  color: var(--text-color)
}
<body>
  <div>Hello world</div>
  <button type="button" onclick="setDarkTheme();">Set dark theme</button>
</body>

我也许会推荐一种更具声明性的方法,您可以(理论上)拥有许多主题。请注意,如果没有匹配主题(例如“light”主题),CSS 如何默认为标准值

function setDarkTheme() {
  document.body.setAttribute("data-theme", "dark");
}

function setLightTheme() {
  document.body.setAttribute("data-theme", "light");
}

function setRedTheme() {
  document.body.setAttribute("data-theme", "red");
}
:root {
  --theme-color: #f1f2f3;
  --text-color: #000000;
}

body[data-theme="dark"] {
  --theme-color: #494d50;
  --text-color: #FFFFFF;
}

body[data-theme="red"] {
  --text-color: #FF0000;
}

body {
  background: var(--theme-color);
  color: var(--text-color)
}
<body>
  <div>Hello world</div>
  <button type="button" onclick="setDarkTheme();">Set dark theme</button>
  <button type="button" onclick="setLightTheme();">Set light theme</button>
  <button type="button" onclick="setRedTheme();">Set red theme</button>
</body>

© www.soinside.com 2019 - 2024. All rights reserved.