AI智能
改变未来

CSS变量(CSS Variables)


概述

如果突然有一天,当你页面的主题色发生变化时,有许多元素的颜色要一起变化,这是你会考虑怎么做呢?使用Less/Sass/Stylus来定义一个颜色变量?还是专门去定义多了个类名来控制元素?

使用第一种方法,有他的弊端,浏览器无法识别CSS预处理器的语法,所以我们都会将Less/Sass/Stylus的文件编译成CSS文件,这样的话就无法再去修改CSS预处理器中变量的值了,因为我们的页面中根本没有Less等CSS预处理器文件

使用第二种方法,也有弊端,如果一个元素是字体颜色为blue,另一个元素是背景颜色为blue,那这时候就要取多个类名才能实现,这样太不方便了

说完了上面这两种方法的弊端,那我们就要介绍一下今天的主角:CSS变量(英文CSS Variables,官方取名为自定义属性或者级联变量)

 

一.什么是CSS变量

CSS 变量当前有两种形式

 

变量,就是拥有合法标识符和合法的值。可以被使用在任意的地方。可以使用var()函数使用变量。例如:var(–example-variable)会返回–example-variable所对应的值

 

自定义属性。这些属性使用–*where*的特殊格式作为名字。例如–example-variable: 20px;即使一个css声明语句。意思是将20px赋值给–example-varibale变量。

 

注意:

1.在之前的标准中,自定义属性以var-作为前缀,后来才改成–前缀。Firefox 31和以后的版本遵循新标准。

2.自定义属性和常规属性一样,作用在当前的层级,若没有定义,则从其父元素继承其值。

 

二.为什么要使用CSS变量

在构建大型站点时,作者通常会面对可维护性的挑战。在这些网页中,所使用的CSS 的数量是非常庞大的,并且在许多场合大量的信息会重复使用。例如,在网页中维护一个配色方案,意味着一些颜色在CSS文件中多次出现,并被重复使用。当你修改配色方案时,不论是调整某个颜色或完全修改整个配色,都会成为一个复杂的问题,不容出错,而单纯查找替换是远远不够的。

如果使用了CSS 框架,这种情况会变得尤其糟糕,此时如果要修改颜色,则需要对框架本身进行修改。在这些场合使用 LESS 或 Sass 类似的预处理器是非常有帮助的,但是这种通过添加额外步骤的方式,可能会增加系统的复杂性。CSS变量为我们带来一些预处理器的便利,并且不需要额外的编译。

这些变量的第二个优势就是名称本身就包含了语义的信息。CSS 文件变得易读和理解。main-text-color比文档中的#00ff00更容易理解,特别是同样的颜色出现在不同的文件中的时候。

三.怎么使用CSS变量

初始样式:

<style>

        #box1{

            width:200px;

            height: 200px;

            border: 1px solid;

            color:blue;

        }

        #box2{

            width:200px;

            height: 200px;

            border: 1px solid;

            background-color:blue;

            color:white;

        }

    </style>

 

 

 

 

 

 

 

 

 

页面结构:

<body>

    <div id=\”box1\”>

        这是box1

    </div>

    <div id=\”box2\”>

        这是box2

    </div>

</body>

 

 

 

 

 

 

页面效果:

1.定义CSS变量

这时候我们来定义一个CSS变量,变量值为blue

<style>

        :root{

            –global-color:blue;

        }

</style>

 

 

 

 

在style标签中首先声明一个全局伪元素:root,然后在内部声明变量名及其变量值

注意:变量名一定要–开头

 

到这里我们成功定义了CSS变量,接下来我们来看下如何使用CSS变量

 

2.使用CSS变量

我们使用上面定义的变量分别替换掉#box1元素的color属性的值和#box2元素的background-color属性的值

<style>

        :root{

            –global-color:blue;

        }

        #box1{

            width:200px;

            height: 200px;

            border: 1px solid;

            color:var(–global-color);

        }

        #box2{

            width:200px;

            height: 200px;

            border: 1px solid;

            background-color:var(–global-color);

            color:white;

        }

    </style>

 

 

 

 

 

 

 

 

 

 

 

使用起来虽然没有Less等CSS预处理器那么简单,但是还是比较方便的

语法:CSS属性名:var(CSS变量名)

注意:CSS变量名是包括了—的,千万别漏了

 

到这里我们已经看完了CSS变量的定义和使用,那接下来我们再来看看怎么修改CSS变量的值

 

3.修改CSS变量

在我们的页面中,如果想要动态修改CSS变量的值,我们需要借助到JavaScript来实现

<script>

            //找到html标签

            var htmlNode=document.documentElement;

            //将html标签(根标签)的CSS变量(–global-color)的值修改为red

            htmlNode.style.setProperty(\”–global-color\”, \”red\”);

</script>

 

 

 

 

 

修改前:

 

 

 

 

 

 

 

修改后:

 

 

 

 

 

 

 

此时我们可以很明显的看到html标签上多了一个标签属性style,内部是我们修改的CSS变量及其变量值,到这里就修改成功了

语法:DOM对象.style.setProperty(CSS变量名,修改后的CSS变量值)

注意:修改时不能使用(DOM对象.style[CSS变量名]=变量值)的语法进行修改,例如:htmlNode.style[\”–global-color\”]=\”red\”,此方法无效

 

4.读取CSS变量

在我们的JavaScript代码中,时常会需要去读取CSS变量的值,那我们来看下如何读取CSS变量的值

<script>

            //找到html标签

            var htmlNode=document.documentElement;

            //将html标签(根标签)的CSS变量(–global-color)的值修改为red

            htmlNode.style.setProperty(\”–global-color\”, \”red\”); 

 

            //读取html标签(根标签)的CSS变量(–global-color)的值,并在控制台中打印

            // var value=htmlNode.style.getPropertyValue(\’–global-color\’);

            var value=getComputedStyle(htmlNode)[\’–global-color\’];

            console.log(value) 

</script>

 

 

 

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » CSS变量(CSS Variables)