一、介绍

关于在vue或nuxt项目中,利用JS去修改CSS样式方法有很多,比如:通过变量控制类名、通过变量控制style、通过JS去设置元素的style等等。但这些都是通过去修改元素的属性来修改,而不是去直接修改css样式表中的样式属性。
在最近写的一个项目中,引入了同事别的项目中封装的一个组件,我想要对其进行修改,使其能够根据传入的参数,显示不同的样式,例如颜色、大小。这样就能在不同的项目中进行复用。
之前我写过一篇博客,是通过 JS+Sass变量修改CSS的属性值的方式来实现的该需求,但在后续的测试过程中我发现,这个方式不兼容IE11及以下版本,所以我又发现了:root{} + var() +css-vars-ponyfill的方法,但是好像依旧不能兼容IE11及以下版本,建议直接放弃IE吧。

二、使用步骤

1、使用:root声明全局CSS变量

:root是一个css伪类,匹配页面的根元素html,而且权重大于html选择器的权重。通过它声明的CSS变量都是全局变量。

代码:
:root {
  /* CSS变量一定要以 -- 开头 */
  --selectedColor: #07C189
}
浏览器兼容性:

在这里插入图片描述

2、在CSS属性中使用var()方法使用声明的CSS变量

var()函数可以代替CSS中任何属性的值,但是该函数不能作为属性名、选择器或者其他除了属性值之外的值。var(a,b)函数有两个参数,第一个参数表示要使用的自定义属性的名称,第二个参数表示默认值,如果第一个参数引用的自定义属性无效,则该函数将使用第二个值。

代码:
.selected-page {
  /* 使用前面声明好的CSS变量 */
  background: var(--selectedColor,#ccc);
}
浏览器兼容性:

在这里插入图片描述

3、引入 css-vars-ponyfill 依赖

该依赖是用来解决旧版本浏览器(特指IE)不支持CSS变量或var()的,只需在项目的控制台中执行npm i css-vars-ponyfill,将该依赖引入到项目中,然后在项目中进行引用配置即可。
npm介绍:css-vars-ponyfill

4、使用JS修改CSS全局变量的值
// 3、接收父组件传递过来的属性值
  props: {
    selectedColor: {
      type: String,
      default: '#1e56d1'
    }
  }
  
// js 通过声明sass变量的key值,来找到对应变量,并修改其属性值
document.getElementsByTagName('body')[0].style.setProperty('--selectedColor', this.selectedColor)
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐