vue 动态控制 class 和 style 的核心是 :class 和 :style,支持对象与数组语法;对象语法按布尔值开关类名或样式,数组语法混合静态与动态类;推荐用计算属性封装复杂逻辑以提升可维护性。

Vue 中动态控制 class 和 style,核心是 v-bind:class(简写为 :class)和 v-bind:style(简写为 :style)。它们不只接受字符串,还支持对象和数组语法——这让样式切换更清晰、更易维护。
class 对象语法:按布尔值开关类名
用 JavaScript 对象写法,键是类名(含连字符的需加引号),值是布尔表达式:
-
:class="{ 'active': isActive, 'text-danger': hasError }"——isActive为 true 时添加active类,hasError为 true 时添加text-danger类 - 可与静态 class 共存:
class="btn" :class="{ 'disabled': isDisabled }",最终渲染为btn disabled(若isDisabled为 true) - 推荐把复杂逻辑抽到计算属性里,比如:
:class="buttonClasses",再在 script 中定义:buttonClasses: computed(() => ({ disabled: !isReady, primary: type === 'primary' }))
class 数组语法:混合固定类与动态类
数组内可混用字符串、对象或响应式变量,适合既要基础样式、又要条件追加类的场景:
-
:class="[baseClass, { 'error': isError, 'success': isDone }]"——baseClass总存在,error和success按条件添加 - 等价但更啰嗦的写法:
:class="[baseClass, isError ? 'error' : '', isDone ? 'success' : '']",容易漏空字符串,不推荐 - 支持绑定 ref 或 reactive 字符串变量:
:class="[activeClass, errorClass]",其中errorClass为空字符串时自动忽略
style 对象语法:直接映射 CSS 属性
传入一个 JS 对象,属性名可用驼峰(fontSize)或短横('font-size'),值支持响应式变量或表达式:
:style="{ color: textColor, fontSize: size + 'px', backgroundColor: isDark ? '#333' : '#fff' }"- CSS 单位(如
px、%)必须手动拼接,Vue 不自动补全 - 推荐拆成独立变量,例如:
:style="cardStyle",再在 script 中定义:cardStyle: computed(() => ({ opacity: isLoading ? 0.6 : 1, transform: isFlipped ? 'rotateY(180deg)' : 'none' }))
注意事项与常见陷阱
实际使用中容易忽略几个关键点:
- 对象语法中,类名含短横线(如
text-danger)必须加单引号或双引号,否则报错 - 多个
:class绑定不会合并,后写的会覆盖前写的;建议统一收口到一个计算属性或对象变量 -
:style中若值为null、undefined或空字符串,对应样式会被移除(不是设为默认值) - 避免在模板中写过长的内联表达式,逻辑一复杂就立刻移到计算属性里
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










