CSS变量variable

前面的话

  一直以来,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="width: 100px;height: 100px;background-color: var(--bgColor)"></div>
</body>

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

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

继承和层叠

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

<body style="--bgColor:green;">
    <div style="width: 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>
  var oBox = document.getElementById(‘box‘);
  console.log(oBox.style[‘--color‘]);    //undefined
</script>

【getPropertyValue()】

<div id="box" style="--color:lightgreen;background-color: var(--color)"></div>
<script>
  var oBox = 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>
var oBox = document.getElementById(‘box‘);
var oBtn = document.getElementById(‘btn‘);
oBtn.onclick = function(){
    oBox.style.setProperty(‘--color‘,‘lightblue‘);
}
</script>

不支持

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

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

  chrome浏览器截图如下

用途

  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-width: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-width:600px) {
    .box{
        --base-size:5px;
    }
}
</style>
<div class="box"></div>    
时间: 2024-10-17 02:14:40

CSS变量variable的相关文章

引人瞩目的 CSS 变量(CSS Variable)

这是一个令人激动的革新. CSS 变量,顾名思义,也就是由网页的作者或用户定义的实体,用来指定文档中的特定变量. 更准确的说法,应该称之为 CSS 自定义属性 ,不过下文为了好理解都称之为 CSS 变量. 一直以来我们都知道,CSS 中是没有变量而言的,要使用 CSS 变量,只能借助 SASS 或者 LESS 这类预编译器. 但是新的草案发布之后,直接在 CSS 中定义和使用变量已经不再是幻想了,像下面这样,看个简单的例子: // 声明一个变量: :root{ --bgColor:#000; }

CSS变量(CSS variable)

使用 CSS 变量编写你的样式代码 基本使用: 1. --variable: <declaration-value> 2. <css-attribute>: var(--variable) 第一个是定义 css 变量 其中 --variable 可以是自定义的名称,但是必须 -- 开头,冒号后面是变量的值(变量:值) 第二个是在选择器中使用一开始定义好的 css 变量,使用方式就和正常写样式一样,只是将你的对应属性的值替换成了 var(css变量) 相信你已经看出来了,这个特性和使

CSS 变量教程(转载)

作者: 阮一峰 日期: 2017年5月 9日 今年三月,微软宣布 Edge 浏览器将支持 CSS 变量. 这个重要的 CSS 新功能,所有主要浏览器已经都支持了.本文全面介绍如何使用它,你会发现原生 CSS 从此变得异常强大. 一.变量的声明 声明变量的时候,变量名前面要加两根连词线(--). body { --foo: #7F583F; --bar: #F7EFD2; } 上面代码中,body选择器里面声明了两个变量:--foo和--bar. 它们与color.font-size等正式属性没有

CSS 变量教程

一.变量的声明 声明变量的时候,变量名前面要加两根连词线(--). body { --foo: #7F583F; --bar: #F7EFD2; } 上面代码中,body选择器里面声明了两个变量:--foo和--bar. 它们与color.font-size等正式属性没有什么不同,只是没有默认含义.所以 CSS 变量(CSS variable)又叫做"CSS 自定义属性"(CSS custom properties).因为变量与自定义的 CSS 属性其实是一回事. 你可能会问,为什么选

css变量

一.变量的声明及使用 声明声明,在变量名前加 --: 变量的使用,用var()调用: :root{   --myColor: deepskyblue;}body{   background: var(--myColor);} 上面伪类root中定义了变量--myColor,它与正式属性没有什么不同,所以 CSS 变量(CSS variable)又叫做"CSS 自定义属性"(CSS custom properties). 把css变量直接看成属性就行,更好理解. CSS变量使用完整语法

css变量保存

今年三月,微软宣布 Edge 浏览器将支持 CSS 变量. 这个重要的 CSS 新功能,所有主要浏览器已经都支持了.本文全面介绍如何使用它,你会发现原生 CSS 从此变得异常强大. 一.变量的声明 声明变量的时候,变量名前面要加两根连词线(--). body { --foo: #7F583F; --bar: #F7EFD2; } 上面代码中,body选择器里面声明了两个变量:--foo和--bar. 它们与color.font-size等正式属性没有什么不同,只是没有默认含义.所以 CSS 变量

实现响应式——CSS变量

CSS 变量是 CSS 引入的一个新特性,目前绝大多数浏览器已经支持了,它可以帮助我们用更少的代码写出同样多的样式,大大提高了工作效率,本篇文章将教你如何使用 CSS 变量(css variable). CSS中原生的变量定义语法是:--*,变量使用语法是:var(--*),其中*表示变量名称 变量声明 使用 :root 来声明 css 变量,root 相当于根元素 html,例如声明一个背景颜色为红色的 red 变量,示例如下 :root{    --red: #f00;} 如何应用这个变量呢

【译】巧用 CSS 变量实现自动前缀

转https://www.h5jun.com/post/autoprefixing-with-css-variables-lea-verou.html 最近,当我在制作 markapp.io 这个小网站的时候,我想出一个巧妙的技巧用在 CSS 变量上,我们可以天然地使用它们的动态本质.让我们看一下当你想使用一个属性,但是这个属性有不同的版本,一个无前缀的标准版和一个或多个有前缀的版本的情形.在这里我举一个例子,比如我们使用clip-path,目前需要同时使用无前缀的版本和一个-webkit-前缀

CSS变量试玩儿

CSS很美妙,能够为您的页面床上衣裳,各种各样五彩斑斓的衣裳,但是对于开发者来说,他又不够灵动,于是乎有了各种各样的预处理器Sass.LESS.Stylus(笔者建议Sass的SCSS语法),这些预处理器可以很大程度的提高CSS的灵活性,增强CSS的代码组织与维护.但是毕竟不是亲生的,然后负责CSS开发的那些大牛们坐不住了,开始给CSS赋予一些新的特性,本文就来探讨下CSS变量的进展与应用. W3C的关于CSS变量的最新探索体现在CSS Custom Properties for Cascadi