声明变量 - -
变量命名规则
- 支持数字命名
- 支持使用短横线和空格命名
- 支持中文等CJK文字
- 不支持包含$、[、]、^、(、)、%、"等特殊字符的命名,要使用这些特殊字符,需要使用反斜杠转义。
变量值
可以是任意值或表达式
变量作用域
后代元素可以原封不动地继承祖先元素设置的CSS自定义属性值。
全局变量
变量的特征
变量值可以相互传递
css变量不能给自己赋值
css变量不能用于@media媒体特征的值
CSS变量作为content属性值没有任何效果
使用变量 var()
deepskyblue为缺省值,当–any-what无效时使用 deepskyblue
var() 函数参数非法时
最终 body 的背景色为 transparent,因为background-color的初始值是transparent
var()函数只要第一个参数值可能有效,哪怕这个参数值是一个乱七八糟的东西,依然会正常解析。如果第一个参数值是不合法的,则var()函数解析为当前CSS属性的初始值或继承值(如果有继承性),也就是按照unset全局关键字的规则渲染。(注意,只是渲染规则类似,并不等同于直接设置unset关键字。)
var() 函数的空格尾随特性
最终body的font-size大小是14px
原理:此处font-size:var(–size)px等同于font-size:20 px,注意,20后面有一个空格,这属于不合法的font-size属性值。由于语法上var(–size)px又是合法的,因此会重置font-size:16px,最终使用父元素设置的字号大小14px。
改进方案是:
或
js 获取CSS全局变量的值
js 修改CSS全局变量的值
js 设置CSS局部变量的值
实战范例
- 借助CSS计数器在页面中显示CSS变量的值
进度条
多处使用的svg图像
效果见 https://demo.cssworld.cn/new/8/1-3.php
按钮点击特效
效果见 https://demo.cssworld.cn/new/8/1-1.php
实现原理
- –open:;前面有一个空格,也就是–open属性值是一个空格,在语法上是可能有效的。但是空格对于box-shadow和background等CSS属性是无效的,因此,box-shadow和background等CSS属性均解析为初始值
- 点击按钮触发:active伪类后,会运行–open:inherit这个CSS声明,全局CSS关键字作为CSS自定义属性值一定无效,因此var()函数会使用后备CSS属性值进行渲染
自定义 CSS 函数 keyword()
模拟 attr() 函数