返回顶部
首页 > 资讯 > 前端开发 > JavaScript >CSS3的变量var怎么用
  • 211
分享到

CSS3的变量var怎么用

2024-04-02 19:04:59 211人浏览 薄情痞子
摘要

这篇“css3的变量var怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“CSS3的变

这篇“css3的变量var怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“CSS3的变量var怎么用”文章吧。

一、变量是个好东西

在任何语言中,变量的有一点作用都是一样的,那就是可以降低维护成本,附带还有更高性能,文件更高压缩率的好处。

随着CSS预编译工具Sass/Less/Stylus的关注和逐渐流行,CSS工作组迅速跟进CSS变量的规范制定,并且,很多浏览器已经跟进,目前,在部分项目中已经可以直接使用了。

CSS3的变量var怎么用

Chrome/Firefox/Safari浏览器都是绿油油的,兼容性大大超出我的预期,于是果断尝鲜记录下语法用法和特性。

二、CSS变量var()语法和用法和特性

CSS中原生的变量定义语法是:--*,变量使用语法是:var(--*),其中*表示我们的变量名称。关于命名这个东西,各种语言都有些显示,例如CSS选择器不能是数字开头,js中的变量是不能直接数值的,但是,在CSS变量中,这些限制通通没有,例如:

:root {
  --1: #369;
}
body {
  background-color: var(--1);
}

结果背景色如下:
CSS3的变量var怎么用

但是,不能包含$[^(%等字符,普通字符局限在只要是“数字[0-9]”“字母[a-zA-Z]”“下划线_”和“短横线-”这些组合,但是可以是中文,日文或者韩文,例如:

body {
  --深蓝: #369;
  background-color: var(--深蓝);
}

所以,我们就可以直接使用中文名称作为变量,即使英语4级没过的小伙伴也不会有压力了,我们也不需要随时挂个翻译器在身边了。

无论是变量的定义和使用只能在声明块{}里面,例如,下面这样是无效的:

--深蓝: #369;
body {
  background-color: var(--深蓝);
}

变量的定义,或者说声明跟CSS计数器的声明类似的,你应该摆脱Sass/Less等预编译工具语法先入为主的语法影响,把CSS的原生变量理解为一种CSS属性。

这样,你就对其权重和变量应用规则要容易理解地多。

例如下面这个例子:

:root { --color: purple; }div { --color: green; }#alert { --color: red; }* { color: var(--color); }<p>我的紫色继承于根元素</p>
<div>我的绿色来自直接设置</div>
<div id='alert'>  ID选择器权重更高,因此阿拉是红色!
  <p>我也是红色,占了继承的光</p>
</div>

上面这个例子我们可以获得这些信息:

  1. 变量也是跟着CSS选择器走的,如果变量所在的选择器和使用变量的元素没有交集,是没有效果的。例如#alert定义的变量,只有idalert的元素才能享有。如果你想变量全局使用,则你可以设置在:root选择器上;

  2. 当存在多个同样名称的变量时候,变量的覆盖规则由CSS选择器的权重决定的,但并无!important这种用法,因为没有必要,!important设计初衷是干掉JS的style设置,但对于变量的定义则没有这样的需求。

CSS属性名可以走变量吗?

类似下面这样:

body {
    --bc: background-color;    
    var(--bc): #369;
}

答案是“不可以”,要是可以支持的话,那CSS的压缩可就要逆天了,估计所有的属性都会变成1~2个字符。

CSS变量支持同时多个声明吗?

类似下面这样:
&hellip;
不好意思,类似不了,语法上就根本不支持。

CSS变量使用完整语法
CSS变量使用的完整语法为:var( [, ]? ),用中文表示就是:var( <自定义属性名> [, <默认值 ]? )

意思就是,如果我们使用的变量没有定义(注意,仅限于没有定义),则使用后面的值作为元素的属性值。举个例子:

.box {
  --1: #369;
}
body {
  background-color: var(--1, #cd0000);
}

则此时的背景色是#cd0000
CSS3的变量var怎么用

CSS变量不合法的缺省特性

请看下面这个例子:

body {
  --color: 20px;
  background-color: #369;
  background-color: var(--color, #cd0000);
}

请问,此时<body>的背景色是?

A. transparent    B. 20px     C. #369      D. #cd0000

答案是&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;&hellip;A. transparent

不知大家答对了没有!

这是CSS变量非常有意思的一个点,对于CSS变量,只要语法是正确的,就算变量里面的值是个乱七八糟的东西,也是会作为正常的声明解析,如果发现变量值是不合法的,例如上面背景色显然不能是20px,则使用背景色的缺省值,也就是默认值代替,于是,上面CSS等同于:
body {
--color: 20px;
background-color: #369;
background-color: transparent;
}

千万不能想当然得认为等同于background-color:20px,这也是为什么上面要强调CSS默认值的使用仅限于变量未定义的情况,并不包括变量不合法。

CSS变量的空格尾随特性

请看下面这个例子:

body {
  --size: 20;   
  font-size: var(--size)px;
}

请问,此时<body>font-size大小是多少?

如果你以为是20px就太天真了,实际上,此处font-size:var(--size)px等同于font-size:20 px,注意,20后面有个空格,所以,这里的font-size使用的是<body>元素默认的大小。因此,就不要妄图取消就使用一个数值来贯穿全场,还是使用稳妥的做法:

body {
  --size: 20px;   
  font-size: var(--size);
}

或者使用CSS3 calc()计算:

body {
  --size: 20;   
  font-size: calc(var(--size) * 1px);
}

此时,<body>font-size大小才是20px

CSS变量的相互传递特性

就是说,我们在CSS变量定义的时候可以直接引入其他变量给自己使用,例如:

body {
  --green: #4CAF50;   
  --backgroundColor: var(--green);
}

或者更复杂的使用CSS3 calc()计算,例如:

body {
  --columns: 4;
  --margins: calc(24px / var(--columns));
}

对于复杂布局,CSS变量的这种相互传递和直接引用特性可以简化我们的代码和实现成本,尤其和动态布局在一起的时候,无论是CSS的响应式后者是JS驱动的布局变化。

我们来看一个CSS变量与响应式布局的例子,您可以狠狠地点击这里:CSS变量与响应式布局实例demo

默认进去是4栏,如下图:
CSS3的变量var怎么用

随着浏览器宽度减小,4栏可能就变成3栏,2栏甚至1栏,我们实际开发的时候,显然不仅仅是栏目数量变化,宽度小,往往意味着访问设备尺寸有限,此时我们往往会缩小空白间距以及文字字号大小,这样,有限屏幕才能显示更多内容。

也就是说,当我们响应式变化的时候,改变的CSS属性值不是1个,而是3个或者更多,如果我们有3个响应点,是不是就至少需要9个CSS声明?但是,由于我们有了CSS变量,同时,CSS变量可以传递,当我们遭遇响应点的时候,我们只需要改变一个CSS属性值就可以了。

下面就是本demo核心CSS代码(只需要改变--columns这一个变量即可):

.box {
    --columns: 4;
    --margins: calc(24px / var(--columns));
    --space: calc(4px * var(--columns));
    --fontSize: calc(20px - 4 / var(--columns));
}
@media screen and (max-width: 1200px) {
    .box {
        --columns: 3;
    }
}
@media screen and (max-width: 900px) {
    .box {
        --columns: 2;
    }
}
@media screen and (max-width: 600px) {
    .box {
        --columns: 1;
    }
}

于是,我们在2栏下的效果就是这样,字号,间距随着栏目数量的减小也一并减小了,然后每栏之间间距是扩大了:
CSS3的变量var怎么用

以上就是关于“CSS3的变量var怎么用”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网JavaScript频道。

--结束END--

本文标题: CSS3的变量var怎么用

本文链接: https://lsjlt.com/news/92350.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • CSS3的变量var怎么用
    这篇“CSS3的变量var怎么用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“CSS3的变...
    99+
    2024-04-02
  • 怎么在HTML标签和JS中设置CSS3 var变量
    这篇“怎么在HTML标签和JS中设置CSS3 var变量”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起...
    99+
    2024-04-02
  • es6中怎么用关键字var声明变量
    这篇文章将为大家详细讲解有关es6中怎么用关键字var声明变量,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。用关键字var声明变量var a ;  /...
    99+
    2024-04-02
  • javascript使用var声明变量的问题怎么解决
    这篇文章主要介绍了javascript使用var声明变量的问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇javascript使用var声明变量的问题怎么解决文章都会...
    99+
    2024-04-02
  • JavaScript变量or循环中的var和let怎么使用
    这篇“JavaScript变量or循环中的var和let怎么使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面...
    99+
    2024-04-02
  • css里能不能用var变量
    本篇内容主要讲解“css里能不能用var变量”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“css里能不能用var变量”吧! css里...
    99+
    2024-04-02
  • var在for循环变量泄漏为全局变量怎么解决
    这篇文章主要介绍“var在for循环变量泄漏为全局变量怎么解决”,在日常操作中,相信很多人在var在for循环变量泄漏为全局变量怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”var在for循环变量泄漏...
    99+
    2023-06-20
  • 如何在CSS中使用 var()变量
    今天就跟大家聊聊有关如何在CSS中使用 var()变量,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。定义和使用CSS变量与任何其他CSS定义一样,变量遵循相同的范围和继承规则。使用它...
    99+
    2023-06-08
  • JS变量中有var定义和无var定义的区别
    这篇文章主要讲解了“JS变量中有var定义和无var定义的区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JS变量中有var定义和无var定义的区别”吧!...
    99+
    2024-04-02
  • es6中能不能用var声明变量
    这篇文章主要讲解了“es6中能不能用var声明变量”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“es6中能不能用var声明变量”吧! ...
    99+
    2024-04-02
  • javascript变量声明是否必须用var
    这篇文章将为大家详细讲解有关javascript变量声明是否必须用var,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。javascript中,变量声明不是必须用var,还...
    99+
    2024-04-02
  • javascript 变量声明 var,let,const 的区别
    目录作用域(Scope)是什么var 声明提升(Hoisting)let 声明const 声明作用域(Scope)是什么 作用域是程序的执行环境,它包含在当前位置可访问的变量和函数。...
    99+
    2024-04-02
  • JavaScript变量中var,let和const的区别
    目录前言ES5与ES6的区别1. 作用域2. 全局属性3. 变量提升与暂时性死区4. 重复声明let与const的区别1. 常量最佳实践前言 JavaScript中一共有3种用来声明...
    99+
    2024-04-02
  • JavaScript变量声明的var、let、const详解
    目录前言内容JavaScript的变量声明var的变量声明变量声明在函数作用域中变量重复声明变量声明提升怪异危险的varlet和const的变量声明块级作用域不可重复声明暂时性死区使...
    99+
    2024-04-02
  • javascript声明变量不用var的方法有哪些
    本篇内容主要讲解“javascript声明变量不用var的方法有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“javascript声明变量不用var的方法有...
    99+
    2024-04-02
  • javascript变量声明var,let,const的区别是什么
    本文小编为大家详细介绍“javascript变量声明var,let,const的区别是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“javascript变量声明var,let,const的区别是什么”文章能帮助大家解决疑惑,下面跟着小...
    99+
    2023-06-30
  • css3渐变色怎么用
    小编给大家分享一下css3渐变色怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!CSS3 渐变(gradients)可以让你...
    99+
    2024-04-02
  • JavaScript变量or循环中的var和let详解
    目录在for循环中使用var声明初始化带来的问题解决方法使用闭包使用let变量初始化for循环怎么处理用let和var声明的初始化变量?总结在for循环中使用var声明初始化带来的问...
    99+
    2024-04-02
  • JavaScript声明变量的这四兄弟(var、let、function、const)
    四兄弟的背景 在一个名为编程语言的村庄里,有不同姓氏的村民。例如Java、Python、Golang、JavaScript等姓氏,而接下来要介绍的就是JavaScript这个姓氏的一...
    99+
    2023-02-13
    JavaScript声明变量 js声明变量
  • 深入了解JavaScript中let/var/function的变量提升
    目录前言1. let存在提升2. var/function的变量提升2.1 var的变量提升2.2 function的变量提升3. 总结前言 在我们的印象中,当提到JavaScrip...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作