基本使用
CSS中原生的变量定义语法是:– ,变量使用语法是:var(– ` ),其中*表示我们的变量名称。变量名称没有限制(不能包含$,[,^,(,%等字符)。
- 声明一个局部变量:
1 | element { |
- 声明一个 全局 CSS 变量:
1 | :root { |
:root 这个 CSS 伪类匹配文档树的根元素。对于 HTML 来说,:root 表示 元素,除了优先级更高之外,与 html 选择器相同。
- 使用
1 | element { |
作用域
同一个 CSS变量,可以在多个选择器内声明。读取的时候,优先级最高的声明生效。这与 CSS 的”层叠”规则是一致的。
CSS 变量是支持继承的
通俗一点就是局部变量会在作用范围内覆盖全局变量。
CSS变量并不支持 !important 声明。
1 | :root { --color: blue; } |
效果:
蓝色继承于根元素 粉色来自直接设置 ID选择器权重更高,紫色 继承了紫色总结:
- 变量的作用域就是它所在的选择器的有效范围。
- 覆盖规则由CSS选择器的权重决定
CSS变量完整语法
var( [, ]? ),用中文表示就是:var( <自定义属性名> [, <默认值 ]? ),
1、变量未定义1
2
3
4
5p {
color: var(--color, red)
}
<p>我是默认值颜色:红色</p>
效果:变量未定义,我是默认值颜色:红色
2、CSS变量不合法的缺省特性1
2
3
4
5
6
7
8
9body{
color: blue;
}
p {
--color: 20px;
color: var(--color, red)
}
<p>变量不合法,颜色为蓝色</p>
效果:变量不合法,颜色为蓝色
变量类型
1、CSS变量值是数值,不能与数值单位直接连用。1
2
3
4p {
--size: 20;
font-size: var(--size)px;
}
此处font-size:var(–size)px等同于font-size:20 px,注意,20后面有个空格。
或者用css3的calc:1
font-size: calc(var(--size) * 1px);
2、css变量为字符串的组合使用
1 | :root{ |
响应式布局
可以在响应式布局的media命令里面声明变量,使得不同的屏幕宽度有不同的变量值。
1 | css: |
JavaScript 操作
JavaScript 也可以检测浏览器是否支持 CSS 变量。
1 | const isSupported = |
1 | // 设置变量 |
JavaScript 可以将任意值存入样式表
1 | const docStyle = document.documentElement.style; |
getComputedStyle方法获取的是最终应用在元素上的所有CSS属性对象(即使没有CSS代码,也会把默认的祖宗八代都显示出来),只读
兼容性
兼容性处理
对于不支持 CSS 变量的浏览器,可以采用下面的写法。
1 | a { |
也可以使用@support命令进行检测。1
2
3
4
5
6
7@supports ( (--a: 0)) {
/* supported */
}
@supports ( not (--a: 0)) {
/* not supported */
}
与传统 LESS 、SASS 等预处理器变量比较
1、CSS 变量的动态性,能在页面运行时更改,而传统预处理器变量编译后无法更改
2、CSS 变量能够继承,能够组合使用,具有作用域
3、配合 Javascript 使用,可以方便的从 JS 中读/写
有趣的用法
。。。