• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
  1. 1. 变量的继承性
  2. 2. 变量的备用值
  3. 3. JS中获取CSS变量
  4. 4. 变量值类型
  5. 5. 区分于编程语言中的变量
    1. 5.1. important
    2. 5.2. 属性的覆盖

原生CSS变量

2020-10-23 15:10:46
总字数 746
预计阅读时间 3 分钟

多数时候我们要在CSS当中使用变量,都是使用Less/Scss等预处理工具来实现
现在原生CSS也同样是支持变量功能的

1
2
3
4
5
6
:root {
--text-color: red;
}
.box {
color: var(--text-color);
}
  • :root - 这是一个CSS的伪类,匹配文档树的根元素
    对于html文档,当然就是html元素,除了优先级更高,与html选择器相同
  • 自定义变量以--作为开头
  • 自定义变量是大小写敏感的

使用自定义变量可以有效减少代码的冗余,方便页面风格的统一

变量的继承性

子元素当中引用变量,如果在当前元素没有定义这个变量的值,会追溯父元素
所以上面的例子当中,直接在根元素上定义的变量,是在各处都可以使用的。

1
2
3
4
5
6
7
8
9
10
.box1 {
--text-color: red;
}
.child1 {
color: var(--text-color);
}
.child2 {
--text-color: blue;
color: var(--text-color);
}

HTML结构

1
2
3
4
<div class="box1">
<div class="child1">这里是红色的文字</div>
<div class="child2">这里是蓝色的文字</div>
</div>

变量的备用值

var()本身是一个函数,用它来引用变量时,可以指定一个或多个备用值
如果该变量未定义,就逐个使用备用值

1
2
3
4
5
.child1 {
color: var(--text-color, green);
background-color: var(--bg-color2, var(--bg-color1, pink));
border-color: var(--bd-color1, --bd-color2, gray);
}

如果text-color变量未定义,那么就使用green值
var作为一个函数,也是支持嵌套的

如果所有值都无效(未定义或该值用在指定CSS属性上是无效的),会使用继承值或初始值代替

JS中获取CSS变量

1
2
3
4
5
const box = document.querySelector('.box1')
// 行内样式
let value1 = box.style.getPropertyValue('--text-color')
// 独立的CSS样式
let value2 = getComputedStyle(box).getPropertyValue('--text-color')

其实就是可以把这个变量当做一个CSS属性,获取的方式没有什么不同

变量值类型

如果变量值是数字,是无法与单位进行拼接的,需要使用calc函数

1
2
3
4
.box1 {
--box-width: 300;
width: calc(var(--box-width) * 1px);
}

区分于编程语言中的变量

原生CSS的变量,将其称为自定义属性更为合理
因为它和编程语言中的变量有很大不同
比如

important

1
2
3
4
5
6
7
8
9
10
.box1 {
--text-color: red !important;
color: var(--text-color);
color: blue;
}
.box2 {
--text-color: red !important;
--text-color: blue;
color: var(--text-color);
}

如果在变量上加!important,是作用在这个变量(自定义属性)上,而不属于变量的值
所以上述代码实际效果是box1是blue,box2是red

属性的覆盖

1
2
3
4
5
6
.box {
--s: 10px;
margin: var(--s);
--s: 20px;
padding: var(--s);
}

上述代码的实际效果,margin和padding都会是20px
因为后一次自定义属性的定义覆盖了第一次,与常规编程语言中的变量先定义后使用的逻辑不同

  • 前端
  • css
  • 前端杂烩

扫一扫,分享到微信

图片加载失败处理
CSS属性shape-outside 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆