跳到主要内容

认识

2025年01月15日
柏拉文
越努力,越幸运

一、认识


CSS Variables,又称为 CSS Custom Properties,是 CSS 中的一项强大功能,允许你在 CSS 中定义可重用的值并将其引用。这些变量使得 CSS 样式表更加动态、灵活和易于维护。通过 CSS 变量,你可以在多个地方使用相同的值,而不需要重复编写,便于集中管理样式的更改。

二、语法


CSS 变量使用 -- 语法进行定义,接着可以在样式中通过 var() 函数来引用这些变量。定义的变量是具有作用域的,可以局部定义,也可以全局定义。

2.1 声明变量

根元素 :root 声明变量: 通常的最佳实践是定义在根伪类 :root 下,这样就可以在 HTML 文档的任何地方访问到它了。如果变量定义在 :root 选择器中,表示它是全局变量,可以在整个 CSS 文件中使用。

:root {
--main-bg-color: brown;
}

普通元素 element 声明变量: 如果变量定义在某个特定的元素或选择器下,它只能在该元素及其后代元素中使用。

element {
--main-bg-color: brown;
}

2.2 使用变量

使用一个局部变量时用 var() 函数包裹以表示一个合法的属性值。 var() 函数可以定义多个 备用值(fallback value,当给定值未定义时将会用备用值替换。

element {
background-color: var(--main-bg-color);
}

element1 {
background-color: var(--main-bg-color, red); // 如果 --main-bg-color 没有定义, 则使用红色
}

2.3 操作变量

根元素 root 操作变量:

// 获取一个 Dom 节点上的 CSS 变量
document.documentElement.style.getPropertyValue("--my-var");

// 获取任意 Dom 节点上的 CSS 变量
getComputedStyle(document.documentElement).getPropertyValue("--my-var");

// 修改一个 Dom 节点上的 CSS 变量
document.documentElement.style.setProperty("--my-var", jsVar + 4);

普通元素 element 操作变量:

// 获取一个 Dom 节点上的 CSS 变量
element.style.getPropertyValue("--my-var");

// 获取任意 Dom 节点上的 CSS 变量
getComputedStyle(element).getPropertyValue("--my-var");

// 修改一个 Dom 节点上的 CSS 变量
element.style.setProperty("--my-var", jsVar + 4);

三、用法


3.1 Css 声明变量、使用变量

:root{
--color-link: #1677ff;
--color-bg-base: #fff;
--color-primary: #1677ff;
--color-success: #52c41a;
--color-warning: #faad14;
}


.app{
width: 800px;
height: 800px;
background-color: var(--color-primary, blue);
}

3.2 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;
}

JavaScript 动态切换主题

document.documentElement.setAttribute('data-theme', "light");

3.3 JavaScript 声明变量、 Css 使用变量

JavaScript 声明变量

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",
},
});
}, []);

Css 使用变量

.app{
width: 800px;
height: 800px;
background-color: var(--color-primary, blue);
}