Vue3 v-bind绑定css中的var变量实现动态样式

在日常的开发中,我们常常遇到这样的需求:点击一个button改变页面中某个元素的样式,在这样的场景中,我们可以使用v-bind绑定css中的var变量,来动态的切换元素的样式

一个小栗子,在setup语法糖环境下,点击一个button动态切换另一个元素的背景色

javascript 复制代码
<template>
  <div class="box">
    <div class="intro">
      <div class="btxt" :style="{'--text-color':textColor}">使用v-bind绑定语法糖中的颜色常量的值给style中的变量</div>
    </div>
    <div class="intro">
      <div class="btn" @click="changeColor">点击button改变textColor的值,动态更新颜色的值</div>
    </div>
  </div>
</template>
<script setup>
import { ref } from 'vue'
const textColor = ref("blue");
const changeColor = () => {
  if (textColor.value === "blue") {
    textColor.value = "pink";
  } else {
    textColor.value = "blue"
  } 
  
};
</script>
<style scoped lang="less">
.box{
  display: flex;
  flex-direction: column;

  .intro{
    background-color: antiquewhite;
    margin: 10px;
    padding: 15px;

    .btn{
      display: inline-block;
      padding: 18px 35px 18px 35px;
    }
  }
}
.btxt{
  padding: 18px 35px 18px 35px;
  color: var(--text-color);
}
</style>

一个小栗子,在非setup语法糖的环境下使用v-bind绑定css中的var变量,实现当鼠标悬停在一个button上时配置button的伪类hover中的背景色,点击button后通过切换var变量对应的颜色值,动态切换button的背景色,代码如下:

javascript 复制代码
<template>
  <div class="box">
    <div class="btn" :style="{'--color-back':backColor}" @click="changeEvent">
      使用v-bind绑定非setup语法糖环境下的style值
    </div>
  </div>
</template>
<script>
export default{
  name:"ChangeButton",
  data(){
    return {
      backColor: "cadetblue"
    }
  },
  methods:{
    changeEvent(){
      let color = this.$data.backColor
      if (color === "cadetblue") {
        this.$data.backColor = "orange"
      } else {
        this.$data.backColor = "cadetblue"
      }
    }
  }
}
</script>
<style scoped lang="less">
.box{
  .btn{
    background-color: var(--color-back);
    display: inline-block;
    padding: 18px 35px 18px 35px;
    border-radius: 5px;
  }
}
.btn:hover{
  background-color: lightgrey;
}
.btn:active{
  animation: changeck 0.3s ease;
}
@keyframes changeck {
  0% {
    transform: scale(1);
  }
  50% {
    transform: scale(0.95);
  }
  100% {
    transform: scale(1);
  }
}
</style>
javascript 复制代码
<template>
  <div class="box">
    <div class="intro">
      <change-button></change-button>
    </div>
  </div>
</template>
<script setup>
import ChangeButton from './components/index.vue'
</script>
<style scoped lang="less">
.box{
  display: flex;
  flex-direction: column;
}
</style>
相关推荐
并不会1 小时前
常见 CSS 选择器用法
前端·css·学习·html·前端开发·css选择器
悦涵仙子1 小时前
CSS中的变量应用——:root,Sass变量,JavaScript中使用Sass变量
javascript·css·sass
衣乌安、1 小时前
【CSS】居中样式
前端·css·css3
兔老大的胡萝卜1 小时前
ppk谈JavaScript,悟透JavaScript,精通CSS高级Web,JavaScript DOM编程艺术,高性能JavaScript pdf
前端·javascript
低代码布道师1 小时前
CSS的三个重点
前端·css
耶啵奶膘2 小时前
uniapp-是否删除
linux·前端·uni-app
王哈哈^_^4 小时前
【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!
前端·人工智能·深度学习·yolo·目标检测·计算机视觉·pyqt
cs_dn_Jie4 小时前
钉钉 H5 微应用 手机端调试
前端·javascript·vue.js·vue·钉钉
开心工作室_kaic5 小时前
ssm068海鲜自助餐厅系统+vue(论文+源码)_kaic
前端·javascript·vue.js
有梦想的刺儿5 小时前
webWorker基本用法
前端·javascript·vue.js