var()

版本: CSS3

var()函数可以代替元素中任何属性中的值的任何部分。var()函数不能作为属性名、选择器或者其他除了属性值之外的值。(这样做通常会产生无效的语法或者一个没有关联到变量的值。)

CSS变量

CSS 自定义属性(也被称为 CSS 变量),目前从 Can I use 上获取的信息显示除了 Edge外主流浏览器的最新版都已经支持这个特性了,而 Edge 也将支持这个属性。考虑兼容尚未实现此特性的浏览器,那目前最好的选择就是使用 PostCSS。

自定义属性,是一种开发者可以自主命名和使用的CSS属性。浏览器在处理像 color 、position 这样的属性时,需要接收特定的属性值,而自定义属性,在开发者赋予它属性值之前,它是没有意义的。CSS中原生的变量定义语法是: --* ,变量使用语法是: var(--*) ,其中 * 表示我们的变量名称。关于命名这个东西,各种语言都有些显示,例如CSS选择器不能是数字开头,JS中的变量是不能直接数值的,但是,在CSS变量中,这些限制通通没有,例如:

:root {
  --1: #369;
}
body {
  background-color: var(--1);
}

变量名称规则

但是,不能包含 $ [ ^ ( % 等字符,普通字符局限在“数字[ 0-9 ]”、“字母[ a-zA-Z ]”、“下划线 _ ”和“短横线 - ”这些组合,但是可以是中文,日文或者韩文,例如

body {
  --深蓝: #369;
  background-color: var(--深蓝);
}

浏览器支持

IE浏览器 火狐浏览器 opera浏览器 chrome浏览器 safari浏览器
IE不支持 var() ,其余浏览器都支持 var()

语法

var ( <custom-property-name> , <declaration-value> ?)

方法的第一个参数是要替换的自定义属性的名称。函数的可选第二个参数用作回退值。如果第一个参数引用的自定义属性无效,则该函数将使用第二个值。

取值

  • <custom-property-name> :自定义属性名。在实际应用中它被定义为以两个破折号开始的任何有效标识符。自定义属性仅供作者和用户使用; CSS 将永远不会给他们超出这里表达的意义。
  • <declaration-value> :声明值(后备值)。回退值被用来在自定义属性值无效的情况下保证函数有值。回退值可以包含任何字符,但是部分有特殊含义的字符除外,例如换行符、不匹配的右括号(如)、]或})、感叹号以及顶层分号(不被任何非var()的括号包裹的分号,例如var(--bg-color,--bs;color)是不合法的,而var(--bg-color,--value(bs;color))是合法的)。

实例

:root {
  --main-bg-color: pink;
}

body {
  background-color: var(--main-bg-color);
}



/* 在父元素样式中 */
.component {
  --text-color: #080; /* header-color 并没有被设定 */
}

/* 在 component 的样式中: */
.component .header {
  color: var(--header-color, blue); /* 此处 color 被回退到 blue */
}

.component .text {
  color: var(--text-color, black);
}

上篇: calc()

下篇: <number>