CSS:变量

概述

CSS 支持自定义属性设置变量,通过 val()来访问。

解决什么问题

当 项目变得庞大时, 许多 CSS 信息会大量的重复出现。这种情况可以使用像 SASS 这样的预处理器。CSS 变量为我们带来一些预处理器的便利,并且不需要额外的编译。

详细文档

使用

局部变量

live demo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.container {
--main-color: #abcabc;

background: var(--main-color);
padding: 20px;
font-size: 25px;
text-align: center;
margin: 0 auto;
width: 300px;

button {
background: var(--main-color);
}
}

全局变量

live demo

1
2
3
4
5
6
7
<div class="container1 container">
<p>Hello World</p>
<button>button</button>
</div>
<div class="container2 container">
<p>Hello World again</p>
</div>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
:root {
--global-color: #666;
--global-bg-color: #789789;
}

.container {
padding: 20px;
font-size: 25px;
text-align: center;
transition: all 0.2s;
margin: 0 auto;
width: 300px;
}

.container1 {
--global-color: #defdef;
color: var(--global-color);
background: var(--global-bg-color);

button {
color: var(--undefined-variable);
}
}
.container2 {
margin-top: 20px;
color: var(--global-color);
}

作用域

从跟上边的例子可以看到,我们设置了根作用域,在 container1 里也设置了相同的变量名称 --global-color。此时里层的变量起作用。并且,我们从 container2 看到,在内层命名的 --global-color 并没有改写外层的 --global-color 值。

CSS 变量的作用域类似 JS 的作用域,内层的作用域优先,如果找不到变量则向外查找。如果都找不到的话,则设置属性为 inherit(自己的理解,不一定对)。