Vue中CSS动态样式绑定

Vue中CSS动态样式绑定与注意事项_vue css动态绑定-CSDN博客

在 Vue 中,你不能直接在 CSS 中直接绑定 data 中的数据,因为 CSS 不是响应式的。但是,有几种方法可以实现根据 Vue 实例中的数据来动态地改变样式:

内联样式绑定

你可以使用 :style 绑定来动态地设置元素的样式。

复制代码
<template>  
  <div :style="{ color: activeColor, fontSize: fontSize + 'px' }">  
    Hello Vue  
  </div>  
</template>  

<script>  
export default {  
  data() {  
    return {  
      activeColor: 'red',  
      fontSize: 30  
    };  
  }  
};  
</script>

计算属性和绑定类名

如果你需要根据多个数据属性来计算样式,可以使用计算属性来返回对象,并使用 :class 绑定。

复制代码
<template>  
  <div :class="computedStyles">  
    Hello Vue  
  </div>  
</template>  

<script>  
export default {  
  data() {  
    return {  
      isActive: true,  
      isError: false  
    };  
  },  
  computed: {  
    computedStyles() {  
      return {  
        active: this.isActive,  
        error: this.isError  
      };  
    }  
  }  
};  
</script>  

<style scoped>  
.active {  
  color: green;  
}  

.error {  
  border: 1px solid red;  
}  
</style>

绑定到 CSS 类

你也可以直接绑定到预定义的 CSS 类名。

复制代码
<template>  
  <div :class="{'my-class': isActive}">  
    Hello Vue  
  </div>  
</template>  

<script>  
export default {  
  data() {  
    return {  
      isActive: true  
    };  
  }  
};  
</script>  

<style scoped>  
.my-class {  
  color: blue;  
}  
</style>

z

你可以使用对象语法或数组语法来绑定多个类。

复制代码
<template>  
  <div v-bind:class="{ active: isActive, 'text-danger': hasError }">  
    Hello Vue  
  </div>  
</template>  

<script>  
export default {  
  data() {  
    return {  
      isActive: true,  
      hasError: false  
    };  
  }  
};  
</script>  

<style scoped>  
.active {  
  color: green;  
}  

.text-danger {  
  color: red;  
}  
</style>

使用动态样式表

虽然不常见,但你也可以使用 JavaScript 动态地修改 <style> 标签的内容,但这通常不如使用 :style:class 绑定那么直观和易于维护。

注意:当你使用 scoped 样式时,Vue 会自动为每个组件添加一个唯一的属性,并只将这些样式应用于具有该属性的元素。如果你需要在子组件中覆盖这些样式,你可以使用 >>>/deep/ 选择器(取决于你的预处理器和 Vue 版本)。但请注意,这种方法应该谨慎使用,因为它可能会影响到其他组件的样式。

相关推荐
尾善爱看海7 小时前
Vue 面试收官篇:SSR、性能优化落地、30 道高频面试题精讲(附标准答案)
前端·javascript·vue.js·面试·vue
weixin_BYSJ19878 小时前
【计算机毕设】基于SpringBoot与Vue的文物保护档案管理系统08621
vue.js·spring boot·spring cloud·微服务·架构·django·课程设计
Bs_MoneyMagnet8 小时前
基于springboot+vue的个人健康管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·vue3·springboot3·计算机毕业设计
驳是8 小时前
一个组件,提升 react-router 开发的幸福感
前端·preact
GreenTea8 小时前
OpenAI Agents API 上手实测:一次调用把整个 agent loop 甩给 OpenAI
前端·后端·算法
星云API技术支持8 小时前
企业微信二次开发:群权限设置、成员管理与群资料维护的接口组合实践
java·前端·企业微信
京东云开发者9 小时前
81.8 秒的视频,我们改了 15 个版本:一次纯 Codex 驱动的 AI-native 视频实践
前端·aigc
Csvn9 小时前
TypeScript 大型项目架构:从单体 tsconfig 到分层可扩展的工程
前端
Bs_MoneyMagnet11 小时前
基于springboot+vue的心理咨询预约与随访平台的设计与实现 源码+文档
vue.js·spring boot·后端·spring·毕业设计·旅游·计算机毕业设计
计算机魔术师11 小时前
Dario Amodei 发文呼吁为前沿 AI 降速并提出三点计划
前端