CSS变量variable

摘要:
新的草案发布之后,直接在CSS中定义和使用变量不再是幻想了。本文将详细介绍CSS变量variable基本用法CSS变量是由CSS作者定义的实体,其中包含要在整个文档中重复使用的特定值。例如:var会返回--example-variable所对应的值var()函数还有一个可选参数,用来设置默认值,当变量无法取得值时,则使用默认值继承和层叠和普通的样式属性一样,变量属性也支持继承和层叠。

前面的话

一直以来,CSS中是没有变量而言的,要使用 CSS 变量,只能借助 SASS 或者 LESS 这类预编译器。新的草案发布之后,直接在 CSS 中定义和使用变量不再是幻想了。本文将详细介绍CSS变量variable

基本用法

CSS 变量是由CSS作者定义的实体,其中包含要在整个文档中重复使用的特定值。使用自定义属性来设置变量名,并使用特定的var()来访问

兼容性:移动端和IE浏览器不兼容

【声明变量】

变量必须以--开头。例如--example-variable: 20px,意思是将20px赋值给--example-varibale变量

可以将声明变量的语句置于任何元素内,如果要设置全局变量,则可以设置为:root、body或html

:root{
  --bgColor:#000;
}

变量声明就像普通的样式声明语句一样,也可以使用内联样式

<body style="--bgColor:#000">

变量声明语句必须包含一个元素内,而不能随意放置

//错误
<style>
--bgColor:#000;
</style>

【使用变量】

使用var()函数使用变量,并且可以被使用在任意的地方。例如:var(--example-variable)会返回--example-variable所对应的值

<body style="--bgColor:#000;">
    <div style=" 100px;height: 100px;background-color: var(--bgColor)"></div>    
</body>

var()函数还有一个可选参数,用来设置默认值,当变量无法取得值时,则使用默认值

<body>
    <div style=" 100px;height: 100px;background-color: var(--bgColor,pink)"></div>    
</body>

继承和层叠

和普通的样式属性一样,变量属性也支持继承和层叠。下面示例中,body元素的变量值为green,div元素的变量值为red; 基于层叠的原理,最终div元素的背景颜色为红色

<body style="--bgColor:green;">
    <div style=" 100px;height: 100px;--bgColor: red;background-color: var(--bgColor,pink)"></div>    
</body>

组合和计算

【组合】

CSS 变量可以进行组合使用

<style>
.box{
    --top:20%;
    --left:30%;
    width:100px;
    height:100px;
    background-image:url(img/24/xiaoshu.jpg);
    background-position:var(--left)  var(--top);
}
</style>
<div class="box"></div>    

但是,CSS变量不能进行如下形式的组合,var(--color1)var(--color2)不被浏览器识别,如果分开,如var(--color1) var(--color2),则被解析为# 333,同样无法被浏览器识别

<style>
.box{
    --color1:#;
    --color2:333;
    width:100px;
    height:100px;
    background-color:var(--color1)var(--color2);
}
</style>
<div class="box"></div>    

【计算】

变量和普通样式值一样,除了组合,还可以使用calc进行计算

<style>
.box{
    --borderWidth:2px;
    width:100px;
    height:100px;
    background-color:lightblue;
    border-left:calc(var(--borderWidth) * 2) solid black;
}
</style>
<div class="box"></div>    

JS

CSS 变量可以和 JS 互相交互。要注意的是,只能使用getPropertyValue()和setProperty()方法,而不能使用style属性

【style属性】

<div id="box"style="--color:lightgreen;background-color: var(--color)"></div>    
<script>
  varoBox =document.getElementById('box');
  console.log(oBox.style['--color']);    //undefined
</script>

【getPropertyValue()】

<div id="box"style="--color:lightgreen;background-color: var(--color)"></div>    
<script>
  varoBox =document.getElementById('box');
  console.log(oBox.style.getPropertyValue('--color'));//'lightgreen'
</script>

【setProperty()】

<style>
#box{
    --color:lightgreen;
    background-color:var(--color);
    width:100px;
    height:100px;
    display:inline-block;
}
</style>
<button id="btn"type="button">变浅蓝</button>
<div id="box"></div>    
<script>
varoBox =document.getElementById('box');
varoBtn =document.getElementById('btn');
oBtn.onclick = function(){
    oBox.style.setProperty('--color','lightblue');
}
</script>

不支持

有一点要特别注意的是,变量不支持!important

.box{
    --color:red;
     100px;
    height: 100px;
    background-color:--color !important;
}
</style>
<div class="box"></div>    

chrome浏览器截图如下

CSS变量variable第1张

用途

1、可维护性

在网页中维护一个配色方案或尺寸方案,意味着一些样式在CSS文件中多次出现,并被重复使用。当修改方案时,不论是调整某个样式或完全修改整个方案,都会成为一个复杂的问题,而单纯查找替换是远远不够的,这时CSS变量就派上用场了

:root{
  --mainColor:#fc0;
}
.div1{
  color:var(--mainColor);
}
.div2{
  color:var(--mainColor);
}

2、语义化

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

3、更方便的实现@media媒体查询

一般地,媒体查询如下所示

<style>
.box{
    width:100px;
    height:100px;
    padding:20px;
    margin:10px;
    background-color:red
}
@media screen and (max-600px) {
    .box{
        width:50px;
        height:50px;
        padding:10px;
        margin:5px;        
    }
}
</style>
<div class="box"></div>    

但是,如果使用变量,则可以精简代码

<style>
.box{
    --base-size:10px;
    width:calc(var(--base-size) * 10);
    height:calc(var(--base-size) * 10);
    padding:calc(var(--base-size) * 2);
    margin:calc(var(--base-size) * 1);
    background-color:red;
}
@media screen and (max-600px) {
    .box{
        --base-size:5px;    
    }
}
</style>
<div class="box"></div>    

免责声明:文章转载自《CSS变量variable》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Sqlserver2008R2 数据库镜像配置步骤亚马逊EC2构建代理服务器心血历程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux下的crontab定时、执行任务命令详解 oracle 自动备份

在LINUX中,周期执行的任务一般由cron这个守护进程来处理[ps -ef|grep cron]。cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。cron的配置文件称为“crontab”,是“cron table”的简写。 一、cron服务  cron是一个linux下 的定时执行工具,可以在无需人工干预的情况下运行作业。  se...

SQL 存储过程入门(变量)

SQL 存储过程入门(变量)(二)上一篇我们讲到了SQL存储过程的基本定义,怎么创建,使用,这篇就来讲一下变量的使用。 变量分文局部变量和全局变量 局部变量是@开头,全局变量是@@开头,这里我们主要讲局部变量,全局变量我们后面再讲。 在c# 语言中,定义一个变量很简单,例如 int i=0; --定义加赋值。 在sql中,定义一个变量需要关键字DECLAR...

css3制作旋转动画

现在的css3真是强大,之前很多动画都是用jq来实现,但是css3制作的动画要比jq实现起来简单很多,今天呢,我自己也写了一个css旋转动画和大家分享。效果如下面的图片 思路:1.制作之前呢,我们先来整理一下思路,这个圆轴轨迹上一共有八个圆。 仔细看的话,你会发现一个规律,那就是一个月是360度的,里面放了八个圆,也就是每个圆都是占了45度,然后平均的...

第一节:Webpack简介、安装-配置-打包、常用loader的使用(css/style/less/postcss-loader)

一. 简介 1. Webpack背景  (1). 事实上随着前端的快速发展,目前前端的开发已经变的越来越复杂了:  A. 比如开发过程中我们需要通过模块化的方式来开发;  B. 比如也会使用一些高级的特性来加快我们的开发效率或者安全性,比如通过ES6+、TypeScript开发脚本逻辑, 通过sass、less等方式来编写css样式代码;  C. 比如开发...

linux下调试C程序

正文:==================GDB是一个强大的命令行调试工具。大家知道命令行的强大就是在于,其可以形成执行序列,形成脚本。UNIX下的软件全是命令行的,这给程序开发提代供了极大的便利,命令行软件的优势在于,它们可以非常容易的集成在一起,使用几个简单的已有工具的命令,就可以做出一个非常强大的功能。于是UNIX下的软件比Windows下的软件更能...

html页面格式化输出js对象

将js中的对象格式化,并打印在html中 functionwriteHtml(name,obj) { var objStr = JSON.stringify(obj, null, 4); var html = objStr.replace(/ /g, '<br>').replace(/s/g, '&nbsp');...