在项目中如何利用JS去修改CSS的属性值 --- sass变量方法

一、简介

关于在vue或nuxt项目中,利用JS去修改CSS样式方法有很多,比如:通过变量控制类名、通过变量控制style、通过JS去设置元素的style等等。但这些都是通过去修改元素的属性来修改,而不是去直接修改css样式表中的样式属性。
在最近写的一个项目中,引入了同事别的项目中封装的一个组件,我想要对其进行修改,使其能够根据传入的参数,显示不同的样式,例如颜色、大小。这样就能在不同的需求中进行使用。经过各种尝试,最终选择通过JS直接修改sass中声明的样式变量的方法。

二、实际代码

<template>
  <div>
    ...
  </div>
</template>

<script>
export default {
  props: {
  // 3、接收父组件传递过来的属性值
    selectedColor: {
      type: String,
      default: '#1e56d1'
    }
  },
  data () {
    return {
      ...
    }
  },
  mounted () {
  // 4、通过原生JS修改声明的sass变量的值
  // 因为nuxt是服务端渲染,所以在 mounted 阶段在浏览器执行,存在document对象时才执行
  // vue则无此限制
  // js 通过声明sass变量的key值,来找到对应变量,并修改其属性值
    document.getElementsByTagName('body')[0].style.setProperty('--selectedColor', this.selectedColor)
  }
}
</script>

<style lang="scss">
/* 1、声明sass变量,并一定要利用 var(key,value) 的形式进行声明 
      前面是变量的key JS通过这个key 来修改对应变量的值 
      key 一定要以 -- 开头 */
$selectedColor: var(--selectedColor, "#1e56d1");
/* 2、在样式表中使用声明的变量 */
.selected-page {
  background: $selectedColor;
  color: #ffffff;
}
</style>

三、兼容性问题

在后续的使用该方法的过程中,发现了一个问题,那就是在css中通过 var 来声明变量的方式,不兼容IE11及以下版本。虽然现在IE毒瘤已经停止支持了,但是还是有相当一部分用户在使用ie浏览器,希望早日抛弃IE。
css中通过 var 来声明变量的浏览器支持度:

在这里插入图片描述

为了解决该问题,我使用了另外一种方法:在项目中如何利用JS去修改CSS的属性值(二) — :root+var()方法

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的小朱同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值