CSS变量(CSS Variables/Custom Properties)
(1)变量属性的定义
在一个类选择器下,使用”–”加上变量名,就可以定义一个CSS变量属性。
.container{
--mainColor: #dd3333;
--mainBgColor: #eeeeee;
--mainLightColor: #ffffff;
--mainFontColor: #444444;
--mainBorder: 1px solid #dddddd;
--mainBlankSize: 5px;
}
(2)CSS变量的使用
使用CSS变量只需要在属性值中使用val()函数把变量名传入即可。
.container p{
color: var(--mainFontColor);
margin: var(--mainBlankSize);
}
.container section{
border: var(--mainBorder);
}
变量作用域及变量继承
CSS变量有作用域范围的概念,上面的例子中,CSS变量是定义在类选择器.container中的,所以,作用域范围仅限》于.container》这个类下面的标签。如果要创建全局的CSS变量,可以使用关键字“:root”,在“:root”下创建的CSS变量将可应用到全局中。如:
:root{
--mainColor: #dd3333;
--mainBgColor: #eeeeee;
--mainLightColor: #ffffff;
--mainFontColor: #444444;
--mainBorder: 1px solid #dddddd;
--mainBlankSize: 5px;
}
另外,CSS变量也有变量继承的概念,在一个父类中创建的变量作用域,在其子类中如果有创建相同名称的变量,则在子类选择器下,子类的变量会覆盖父类的变量,因此会以子类创建的CSS变量为准;如果子类中没有相同的变量,则会继承父类的变量设置。如:
<div class="container">
<h2>CSS Variables</h2>
<div class="box1">
<p>这是内容1</p>
</div>
<div class="box2">
<p>这是内容2</p>
</div
:root{
--mainColor: #dd3333;
--mainBgColor: #eeeeee;
--mainLightColor: #ffffff;
--mainFontColor: #444444;
--mainBorder: 1px solid #dddddd;
--mainBlankSize: 5px;
}
.container{
color: var(--mainFontColor);
}
.box1{
--mainFontColor: #dd3333;
}
.box1 p, .box2 p{
color: var(--mainFontColor);
}
上面的例子中,h2标签的文本和box2下面文本颜色都是#444444,因为它们都继承了全局:root的变量属性,而box1下自定义了相同名称的变量属性,覆盖了全局变量属性,因此,box1下的文本颜色将是#dd3333。
默认参数(样式)
上面在提到使用CSS变量的时候是使用var()函数,在使用var()函数获取变量属性值的时候,也可以传递一个参数,当获取的变量属性值不存在的时候,则将CSS样式设置为这个会传入的属性值。如我们在上面的例子中稍微改一下(只改变box1和box2的样式设置):
.box1 p{
color: var(--mainFontColor);
}
.box2 p{
color: var(--boxFontColor, #0a8acd);
}
使用实例
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>CSS Variables</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<s tyle>
*{margin: 0; padding: 0; box-sizing: border-box;}
h1{text-align: center;}
section{
width: 80%;
margin: 10px auto;
padding: var(--mainBlankSize);
min-height: 100px;
}
.container{
}
/*全局变量作用域*/
:root{
--mainColor: #dd3333;
--mainBgColor: #eeeeee;
--mainLightColor: #ffffff;
--mainFontColor: #444444;
--mainBorder: 1px solid #dddddd;
--mainBlankSize: 5px;
}
/*局部变量作用域*/
.greenTheme{
--themeColor: #75af11;
border: var(--mainBorder);
border-color: var(--themeColor);
--mainFontColor: #0a0acd;
}
.blueTheme{
--themeColor: #0a8acd;
border: var(--mainBorder);
border-color: var(--themeColor);
}
section h2{
text-align: center;
border-bottom: 1px solid var(--mainColor);
color: var(--mainFontColor);
}
section h2 span{
display: inline-block;
background-color: var(--themeColor);
color: var(--mainLightColor);
padding: 0 var(--mainBlankSize);
}
section p{
color: var(--sectionColor, #8e1296);
}
</style>
</head>
<body>
<h1>CSS Variables</h1>
<div class="container">
<section class="greenTheme">
<h2><span>绿色</span>内容区域</h2>
<p class="">内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容</p>
<div>
<h3>一些其他的东西</h3>
</div>
</section>
<section class="blueTheme">
<h2><span>蓝色</span>内容区域</h2>
<p class="">内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容</p>
</section>
</div>
</body>
</html>