Css 变量
一、认识
基于 Css
变量 实现主题化功能, 现有两种方案:
-
预设主题: 预设多个主题模式, 定义多个主题模式下的变量
-
动态主题: 只设置一个主题, 主题中的所有变量通过
JavaScript
动态插入
二、预设主题
2.1 Css 预设主题
Css
中预设主题模式: 预设明亮和暗黑主题
:root{
--color-link: #1677ff;
--color-bg-base: #fff;
--color-primary: #1677ff;
--color-success: #52c41a;
--color-warning: #faad14;
}
[data-theme="light"]{
--color-link: #1677ff;
--color-bg-base: #fff;
--color-primary: #1677ff;
--color-success: #52c41a;
--color-warning: #faad14;
}
[data-theme="dark"]{
--color-link: #d9363e;
--color-bg-base: #fff;
--color-primary: black;
--color-success: #52c41a;
--color-warning: #faad14;
}
2.2 JavaScript 动态切换主题
JavaScript
动态切换主题
document.documentElement.setAttribute('data-theme', "light");
三、动态主题
3.1 Js 动态设置主题
function cssVars(params: {
element?: HTMLElement;
variables: Record<string, string | number>;
}): void {
const { element = document.documentElement, variables } = params;
Object.keys(variables).forEach((variable) => {
element.style.setProperty(variable, String(variables[variable]));
});
}
useEffect(() => {
cssVars({
variables: {
"--color-link": "#1677ff",
"--color-bg-base": "#fff",
"--color-primary": "#1677ff",
"--color-success": "#52c41a",
"--color-warning": "#faad14",
},
});
}, []);
3.2 Css 使用动态主题
.app{
width: 800px;
height: 800px;
background-color: var(--color-primary, blue);
}