首页 / Vue3 入门教程 / Class 与 Style 绑定

Vue3 入门教程

Class 与 Style 绑定

本教程共 40 篇 · 第 7 篇 · 更新于 2026-07-29 · 约 6 分钟阅读

VueVue3 入门教程class绑定style绑定动态样式CSS

7. Class 与 Style 绑定

本节目标:学会用 :class:style 动态控制元素的 class 和样式,掌握对象和数组两种语法。

操作元素的 class 和内联样式是常见需求。classstyle 都是属性,可以用 v-bind 绑定字符串。但拼字符串很烦,Vue 为此做了专门增强——表达式可以求值成对象或数组。

Class 绑定

对象语法

传对象给 :class,动态切换 class:

<div :class="{ active: isActive }"></div>

active 这个 class 是否存在,取决于 isActive 是否为 truthy。

可以同时切换多个 class,还能和普通的 class 共存:

<div class="static" :class="{ active: isActive, 'text-danger': hasError }"></div>
const isActive = ref(true)
const hasError = ref(false)

渲染结果:

<div class="static active"></div>

hasError 变成 true 后变成 "static active text-danger"

对象不一定要内联:

const classObject = reactive({
  active: true,
  'text-danger': false
})
<div :class="classObject"></div>

也可以绑定一个返回对象的计算属性——这是很常用的模式:

const classObject = computed(() => ({
  active: isActive.value && !error.value,
  'text-danger': error.value && error.value.type === 'fatal'
}))

数组语法

传数组给 :class,应用一组 class:

<div :class="[activeClass, errorClass]"></div>
const activeClass = ref('active')
const errorClass = ref('text-danger')

渲染成:

<div class="active text-danger"></div>

要条件切换数组里的 class,用三元表达式:

<div :class="[isActive ? activeClass : '', errorClass]"></div>

多个条件可以套对象语法:

<div :class="[{ [activeClass]: isActive }, errorClass]"></div>

Style 绑定

对象语法

:style 绑定对象,对应元素的 style 属性:

<div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
const activeColor = ref('red')
const fontSize = ref(30)

推荐用 camelCase 键名,但 kebab-case 也行(加引号):

<div :style="{ 'font-size': fontSize + 'px' }"></div>

直接绑定样式对象,模板更干净:

const styleObject = reactive({
  color: 'red',
  fontSize: '30px'
})
<div :style="styleObject"></div>

:style 也能和普通 style 属性共存:

<h1 style="color: red" :style="'font-size: 1em'">hello</h1>

渲染成:

<h1 style="color: red; font-size: 1em;">hello</h1>

数组语法

:style 可以绑定数组,多个样式对象会合并应用到同一元素:

<div :style="[baseStyles, overridingStyles]"></div>

自动前缀

用需要浏览器前缀的 CSS 属性时,Vue 会自动加前缀。运行时检测当前浏览器支持哪个版本,不支持的试各种前缀变体。

多值绑定

可以给一个样式属性提供数组,只渲染浏览器支持的最后一个值:

<div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>

支持不带前缀的浏览器就渲染 display: flex

本节回顾

  • :class 对象语法按 truthiness 切换 class,数组语法应用一组 class
  • :style 绑定对象对应 CSS 属性,camelCase 和 kebab-case 都行
  • 两种语法都能和静态属性共存
  • Vue 自动处理 CSS 前缀
  • 样式对象可以用计算属性返回