CSS 中的新玩意自定义属性(变量)

366 阅读2分钟

CSS 中的新玩意自定义属性(变量)在进年来 我们习惯了scss、less 等各种语法上的骚操作。最近发现css本身也支持了这种变量的用法

基本用法:

声明: 使用双减号定义,属性值可以使用任何有效果的css值; 但需要注意以下两点:

  • 但必须定义在规则级内(就是必须定义在某个样式内部,与scss、less等不同,不能直接定义在顶部)
  • 自定义属性名是大小写敏感的,--my-color 和 --My-color 是两个不同的自定义属性。
/**:root 伪类匹配文档树的根元素。对于 HTML 来说,:root 表示 <html> 元素,除了优先级更高之外,与 html 选择器相同。**/
:root {
    --main-bg-color: brown;
}
body{
    --main-bg-color: #f00;
    --font-size: 16px;
}

使用:使用var()函数来调动

  • var函数允许使用默认的方式
.two {
  background-color: var(--main-bg-color);
}
.three {
  background-color: var(--my-var, red);
}

属性继承

一般的使用场景基本都是做全局的变量使用了, 也就不存在继承一说。但如果在一个元素父级以上的多级定义会按以下匹配方式匹配

<div class="one">
  <div class="two">
    <div class="three"></div>
    <div class="four"></div>
  </div>
</div>

.two {
  --test: 10px;
}

.three {
  --test: 2em;
}

在以上情况下, var(--test) 的结果分别是: 对于元素 class="two" :10px 对于元素 class="three" :2em 对于元素 class="four" :10px (继承自父属性) 对于元素 class="one" :非法值,会变成自定义属性的默认值

在JavaScript中使用

在js中获取或者修改 CSS 变量和操作普通 CSS 属性是一样的:

// 获取一个 Dom 节点上的 CSS 变量
element.style.getPropertyValue("--my-var");

// 获取任意 Dom 节点上的 CSS 变量
getComputedStyle(element).getPropertyValue("--my-var");

// 修改一个 Dom 节点上的 CSS 变量
element.style.setProperty("--my-var", jsVar + 4);

其他

  • 其他的一些特性会安装css的默认规则去匹配 也不用特殊去注意 例如:值无效会被忽略, 重复定义覆盖原则等