作为前端小白,热衷于前端技术,最近正在学习CSS3。前几天看见一篇文章:《必须了解的CSS变量(var)》,看见这标题就立刻被吸引了。纳尼纳尼?var不是JavaScript的关键字么,什么时候CSS也能用了?话说啥时候CSS也能声明变量了?难道不是像SASS/SCSS这样的CSS预编译器的功能么?
在阅读博文及更加深入的查阅后,写了此篇博文,以供交流。文中有多处引用原博文内容,若有侵权,请联系我速删。文末附原博文及相关引用链接。
名称
- 开始时被叫做“CSS变量”
- 经过扩展和重构后,改为“CSS自定义属性”
- CSS增加@apply规则后,名称变为“CSS自定义属性级联变量”
语法
1.定义语法:--variableName: value;
变量名称(variableName
)使用规范:
- 以"--"开头,后面可以是数字、字母、下划线、连字符、汉字等,但不能包含$、[、^、(、%等字符
- 大小写敏感(另:CSS中,书写属性名时大小写不敏感,但是书写选择器时大小写敏感)
- 定义只能出现在块{}内
- 可以使用!important修饰
- 作用域就是选择器的选定范围,作用域出现交叉时,同名变量覆盖规则取决于选择器权重
1 .a{
2 --container-bg-color: #0ff;
3 }
4 div {
5 --container-bg-color: #0f0 !important;
6 }
View Code
2.使用语法:cssPropertyName: var(--variableName[,declarationValue]);
- declarationValue:仅限于当--variableName变量未定义时的备用选项
- val()只能被引用,不能被赋值。即只能出现在":"右侧
- 不能用作地址,如:url(var(--url));
- var()后面默认带有一个空格,因此在其后面加单位无效,如:
--size: 20; font-size: var(--size)px;
会解析成font-size: 20 px;注意此时“20”与“px”之间有个空格,导致该语句无效。单位应在定义时加上,如:
--size: 20px; font-size: val(--size);
检查浏览器支持
1.使用@supports方法
1 @supports ( (--size: 0)) {
2
3 /* 支持 */
4
5 }
6
7 @supports ( not (--size: 0)) {
8
9 /* 不支持 */
10
11 }
View Code
2.使用JavaScript
1 if(window.CSS && window.CSS.supports && window.CSS.supports('--size', 0)) {
2
3 /* 支持 */
4
5 }else{
6
7 /* 不支持 */
8
9 }
View Code
使用JavaScript操作原生属性变量
- window.getComputedStyle(element, '伪类'|null):[IE9+,Firefox,Chrome,Safari, Opera]获得当前元素最终使用的所有CSS属性值,返回一个只读CSS样式声明对象。
- window.getComputedStyle(element, '伪类'|null).getPropertyValue('propertyName')
- window.getComputedStyle(element, '伪类'|null).setProperty('propertyName', value)
1 var d1 = document.getElementById("d1"),
2 style1 = window.getComputedStyle(d1, ":after");
3
4 var d2 = document.getElementById("d2"),
5 style2 = window.getComputedStyle(d2, null);
6
7 var value = d1.getPropertyValue('--variableName');
View Code
浏览器兼容
参考文章: