-
1 绑定class属性
-
2 绑定style属性
-
3 案例:导航项的选...
在Vue中,通过更改元素的class属性可以更改元素的样式,而对class属性的操作可以通过v-bind来实现。
使用v-bind绑定class属性时,可以将class属性值绑定为字符串、对象或数组,下面分别进行讲解。
1. 将class属性值绑定为字符串
在Vue中,可以将class属性值绑定为字符串,示例代码如下。
<template>
<div v-bind:class="className"></div>
</template>
<script setup>
const className = 'box'
</script>
当上述代码运行后,div元素的渲染结果如下。
<div class="box"></div>
演示如何为class属性绑定字符串
<template>
<div v-bind:class="className">梦想</div>
</template>
<script setup>
const className = 'box'
</script>
<style>
.box {
border: 1px solid black;
}
</style>
2. 将class属性值绑定为数组
在Vue中,v-bind指令中的class属性值除了字符串和对象外,还可以是一个数组,用以动态地切换HTML的class属性,数组中的每个元素为要绑定的类名。
将class属性值绑定为数组的示例代码如下。
<template>
<div v-bind:class="[className1, className2]"></div>
</template>
<script setup>
import { ref } from 'vue'
const className1 = ref('active')
const className2 = ref('error')
</script>
运行上述代码后,div元素的渲染结果如下。
<div class="active error"></div>
如果想有条件地切换列表中的class,可以使用三元表达式,示例代码如下。
<div v-bind:class="[isActive ? className1 : className2]"></div>
当class有多个条件时,在数组语法中也可以使用对象语法,示例代码如下。
<div v-bind:class="[{ active: isActive }, className2]"></div>
演示如何为class属性绑定数组
<template>
<div v-bind:class="[activeClass, borderClass]"></div>
<div v-bind:class="[isActive ? activeClass : '', borderClass]"></div>
<div v-bind:class="[{ active: isActive }, borderClass]"></div>
</template>
<script setup>
import { ref } from 'vue'
const isActive = ref(true)
const activeClass = ref('active')
const borderClass = ref('border')
</script>
<style>
.active {
width: 100px;
height: 10px;
margin-bottom: 2px;
background-color: rgb(59, 192, 241);
}
.border {
border: 2px solid rgb(0, 0, 0);
}
</style>
3. 将class属性值绑定为对象
在Vue中,可以将class属性值绑定为对象,从而动态地改变class属性值。对象中包含的属性名表示类名,属性值为布尔类型,如果属性值为true,表示类名生效,否则类名不生效。将class属性值绑定为对象的示例代码如下。
<template>
<div v-bind:class="{ className: isActive }"></div>
</template>
<script setup>
import { ref } from 'vue'
const isActive = ref(true)
</script>
运行上述代码后,div元素的渲染结果如下。
<div class="className"></div>
使用v-bind绑定的class属性可以与普通的class属性共存,示例代码如下。
<div class="className1" v-bind:class="{ className2: isActive }"></div>
在上述代码中,当isActive为true时,div元素的渲染结果如下。
<div class="className1 className2"></div>
在使用v-bind绑定class属性时,如果不想将对象类型的class属性值直接写在模板中,可以将属性值定义成一个响应式对象或一个返回对象的计算属性,示例代码如下。
<template>
<div v-bind:class="classObject1"></div>
<div v-bind:class="classObject2"></div>
</template>
<script setup>
import { reactive, ref, computed } from 'vue'
const classObject1 = reactive({ className: true })
const isActive = ref(true)
const classObject2 = computed(() => ({
className: isActive.value
}))
</script>
演示如何为class属性绑定对象
<template>
<div class="text" v-bind:class="{ box: isBox, border: isBorder }">
<div v-bind:class="{ inner: isInner }">春夏</div>
<div v-bind:class="classObject">秋冬</div>
<div v-bind:class="classMeal">三餐四季~</div>
</div>
</template>
<script setup>
import { ref, reactive, computed } from 'vue'
const isBox = ref(true)
const isBorder = ref(true)
const isInner = ref(true)
const isMeal = ref(true)
const classObject = reactive({ inner: true })
const classMeal = computed(() => ({
meal: isMeal.value
}))
</script>
<style>
.text {
text-align: center;
line-height: 30px;
}
.box {
width: 100%;
background: linear-gradient(white, rgb(239, 250, 86));
}
.border { border: 2px dotted black; }

