vue3(三)绑定class、style

640 阅读1分钟

绑定 HTML class

绑定对象

给 :class (v-bind:class 的缩写) 传递一个对象来动态切换 class
active 是否存在,取决于 isActive 是否为 true。

<div :class="{ active: isActive }"></div>
// 结果为:<div class="active"></div>
<script setup lang="ts">
const isActive = true
const hasError = false
</script>
<div class="static" :class="{ active: isActive, 'text-danger': hasError }"></div>
// 结果为:<div class="static active"></div>

也可以绑定一个对象,效果是一样的。

<template>
  <div class="static" :class="classObject">
  </div>
</template>

<script setup lang="ts">
const classObject = {
  active: true,
  'text-danger': false
}
</script>

使用计算属性也是可以的。

<template>
  <div class="static" :class="classObject">
  </div>
</template>

<script setup lang="ts">
import { computed } from 'vue';
const classObject = computed(() => {
  return {
    active: isActive
  }
})
</script>

绑定数组

我们可以给 :class 绑定一个数组来渲染多个 CSS。

<template>
  <div :class="[activeClass, errorclass]">
    // 结果为:<div class="active error"></div>
  </div>
</template>

<script setup lang="ts">
const activeClass = 'active'
const errorclass = 'error'
</script>

也可以在数组中使用三元表达式进行条件渲染。

isactive 为真时 activeClass 才存在,errorclass 一直存在
<template>
  <div :class="[isactive ? activeClass : '', errorclass]">
    <!-- 结果为:<div class="active error"></div> -->
  </div>
</template>

<script setup lang="ts">
const isactive = true
const activeClass = 'active'
const errorclass = 'error'
</script>

绑定内联样式 style

绑定对象

<template>
  <div :style="{ color: activeColor, fontSize: fontSize + 'px' }">1111</div>
  // 结果为:<div style="color: blue; font-size: 30px;">1111</div>
</template>

<script setup lang="ts">
const activeColor = 'blue'
const fontSize = 30
</script>

直接绑定一个样式的对象也可以,这样更加简洁,结果跟上边一样。

<template>
  <div :style="styleObject">1111</div>
</template>

<script setup lang="ts">
const styleObject = {
  color: 'blue',
  fontSize: '30px'
}
</script>

// 可以使用多个样式的对象,这些对象会被合并后渲染到同一元素上:
<div :style="[styleObject, styleObject2]">1111</div>