css自定义变量语法--*

898 阅读3分钟

为什么想到要写这篇文章呢,今天在掘金上面看到老姚的沸点“使用渐变,一个div实现进度条”,仔细看了一下内容代码才发现在css中存在的自定义变量语法,自己一直没有用过,哈哈哈!

使用渐变,一个div实现进度条

首先我们亮出老姚的代码,使用渐变,一个div实现进度条

div {
    --c: #0ff;
    --p: 60%;
    height: 60px;
    background-color:silver;
    border-radius: 30px;
    background-image: radial-gradient(closest-side circle at var(--p), var(--c),var(--c) 100%,transparent),linear-gradient(var(--c), var(--c));
    background-size: 100%,var(--p);
    background-repeat: no-repeat;

}

可以看出我们可以直接修改变量--c来修改进度条的颜色,

css自定义变量语法--*

首先看一下css自定义变量的使用方法和场景

:root{
    --white-max: #fff; 
    --white-bright: #f5f5f5; 
    --white-light: #eee; 
    --white-dark: #ddd; 
}

.menu ul>li>a{
    color: var(--white-max);
    font-size: 1.1em;
    font-weight: bold;
}

.menu a:hover{
    color: var(--white-max);
}

:root
文档的根元素,这是一个放自定义属性的好地方,因为我们可以根据其他个别特别的样式的选择性来覆盖自定义属性;

var()

CSS中原生的变量定义语法是:--*,变量使用语法是:var(--*),其中*表示我们的变量名称。关于命名这个东西,各种语言都有些显示,例如CSS选择器不能是数字开头,JS中的变量是不能直接数值的,但是,在CSS变量中,这些限制通通没有。 不能包含$,[,^,(,%等字符,普通字符局限在只要是“数字[0-9]”“字母[a-zA-Z]”“下划线_”和“短横线-”这些组合,但是可以是中文,日文或者韩文

特点
  • 可以使用中文命名
:root{
  
  --白色: #fff
}
.header {
    color: var(--白色)
}
  • 可以使用数字命名
:root{
  
  --1: #fff
}
.header {
    color: var(--1)
}
  • 无论是变量的定义和使用只能在声明块{}里面
--白色: #fff;
body {
  background-color: var(--白色);
}
自定义变量权重问题
: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定义的变量,只有id为alert的元素才能享有。如果你想变量全局使用,则你可以设置在:root选择器上;
  2. 当存在多个同样名称的变量时候,变量的覆盖规则由CSS选择器的权重决定的,但并无!important这种用法,因为没有必要,!important设计初衷是干掉JS的style设置,但对于变量的定义则没有这样的需求。
CSS变量使用完整语法

CSS变量使用的完整语法为:var( [, ]? ),用中文表示就是:var( <自定义属性名> [, <默认值 ]? )。 意思就是,如果我们使用的变量没有定义(注意,仅限于没有定义),则使用后面的值作为元素的属性值。举个例子:

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

此时body的背景颜色是#cd0000;因为--1没有定义,如果要使用#369,我们可以把--1定义在:root中。

文末看一个例子:

header {
  --color: 20px;
  background-color: #999;
  background-color: var(--color, #cd0000);
}

请问,此时

的背景色是?

A. transparent B. 20px C. #369 D. #cd0000 留言写下你的答案吧。