美文网首页互联网科技让前端飞网页前端后台技巧(CSS+HTML)
强大的CSS:var变量的局部作用域(继承)特性

强大的CSS:var变量的局部作用域(继承)特性

作者: 560b7bb7b879 | 来源:发表于2019-05-23 13:17 被阅读4次

一、CSS变量非全局

最近做项目,发现CSS变量一个有意思的特性,那就是变量作用域非全局。

举个例子,如下HTML和CSS:

<div class="box">
    <div class="a">测试a</div>
    <div class="b">测试b</div>
    <div class="c">测试c</div>
</div>

.box {
    --color: red;
    color: var(--color);
}
.a {
    --color: green;
    color: var(--color);
}
.b {
    --color: blue;
    color: var(--color);
}
.c {
    --color: yellow;
}

虽然整个CSS公用一个上下文文档,但是,对于CSS变量,却是有作用域概念的,变量只能作用于自身以及后代元素,兄弟元素,祖先元素都不能享用。

因此,这里最终的颜色是:绿、蓝和红。如下截图:


所以,如果你的变量是全局享用的,则建议放在:root上,例如:

:root {
    --color: red;
}

当然,也可以使用body或者html标签:

body {
    --color: red;
}

如果你的变量是局部享用的,则设置在模块盒子元素上即可。

.module {
    --color: red;
}

实际上,抛开变量这个词。我们可以理解为具有继承特性的自定义CSS属性。

二、CSS变量局部特性用途

由于CSS变量的局部作用特性,于是,我们可以放心大胆使用CSS变量给伪元素传参了。

例如,一个多图上传页面,有很多loading进度条,此时,就可以使用CSS变量将加载进度传给伪元素,这样,一个标签就能实现完整的进度效果了,代码简洁又高效,而在过去,我们一定要嵌套HTML标签才能实现。HTML代码如下:

<label>图片1:</label>
<div class="bar" style="--percent: 60;"></div>
<label>图片2:</label>
<div class="bar" style="--percent: 40;"></div>
<label>图片3:</label>
<div class="bar" style="--percent: 20;"></div>

我们只需要在style属性中更新当前上传进度变量就可以了。

然后,我们就可以把这个变量转换成我们需要的伪元素数值以及宽度大小,CSS代码如下:

.bar {
    height: 20px; width: 300px;
    background-color: #f5f5f5;
}
.bar::before {
    counter-reset: progress var(--percent);
    content: counter(progress) '%\2002';
    display: block;
    width: calc(300px * var(--percent) / 100);
    font-size: 12px;
    color: #fff;
    background-color: #2486ff;
    text-align: right;
    white-space: nowrap;
    overflow: hidden;
}


CSS边框数值可以记住counter计数器呈现,宽度则可以借助calc()转换成带px的值。其它一些实现细节不展开,有疑问可以评论,我会解答。最终实现的效果如下图所示:

CSS也越来越具有动态特性了。

自己是一个五年的前端工程师,希望本文对你有帮助!

这里推荐一下我的前端学习交流扣qun:731771211 ,里面都是学习前端的,如果你想制作酷炫的网页,想学习编程。自己整理了一份2019最全面前端学习资料,从最基础的HTML+CSS+JS【炫酷特效,游戏,插件封装,设计模式】到移动端HTML5的项目实战的学习资料都有整理,送给每一位前端小伙伴,每天分享技术

点击:加入

相关文章

  • 强大的CSS:var变量的局部作用域(继承)特性

    一、CSS变量非全局 最近做项目,发现CSS变量一个有意思的特性,那就是变量作用域非全局。 举个例子,如下HTML...

  • let const

    var let const var:是全局作用域 可以重复声明 let:局部变量(局部作用域) 在一个作用...

  • ES6笔记

    es6语法 块级作用域 let var 声明的变量没有局部作用域let 声明的变量有局部作用域 恒量 const ...

  • ECMAScript 中的 let 和var

    一:var声明的变量 全局作用域、局部作用域 var a = 1; //a为全局变量,可以在任何地方使用for...

  • js基础语法

    var 声明的变量往往会越域let 声明的变量有严格局部作用域 var 可以声明多次let 只能声明一次 var ...

  • ES6之let/const/var

    let与var let声明的变量有严格局部作用域,var会越域 let只能声明一次变量,var可以多次声明 let...

  • 深入理解JavaScript闭包

    作用域 变量加var修饰即为局部变量,否则为全局变量 和函数内部的作用域不同,语句块内的作用域相当于全局 函数内部...

  • JS高级知识点汇总

    1.作用域 局部作用域:函数内部就是局部作用域。 ①在局部作用域申明的变量称为局部变量,局部变量只能在当前函数内部...

  • Javascript作用域和作用域链

    作用域 你知道吗?在JavaScript中,用var申明的变量实际上是有作用域的。作用域分为全局作用域和局部作用域...

  • 函数问题

    变量的作用域 局部变量:定义位置在函数内部用var定义的变量,作用域是在定义的当前函数内部,只对当前函数有作用。注...

网友评论

    本文标题:强大的CSS:var变量的局部作用域(继承)特性

    本文链接:https://www.haomeiwen.com/subject/mahuzqtx.html