vue.js 中动态控制 css 类名和内联样式的核心是使用 :class 和 :style 指令,对象语法适合条件判断,数组语法适合组合叠加,计算属性适合逻辑复杂场景。

Vue.js 中动态控制 CSS 类名和内联样式,核心是用 :class 和 :style 指令替代静态写法,让样式随数据实时响应。关键不在于“能不能”,而在于“怎么选最清晰、最易维护”——对象语法适合条件判断,数组语法适合组合叠加,计算属性适合逻辑复杂场景。
对象语法:按布尔条件开关单个类
这是最常用也最直观的方式,类名与布尔值一一对应,true 就加,false 就不加。类名含短横线(如 text-danger)必须加引号,普通驼峰名可不加。
-
:class="{ active: isActive, 'has-error': isInvalid }"—— 两个独立开关,互不影响 - 支持任意表达式:
:class="{ disabled: user.role !== 'admin' || form.isSubmitting }" - 可直接绑定 data 或 computed 中的对象变量:
:class="buttonClassObj",其中buttonClassObj是一个返回对象的属性
数组语法:拼接多个类名(固定 + 动态)
当既要保留基础类(如 btn),又要根据状态追加修饰类(如 btn-primary 或 btn-loading)时,数组语法更自然。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
-
:class="[ 'btn', sizeClass, { 'btn-block': block }, theme ]"—— 字符串、变量、对象可混写 - 避免空字符串干扰:
:class="[ base, isDanger ? 'alert-danger' : '' ]"不如改用对象::class="[ base, { 'alert-danger': isDanger } ]" - 适合搭配计算属性生成完整列表,比如权限相关类:
computed: { btnClasses() { return ['btn', this.canEdit ? 'editable' : 'readonly'] } }
内联样式绑定:对象优先,避免字符串拼接
用 :style 直接设置行内样式,推荐对象语法,既安全又易读。CSS 属性名支持驼峰(fontSize)或短横('font-size'),值可以是变量或简单表达式。
:style="{ color: textColor, 'background-color': bgColor, fontSize: `${fontSize}px` }"- 把样式逻辑封装进计算属性更利于复用:
computed: { cardStyle() { return { opacity: this.loading ? 0.6 : 1, cursor: this.loading ? 'not-allowed' : 'pointer' } } } - 数组语法也支持:
:style="[ baseStyle, overrideStyle ],用于多层样式覆盖
组合使用与注意事项
实际项目中,:class 和 :style 常配合使用,且能与静态 class/style 共存,Vue 会自动合并。
- 静态类不会被覆盖:
<div class="icon" :class="{ 'icon--large': isLarge }"> → 渲染为 <code>class="icon icon--large" - 多个绑定方式可同时存在:
<div class="base" :class="objClasses" :style="dynamicStyle"> <li>性能提示:避免在模板中写复杂表达式;逻辑复杂的样式判定建议移到 computed 或 method 中</li> <li>Vue 3 组合式 API 写法一致,只是响应式数据用 <code>ref或computed定义,绑定方式完全相同










