CSS Variable变量(Css自定义属性)
前端印记
共 5917字,需浏览 12分钟
· 2021-10-25
var 变量
小知识点
变量声明:--color
变量命名:变量名可以是数字、字母、下划线、中横线、中文
变量赋值:--color: red; --color1: #def;
变量获取:color: var(--color);
默认值:var(变量名, 可选的默认值1, 可选的默认值2...)
,如果引用的变量没有定义,则按默认值的顺序依次取默认值进行使用。默认值比较适合calc
计算时,万一计算结果非法,可以用默认值。
变量取值:颜色值、字符串、多个值的组合、函数等。注意,带单位的值和颜色值不用加引号包成字符串,示例:--borderC: green;--fontSize: 12px;
变量值不合法:使用默认值。比如var(--color, red);
中,--color 值如果非法,不会使用 red,而是使用样式表中继承的/默认的样式值来代替
权重层级:遵循 css 选择器的权重等级,比如:内联样式 > id > class > 标签 > *
作用域:
如下几条规则
-
放在 :root
根选择器的变量,所有选择器里都能用; -
放在私有选择器的只能自己及下级使用。类似函数作用域的规律。 -
结合 sass
、less
等预处理器的选择器嵌套功能使用时,父作用域的变量子作用域也可以用。 -
结合 @media
实现响应式变化不同作用域的变量值
<style>
:root {
/* 全局作用域的变量 */
--color: blue;
--borderC: green;
--变量名: '变量名可以是数字、字母、下换线、中横线、中文';
}
div {
--color: pink;
}
div.father {
/* 私有作用域 */
--color: red;
color: var(--color);
position: relative;
transition: color 0.3s ease-in-out;
}
div.father::after {
content: var(--变量名);
color: var(--color);
border: 1px solid var(--borderC);
transition: color 0.3s ease-in-out;
}
div.father .child {
--color: rgb(255, 60, 190);
color: var(--color);
}
/* 结合`@media`实现响应式变化不同作用域的变量值 */
@media screen and (min-width: 768px) {
:root {
--color: orange;
}
div.father {
--color: black;
}
}
/* 兼容性判断 - css */
@supports ((--color: 0)) {
div.father::before {
content: '当前浏览器支持css variables';
color: red;
border: 3px lodash var(--borderC);
}
}
@supports (not (--color: 0)) {
div.father::before {
content: '不支持';
color: var(--color);
border: 3px lodash var(--borderC);
}
}
</style>
<div class="father" id="father">
用变量修改颜色值
<span class="child"> 子作用域 </span>
</div>
<button id="getBtn">获取css var变量值</button>
<button id="setBtn">设置css var变量值</button>
<button id="deleteBtn">删除css var变量值</button>
兼容性
各浏览器兼容情况:https://caniuse.com/?search=css%20var
兼容性判断
/* 兼容性判断 - css */
@supports ((--color: 0)) {
div.father::before {
content: '当前浏览器支持css variables';
}
}
@supports (not (--color: 0)) {
div.father::before {
content: '不支持';
}
}
(() => {
console.log('当前页面是否支持Css变量', window.CSS.supports('--color', 0))
})()
JS 操作 CSS 变量
var root = getComputedStyle(document.documentElement);
var divFather = getComputedStyle(father);
console.log(root, divFather)
// 读取 变量值
getBtn.onclick = () => {
var var1 = root.getPropertyValue('--color').trim();
console.log(var1);
}
// 新增 / 修改变量值
setBtn.onclick = () => {
father.style.setProperty('--color', '#111def');
var var2 = divFather.getPropertyValue('--color').trim();
console.log(var2);
}
// 删除 变量值
deleteBtn.onclick = () => {
father.style.removeProperty('--color');
var var3 = divFather.getPropertyValue('--color').trim();
console.log(var3);
}
优势
-
含有作用域、能继承、能组合calc、@media等特性使用 -
实时计算、运行时、动态 -
可交互(配合js) -
可配合预处理器使用(sass、less等)
劣势
-
低版本浏览器兼容性考虑
让我们一起携手同走前端路!
关注公众号回复【加群】即可
评论
【第128期】提升编程效率VSCode变量命名插件推荐
概述 在编程的世界里,一个好的变量名不仅能够提升代码的可读性,还能反映出程序员的专业水平。Visual Studio Code(VSCode)作为一个广受欢迎的代码编辑器,拥有丰富的插件生态系统,其中不乏能够帮助我们高效命名变量的工具。今天,我们就来介绍几款VSCode上能够提升变量命名效率的插件
前端微服务
0
chatgpt实现NLP基本任务(实体识别、关系抽取、属性抽取、事件抽取、文本分类)
向AI转型的程序员都关注了这个号👇👇👇基础函数一、实体识别抽取文本:驻港部队从1993年初开始组建,1996年1月28日组建完毕,1997年7月1日0时进驻香港,取代驻港英军接管香港防务,驻港军费均由中央人民政府负担。《中华人民共和国香港特别行政区驻军法》规定了驻香港部队的职责为防备和抵抗侵略,保卫
机器学习AI算法工程
10
8则实用的纯CSS布局排版技巧 | 网易4年实践
「链接和长图失效,请大家点击阅读原文查看详情」前言开发每一张网页都离不开布局排版,基于良好布局排版打下基础,才能使后续的开发更顺利。当然不能停留在IExplorer时代那种局限思维上,没办法解决的布局排版都用JS实现😂。今时不同往日,现代CSS属性能更好地快速实现各种布局排版,节约更多时间去摸鱼😉。
前端迷
10
mica-mqtt 2.2.12 发布,简化 MqttClientTemplate 构造,方便自定义
一、简介mica-mqtt 基于 java aio 实现的简单、低延迟、高性能 的 mqtt 物联网开源组件。mica-mqtt 更加易于集成到已有服务和二次开发,降低自研物联网平台开发成本。二、功能支持 MQTT v3.1、v3.1.1 以及 v5.0 协议。支持 websocket mqtt 子
JAVA架构日记
0
【CSS】2018- 不一样的SVG!SVG在 CSS 中的应用
介绍一些你可能没用过的SVG小技巧。在平时开发中,很多时候都会用到SVG。大部分情况我们都不必关注SVG里面到底是什么,直接当成图片资源引入就行,比如常见的图标资源我们可以通过多种方式使用这个特殊的图片<img src="a.svg">.icon{ background: url("a
前端自习课
96
【每日一练】306—HTML、CSS和JS实现一款简易风时钟效果
作者 | 杨小爱 写在前面 关于时钟的效果,我们前面刚刚写过一期,《【每日一练】304—用 HTML、CSS和JavaScript 实现一款时钟效果》那是一个圆形钟表的效果,今天我们再来写一款,这个风格比较简易,就是纯数字时钟,...
web前端开发
0
【CSS】1995- 15个CSS 常见错误,请一定要注意避免
在不断发展的 Web 开发领域,掌握 CSS(层叠样式表)对于制作视觉上令人惊叹且响应迅速的网站至关重要。 然而,陷阱比比皆是,即使是经验丰富的开发人员也可能会发现自己陷入了常见的 CSS 错误中。 本文剖析了 15 个...
前端自习课
0
object-fit CSS 属性
object-fit CSS 属性指定可替换元素(例如:<img> 或 <video>)的内容应该如何适应到其使用高度和宽度确定的框。<div class="box"> <img class="pic" src="https://interactive-exam...
前端精髓
0