css变量(2)

158 阅读2分钟

这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战

响应式布局

CSS 是动态的,页面的任何变化,都会导致采用的规则变化。

利用这个特点,可以在响应式布局的media命令里面声明变量,使得不同的屏幕宽度有不同的变量值。

body {
  --primary: #7F583F;
  --secondary: #F7EFD2;
}

a {
  color: var(--primary);
  text-decoration-color: var(--secondary);
}

@media screen and (min-width: 768px) {
  body {
    --primary:  #F7EFD2;
    --secondary: #7F583F;
  }
}

兼容性处理

对于不支持 CSS 变量的浏览器,可以采用下面的写法。

a {
  color: #7F583F;
  color: var(--primary);
}

也可以使用@support命令进行检测,如下:

@supports ( (--a: 0)) {
  /* supported */
}

@supports ( not (--a: 0)) {
  /* not supported */
}

JavaScript 操作

JavaScript 也可以检测浏览器是否支持 CSS 变量,如下:

const isSupported =
  window.CSS &&
  window.CSS.supports &&
  window.CSS.supports('--a', 0);

if (isSupported) {
  /* supported */
} else {
  /* not supported */
}

JavaScript 操作 CSS 变量的写法如下:

// 设置变量
document.body.style.setProperty('--primary', '#7F583F');

// 读取变量
document.body.style.getPropertyValue('--primary').trim();
// '#7F583F'

// 删除变量
document.body.style.removeProperty('--primary');

就是说JavaScript 可以将任意值存入样式表,以下是一个监听事件的例子,事件信息被存入了 CSS 变量中

const docStyle = document.documentElement.style;

document.addEventListener('mousemove', (e) => {
  docStyle.setProperty('--mouse-x', e.clientX);
  docStyle.setProperty('--mouse-y', e.clientY);
});

那些对 CSS 无用的信息,也可以放入 CSS 变量,如下:

--foo: if(x > 5) this.width = 10;

上面代码中,--foo的值在 CSS 里面是无效语句,但是却可以被 JavaScript 读取。这就是说,可以把样式设置写在 CSS 变量中,让 JavaScript 来读取。

所以,CSS 变量提供了 JavaScript 与 CSS 通信的一种途径。

css变量实现系统换肤实例:

实现步骤: 首先,整理需要变换颜色的元素有哪些,统一赋值为相同的类名,或收集类名,比如第三方插件封装的元素,不能直接获取类名,需要通过页面获取,再用单独的css文件进行操作(要保证权重保持在最高,这样就可以直接设置生效)

  1. 在当前css文件中声明变量
body {
 --color:#fff
}
  1. 将变量赋值给要更改颜色的类名
.bg {
    background:var(--color);
}
  1. 通过JS更改css变量值
// 设置变量
document.body.style.setProperty('--color','#000');

// 读取变量
document.body.style.getPropertyValue('--color').trim();

css变量整理到此结束,希望对大家有帮助!