Skip to content
On this page

CSS 变量的命名

  • 关于命名东西,各种语言都有些显示,例如 css 选择器不能是数字开头,JS 中的变量是不能直接数值,但是在 CSS 变量中,这些限制通通没有
  • 不能包含 $,[,^(% 等字符,普通局限在只要是 数字 [0-9] 字母 [a-zA-Z] 下划线_和短横线 - 这些组合,但是可以是中,日文或者韩文
  • 变量值只能用作属性值,不能用作属性名;下面代码中,变量 --side 用作属性名,这是无效的

全局 / 局部变量

:root 伪类可以看做是 -- 个全局作用域,在里面声明的变量,他下面的所有选择器都可以拿到

css
:root {--color: blue;}
.box {color: var(--color)}
.box {color: var(--color,red)}
1
2
3

CSS 变量的默认参数

var() 函数还可以使用第二个参数,表示变量的默认值。如果该变量不存在,就会使用这个默认值。 第二个参数不处理内部的逗号或空格,都视作参数的一 部分;

css
color: var(--foo, #7F583F);
var(--font-stack, "Roboto", "Helvetica"); var(--pad, 10px;15px 20px);
1
2

CSS 变量的拼接

如果变量值是一个字符串,可以与其他字符串拼接; 如果变量值是数值,不能与数值单位直接连用; 如果变量值带有单位,就不能写成字符串;

css
//字符串
--bar: 'hello';--bar--bar
--foo: var(--har)' world';--foo

//变量值是数值
foo { -gap: 20; margin-top: var(--gap)px; /* 无效*/ }

// 上面代码中,数值与单位直接写在一起,这是无效的。必须使用calc()函数,将它们连接,

foo { -gap: 20; margin-top: calc(ar(--gap) * 1px); }

// 变量值带有单位
.foo {--foo: '20px'; font-size: var(--foo); /* 无效*/}
.foo {--foo: 20px; font-size: var(--foo); /* 有效*/}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

CSS 变量的作用域

同一个 CSS 变量,可以在多个选择器内声明。读取的时候,优先级最高的声明生效。这与 CSS 的"层叠" (cascade) 规则是 - 致的;

css
<style>
  .root { --color: blue; }
  div {--color: green; }
  #alert {--color: red; }
  *{ color: var(--colör); }
</style>

<p>蓝色</p>
<div>绿色</div>
<div id="alert">红色</div>
1
2
3
4
5
6
7
8
9
10

css 变量的注意问题

  • 当存在多个同样名称的变量时候,变量的覆盖规则由 CSS 选择器的权重决定的,但并无

!important 这种用法

  • 变量的取值采用就近原则。
  • 如果变量值是数值,不能与数值单位直接连用。必须使用 calc() 函数,将它们连接;
  • 如果变量值带有单位,就不能写成字符串。
  • CSS 属性名是不可以使用变量的;
  • CSS 变量是存在缺省值, 只要定义正确,里面的值不对,结果以缺省值显示;
  • CSS 变量默认尾部是有空格的;

CSS 变量的响应式布局

  • CSS 是动态的,页面的任何变化,都会导致采用的规则变化。
  • 利用这个特点,可以在响应式布局的 media 命令里面声明变量,使得不同的屏幕宽度有不同的变量值。
css
body {--primary: #7F583F;- secondary: #F7EFD2;secondarysecondary}
a {color: var(--primary);text-decoration-color: var(--secondary);}
@media screen and (min-width: 768px) {
  body {--primary: #F7EFD2;--secondary: #7F583F;}
}
1
2
3
4
5
沪ICP备20006251号-1