Vue中动态设置class类名和style样式的操作指南

 更新时间:2025年09月09日 11:02:02   作者:藤原とラふ店丶  
在Vue中,动态设置class类名和style样式是非常常见的需求,主要通过v-bind指令(简写为:)实现,两者都支持对象语法、数组语法和计算属性,但具体用法略有差异,以下是详细说明和示例,需要的朋友可以参考下

一、动态设置 class 类名

通过:class指令动态绑定CSS类,核心是根据条件决定是否添加某个类。

1. 对象语法(最常用)

语法{ '类名1': 条件1, '类名2': 条件2 }
作用:每个类名独立判断是否添加(条件为true则添加)。

<template>
  <div 
    :class="{ 
      'active': isActive,    // isActive为true时添加active类
      'text-danger': hasError // hasError为true时添加text-danger类
    }"
  >
    动态class示例
  </div>
</template>

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

// Vue3(组合式API)
import { ref } from 'vue'
const isActive = ref(true)
const hasError = ref(false)
</script>

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

2. 数组语法

语法[类名1, 类名2, 条件 ? 类名3 : 类名4]
作用:直接组合类名列表,可嵌套条件判断。

<template>
  <!-- 基础用法:直接传入类名变量 -->
  <div :class="[baseClass, activeClass]"></div>

  <!-- 带条件判断:三目表达式 -->
  <div :class="[isActive ? 'active' : '', hasError ? 'error' : 'normal']"></div>

  <!-- 数组嵌套对象:更灵活的条件控制 -->
  <div :class="[{ active: isActive }, 'fixed']"></div>
</template>

<script>
// Vue2
data() {
  return {
    baseClass: 'box',
    activeClass: 'highlight',
    isActive: true,
    hasError: false
  }
}
</script>

3. 计算属性(复杂逻辑)

当条件逻辑复杂时(如多条件组合),用计算属性返回class配置,可读性更好。

<template>
  <div :class="computedClasses"></div>
</template>

<script>
// Vue2
export default {
  data() {
    return { isActive: true, count: 10 }
  },
  computed: {
    computedClasses() {
      return {
        active: this.isActive && this.count > 5, // 多条件组合
        'text-large': this.count > 8,
        'text-small': this.count <= 8
      }
    }
  }
}

// Vue3
import { ref, computed } from 'vue'
const isActive = ref(true)
const count = ref(10)
const computedClasses = computed(() => ({
  active: isActive.value && count.value > 5,
  'text-large': count.value > 8
}))
</script>

二、动态设置 style 样式

通过:style指令动态绑定内联样式,直接操作CSS属性(无需预先定义类)。

1. 对象语法(最常用)

语法{ css属性1: 值1, css属性2: 值2 }

注意

  • CSS属性名可写为驼峰式(如fontSize)或短横线式(需加引号,如'font-size')。
  • 值可以是字符串(固定值)或响应式变量(动态值)。
<template>
  <div 
    :style="{ 
      color: textColor,          // 动态颜色(变量)
      fontSize: fontSize + 'px', // 动态尺寸(拼接单位)
      'background-color': bgColor // 短横线属性(需引号)
    }"
  >
    动态style示例
  </div>
</template>

<script>
// Vue2
export default {
  data() {
    return {
      textColor: 'blue',
      fontSize: 16,
      bgColor: '#f5f5f5'
    }
  }
}

// Vue3
import { ref } from 'vue'
const textColor = ref('blue')
const fontSize = ref(16)
const bgColor = ref('#f5f5f5')
</script>

2. 数组语法

语法[样式对象1, 样式对象2]

作用:合并多个样式对象(后定义的属性会覆盖前面的,同CSS优先级)。

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

<script>
// Vue2
data() {
  return {
    baseStyles: { color: 'black', fontSize: '14px' },
    activeStyles: { color: 'red', fontWeight: 'bold' } // 覆盖color
  }
}
</script>

3. 计算属性(复杂样式逻辑)

复杂的样式逻辑(如根据状态动态计算尺寸、颜色)适合用计算属性。

<template>
  <div :style="computedStyles"></div>
</template>

<script>
// Vue3示例
import { ref, computed } from 'vue'
const isHighlight = ref(true)
const width = ref(200)

const computedStyles = computed(() => ({
  width: width.value + 'px',
  height: '100px',
  backgroundColor: isHighlight.value ? '#ff0' : '#fff',
  border: isHighlight.value ? '2px solid red' : '1px solid #ccc'
}))
</script>

三、核心差异与总结

类型特点适用场景
动态class基于预定义的CSS类,通过条件控制类名样式复用率高、逻辑简单/复杂均可
动态style直接绑定内联样式,无需预定义类样式动态性强(如随机颜色、实时计算尺寸)

通用原则

  • 简单逻辑:用对象语法或数组语法直接在模板中写。
  • 复杂逻辑:用计算属性(代码更清晰,便于维护)。
  • Vue2和Vue3的模板语法完全一致,差异仅在于脚本中响应式变量的定义方式(Vue2用data,Vue3用ref/reactive)。

以上就是Vue中动态设置class类名和style样式的操作指南的详细内容,更多关于Vue设置class类名和style样式的资料请关注脚本之家其它相关文章!

相关文章

  • Vue.js简易安装和快速入门(第二课)

    Vue.js简易安装和快速入门(第二课)

    这篇文章主要为大家详细介绍了Vue.js简易安装和快速入门的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • 压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)

    压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)

    大家都知道,Vuejs的 CLI工具 是基于 webpack 来实现的,所以在项目打包后,会生成的文件会很大。 主要原因是 webpack 将我们所有文件都打包成一个js文件,即使再小的项目,打包之后文件都会变得很大。 下面讲讲最近我遇到的相同问题。
    2020-02-02
  • Vue前端解析Excel数据方式

    Vue前端解析Excel数据方式

    这篇文章主要介绍了Vue前端解析Excel数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Vue Element前端应用开发之常规Element界面组件

    Vue Element前端应用开发之常规Element界面组件

    在我们开发BS页面的时候,往往需要了解常规界面组件的使用,小到最普通的单文本输入框、多文本框、下拉列表,以及按钮、图片展示、弹出对话框、表单处理、条码二维码等等,本篇随笔基于普通表格业务的展示录入的场景介绍这些常规Element组件的使用
    2021-05-05
  • vue实现图片拖拽及鼠标滚轮放大缩小的示例代码

    vue实现图片拖拽及鼠标滚轮放大缩小的示例代码

    本文主要给大家介绍如何vue实现图片拖拽及鼠标滚轮放大缩小,文中有详细的代码供大家参考,对我们的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-08-08
  • vue中el-form-item展开项居中的实现方式

    vue中el-form-item展开项居中的实现方式

    这篇文章主要介绍了vue中el-form-item展开项居中的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue 组件prop验证作用示例解析

    vue 组件prop验证作用示例解析

    这篇文章主要为大家介绍了vue组件prop验证作用示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Vue3中插槽(slot)的全部使用方法

    Vue3中插槽(slot)的全部使用方法

    这篇文章主要介绍了Vue3中插槽(slot)的全部使用方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • vue页面回退或关闭,发送请求不中断问题

    vue页面回退或关闭,发送请求不中断问题

    这篇文章主要介绍了vue页面回退或关闭,发送请求不中断问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • vue element-ui读取pdf文件的方法

    vue element-ui读取pdf文件的方法

    这篇文章主要介绍了vue element-ui读取pdf文件的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11

最新评论