声享正努力加载中...
--鄢敏 Amy
CSS变量注意事项
定义:
--变量名
使用:
var(<--变量名>[, <默认值>]?)
命名规则:
字母a-z、A-Z,数字0-9,连字符-,下划线_
还可以是中文、日文、韩文...
大小写敏感,可以是纯数字
注意:与Sass/Less/Stylus等预编译工具不同,变量的定义和使用只能在声明块{}里面!
:root {
--bg-pink: pink;
background-color: var(--bg-pink); // 有效
}
p {
background-color: var(--bg-pink); // 有效
}--bg-pink: pink;
:root {
background-color: var(--bg-pink); // 无效
}CSS变量跟随CSS选择器走,因此CSS变量又称CSS自定义属性
如果想设置CSS变量全局使用,可以设置在:root根元素 选择器上
当存在多个同名CSS变量的时候,CSS变量的覆盖规则 由CSS选择器的权重决定
CSS变量没有!important这种用法
CSS属性名不支持使用变量
body {
--bg-color: yellow;
background-color: var(--bg-color, pink);
}
请问此时<body>的背景色是?
A.yellow B.pink1、变量已定义
2、变量未定义
body {
/* --bg-color: yellow; */
background-color: var(--bg-color, pink);
}
请问此时<body>的背景色是?
A.yellow B.pink3、变量不合法
body {
--bg-color: 21px;
background-color: yellow;
background-color: var(--bg-color, pink);
}
请问此时<body>的背景色是?
A.yellow B.pink C.21px D.transparent
变量相互传递特性
body {
--yellow: yellow;
--bg-color: var(--yellow);
background-color: var(--bg-color, pink);
}
请问此时<body>的背景色是?
A.yellow B.pink C.green D.transparent
body {
--size: 21;
font-size: 18px;
font-size: var(--size)px;
}
请问此时<body>的字体大小是?
A.21px B.18px C.16px D.0px
变量空格尾随特性
1、HTML:在style属性中设置即可
2、JS:
设置 setProperty()
读取 getPropertyValue()
删除 removeProperty()
<div style="--bg-color: #00ffff">
<p style="background-color: var(--bg-color);">我是栗子本栗</p>
</div>其中R,G,B还是原来的十六进制表示的RGB色值,范围是00-FF;新增的AA,则表示透明度,范围也是00-FF
由于透明度范围是0%-100%,而00-FF的十进制范围是0-255,对不上,需要转换,公式如下:
// Alpha范围0-1
AA = (Alpha * 255).toString(16);
#RRGGBBAA颜色也支持缩写,例如#f00f等同于#ff0000ff
百分比透明度和十六进制值对应关系表
CSS2中色彩模式有:
RGB色彩模式(即Red、Green、BLue)
十六进制色彩模式(简称HEX)
CSS3新增色彩模式:
RGBA色彩模式(即RED、Green、BLue、Alpha)
HSL色彩模式(即色调(Hue)、饱和度(Saturation)、亮度(Lightness))
HSLA色彩模式(即色调(Hue)、饱和度(Saturation)、亮度(Lightness)、Alpha)
tips:色调(Hue)取值0-360,饱和度、亮度百分比0-100%表示
but
尽管有如此多的颜色写法
却还是不支持最便捷的、无需转换的
关键字+透明度
或者
十六进制+透明度
的写法
比如:设置50%透明度的红色
我们最想要如下方式实现
background-color: red, 50%;
或者background-color: #ff0000 50%;
这个时候,CSS变量 var就可以用来造轮子了!
