相信你们都用过CSS预处理,好比,less、scss(sass)。不可避免的会用到变量。 在less
中是以 @ 定义变量; 在scss
中是以 $定义变量; 而后在css
中,也有变量,以-- 定义变量(两根连线词)javascript
--variableName: variableValue;
复制代码
variableName
表示自定义变量名,variableValue
表示属性值。css
{}
里面:roothtml
:root{
--color: red;
}
复制代码
html{
--html: red;
}
body{
--body: blue;
}
div{
--color1: green;
}
.div{
--div: 20px;
}
#div{
--line_height: 20px;
}
复制代码
在html元素里面的定义,当定义在html、body中的时候也是能够当成全局使用的java
body{
--1: red; /*数字*/
--background-color: blue; /*字母加-*/
--font_size: 20px;/*字母加_*/
--宽度: 100px;/*中文*/
--width: 100px; /*字母*/
}
复制代码
cssPropertyName: var(--variableName [, declarationValue]);
复制代码
var()
会返回--variableName
的值,declarationValue
表示默认值,也就是当--variableName
没有定义的时候,取declarationValue
的值。浏览器
使用上面示例的代码sass
.div{
width: var(--宽度)
}
.p1{
font-size: var(--font_size)
}
.colora{
color: var(--1)
}
.clac-width{
width: calc(100% - var(--width));
}
.no-two-params{
color: var(--nocolor, red)
}
复制代码
:root{
--text1: 'world';
--text2: 'hello 'var(--text1);
}
.div3:after{
content: var(--text2)
}
复制代码
:root{
--num: 30;
}
.div3{
font-size: var(--num)px; /*无效*/
font-size: var(--num) + px; /*无效*/
font-size: var(--num) + 'px'; /*无效*/
font-size: calc(var(--num) * 1px); /*有效*/
}
复制代码
变量值带有单位,就不能写成字符串。markdown
/* 无效 */
.foo {
--foo: '20px';
font-size: var(--foo);
}
/* 有效 */
.foo {
--foo: 20px;
font-size: var(--foo);
}
复制代码
同一个 CSS 变量,能够在多个选择器内声明。读取的时候,优先级最高的声明生效。这与 CSS 的"层叠"(cascade)规则是一致的。less
<style> * { color: var(--color); } :root { --color: blue; } div { --color: green; } #alert { --color: red; } </style>
<p>蓝色</p>
<div>绿色</div>
<div id="alert">红色</div>
复制代码
@supports ( (--size: 0)) {
/* 支持 */
}
@supports ( not (--size: 0)) {
/* 不支持 */
}
复制代码
if(window.CSS && window.CSS.supports && window.CSS.supports('--size', 0)) {
/* 支持 */
}else{
/* 不支持 */
}
复制代码
// 设置变量
document.body.style.setProperty('--primary', '#7F583F');
// 读取变量
document.body.style.getPropertyValue('--primary').trim();
// '#7F583F'
// 删除变量
document.body.style.removeProperty('--primary');
复制代码