目录
一、Vue3 Class 绑定
1.Vue3 Class 绑定基础
数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式。我们可以使用 v-bind 将它们和动态的字符串绑定。除了字符串外,表达式的值也可以是对象或数组。
绑定对象:
如下:
   
    - 
     
      
     
     
      
       <script setup lang="ts">
       
      
     
- 
     
      
     
     
      
       import { ref } 
       from 
       'vue'
      
     
- 
     
      
     
     
       
      
     
- 
     
      
     
     
      
       const isClassOne = 
       ref(
       true)
      
     
- 
     
      
     
     
      
       </script>
      
     
- 
     
      
     
     
      
       <template>
      
     
- 
     
      
     
     
        
       <div>
      
     
- 
     
      
     
     
          
       <div :class="{ classOne: isClassOne }">
       </div>
      
     
- 
     
      
     
     
        
       </div>
      
     
- 
     
      
     
     
      
       </template>
      
     
- 
     
      
     
     
      
       <style scoped>
       </style>
      
     
页面最终渲染结果为:
<div class="classOne"></div>上面的语法表示 classOne 是否存在取决于数据属性 isClassOne 的真假值。
我们可以在对象中写一个或多个字段来操作一个或多个 class。此外,:class 指令也可以和一般的 class 属性共存。
如下:
   
    - 
     
      
     
     
      
       <script setup lang="ts">
       
      
     
- 
     
      
     
     
      
       import { ref } 
       from 
       "vue";
      
     
- 
     
      
     
     
       
      
     
- 
     
      
     
     
      
       const isClassOne = 
       ref(
       true);
      
     
- 
     
      
     
     
      
       const isClassTwo = 
       ref(
       false);
      
     
- 
     
      
     
     
      
       </script>
      
     
- 
     
      
     
     
      
       <template>
      
     
- 
     
      
     
     
        
       <div>
      
     
- 
     
      
     
     
          
       <div :class="{ classOne: isClassOne, classTwo: isClassTwo }" class="static">
       </div>
      
     
- 
     
      
     
     
        
       </div>
      
     
- 
     
      
     
     
      
       </template>
      
     
- 
     
      
     
     
      
       <style scoped>
       </style>
      
     
页面最终渲染结果为:
<div class="classOne static"></div>注:当isClassOne和isClassTwo值改变时,class 列表会随之更新
绑定的对象并非一定写成内联字面量的形式,亦可以直接绑定一个对象或者绑定一个返回对象的计算属性
如下:
   
    - 
     
      
     
     
      
       <script setup lang="ts">
       
      
     
- 
     
      
     
     
      
       import { ref, reactive, computed } 
       from 
       "vue";
      
     
- 
     
      
     
     
       
      
     
- 
     
      
     
     
      
       const isClassOne = ref<boolean>(
       true);
      
     
- 
     
      
     
     
      
       const isClassTwo = ref<boolean>(
       false);
      
     
- 
     
      
     
     
      
       const oneClassObj = 
       reactive({
      
     
- 
     
      
     
     
        
       objOne: 
       true,
      
     
- 
     
      
     
     
        
       objTwo: 
       true,
      
     
- 
     
      
     
     
      
       });
      
     
- 
     
      
     
     
      
       const classObject = 
       computed(
       () => ({
      
     
- 
     
      
     
     
        
       classOne: isClassOne.
       value == 
       true,
      
     
- 
     
      
     
     
        
       classTwo: isClassTwo.
       value == 
       true,
      
     
- 
     
      
     
     
      
       }));
      
     
- 
     
      
     
     
      
       </script>
      
     
- 
     
      
     
     
      
       <template>
      
     
- 
     
      
     
     
        
       <div>
      
     
- 
     
      
     
     
          
       <div :class="{ classOne: isClassOne, classTwo: isClassTwo }" class="static">
       </div>
      
     
- 
     
      
     
     
          
       <div :class="oneClassObj">
       </div>
      
     
- 
     
      
     
     
          
       <div :class="classObject">
       </div>
      
     
- 
     
      
     
     
       
      
     
- 
     
      
     
     
        
       </div>
      
     
- 
     
      
     
     
      
       </template>
      
     
- 
     
      
     
     
      
       <style scoped>
       </style>
      
     
  页面最终渲染结果为:
   
    - 
     
      
     
     
      
       <div class="classOne static">
       </div>
      
     
- 
     
      
     
     
      
       <div class="objOne objTwo">
       </div>
      
     
- 
     
      
     
     
      
       <div class="classOne">
       </div>
      
     
绑定数组
可以给 :class 绑定一个数组来渲染多个 CSS class
 绑定的数组并非一定写成内联字面量的形式,亦可以直接绑定一个数组或者绑定一个返回数组的计算属性
如下:
   
    - 
     
      
     
     
      
       <script setup lang="ts">
       
      
     
- 
     
      
     
     
      
       import { ref, reactive, computed } 
       from 
       "vue";
      
     
- 
     
      
     
     
       
      
     
- 
     
      
     
     
      
       const isClassOne = ref<string>(
       "classOne");
      
     
- 
     
      
     
     
      
       const isClassTwo = ref<string>(
       "classTwo");
      
     
- 
     
      
     
     
      
       const oneClassArr = reactive<
       Array<string>>([
       "classOneArr", 
       "classTwoArr"]);
      
     
- 
     
      
     
     
      
       const classArr = computed<
       Array<string>>(
       () => {
      
     
- 
     
      
     
     
        
       let oneArr = [
       "classOneArr", 
       "classTwoArr"];
      
     
- 
     
      
     
     
        
       return oneArr;
      
     
- 
     
      
     
     
      
       });
      
     
- 
     
      
     
     
      
       </script>
      
     
- 
     
      
     
     
      
       <template>
      
     
- 
     
      
     
     
        
       <div>
      
     
- 
     
      
     
     
          
       <div :class="[isClassOne, isClassTwo]">
       </div>
      
     
- 
     
      
     
     
          
       <div :class="oneClassArr">
       </div>
      
     
- 
     
      
     
     
          
       <div :class="classArr">
       </div>
      
     
- 
     
      
     
     
       
      
     
- 
     
      
     
     
        
       </div>
      
     
- 
     
      
     
     
      
       </template>
      
     
- 
     
      
     
     
      
       <style scoped>
       </style>
      
     
  页面最终渲染结果为:
   
    - 
     
      
     
     
      
       <div class="classOne classTwo">
       </div>
      
     
- 
     
      
     
     
      
       <div class="classOneArr classTwoArr">
       </div>
      
     
- 
     
      
     
     
      
       <div class="classOneArr classTwoArr">
       </div>
      
     
如果数组中有条件地渲染某个 class,可以使用三元表达式或者在数组中嵌套对象。
如下:
   
    - 
     
      
     
     
      
       <script setup lang="ts">
       
      
     
- 
     
      
     
     
      
       import { ref } 
       from 
       "vue";
      
     
- 
     
      
     
     
       
      
     
- 
     
      
     
     
      
       const isClassOne = ref<boolean>(
       false);
      
     
- 
     
      
     
     
      
       </script>
      
     
- 
     
      
     
     
      
       <template>
      
     
- 
     
      
     
     
        
       <div>
      
     
- 
     
      
     
     
          
       <div :class="[isClassOne ? 'classOne' : '', 'classTwo']">
       </div>
      
     
- 
     
      
     
     
          
       <div :class="[{ classOne: isClassOne }, 'classTwo']">
       </div>
      
     
- 
     
      
     
     
        
       </div>
      
     
- 
     
      
     
     
      
       </template>
      
     
- 
     
      
     
     
      
       <style scoped>
       </style>
      
     
页面最终渲染结果为:
   
    - 
     
      
     
     
      
       <div class="classTwo">
       </div>
      
     
- 
     
      
     
     
      
       <div class="classTwo">
       </div>
      
     
classTwo 会一直存在,但 classOne 只会在 isClassOne 为真时才存在。
二、Vue3 Style 绑定
1.Vue3 Style 绑定基础
绑定对象:
:style 支持绑定 JavaScript 对象值,对应的是HTML 元素的 style 属性
推荐使用 camelCase,但 :style 也支持 kebab-cased 形式的 CSS 属性 key (对应其 CSS 中的实际名称)
如下:
   
    - 
     
      
     
     
      
       <script setup lang="ts">
       
      
     
- 
     
      
     
     
      
       import { ref } 
       from 
       "vue";
      
     
- 
     
      
     
     
      
       const oneColor = ref<string>(
       "red");
      
     
- 
     
      
     
     
      
       const oneFontSize = ref<number>(
       30);
      
     
- 
     
      
     
     
      
       const oneBgc = ref<string>(
       "yellow");
      
     
- 
     
      
     
     
      
       </script>
      
     
- 
     
      
     
     
      
       <template>
      
     
- 
     
      
     
     
        
       <div>
      
     
- 
     
      
     
     
          
       <div
      
     
- 
     
      
     
     
            
       :style=
       "{
      
     
- 
     
      
     
     
      
        color: oneColor,
      
     
- 
     
      
     
     
      
        fontSize: oneFontSize + 'px',
      
     
- 
     
      
     
     
      
        'background-color': oneBgc,
      
     
- 
     
      
     
     
      
        }"
      
     
- 
     
      
     
     
      
           >
      
     
- 
     
      
     
     
      
             123
      
     
- 
     
      
     
     
          
       </div>
      
     
- 
     
      
     
     
        
       </div>
      
     
- 
     
      
     
     
      
       </template>
      
     
- 
     
      
     
     
      
       <style scoped>
       </style>
      
     
  页面最终渲染结果为:
<div style="color: red; font-size: 30px; background-color: yellow;"> 123 </div>除此外,亦可以直接绑定一个样式对象或返回样式对象的计算属性
绑定数组:
可以给 :style 绑定一个包含多个样式对象的数组。这些对象会被合并后渲染到同一元素上。
如下:
   
    - 
     
      
     
     
      
       <script setup lang="ts">
       
      
     
- 
     
      
     
     
      
       import { reactive } 
       from 
       "vue";
      
     
- 
     
      
     
     
      
       const oneStyleObj = 
       reactive({
      
     
- 
     
      
     
     
        
       color: 
       "red",
      
     
- 
     
      
     
     
        
       fontSize: 
       "30px",
      
     
- 
     
      
     
     
      
       });
      
     
- 
     
      
     
     
      
       const twoStyleObj = 
       reactive({
      
     
- 
     
      
     
     
        
       "background-color": 
       "yellow",
      
     
- 
     
      
     
     
      
       });
      
     
- 
     
      
     
     
      
       </script>
      
     
- 
     
      
     
     
      
       <template>
      
     
- 
     
      
     
     
        
       <div>
      
     
- 
     
      
     
     
          
       <div :style="[oneStyleObj, twoStyleObj]">123
       </div>
      
     
- 
     
      
     
     
        
       </div>
      
     
- 
     
      
     
     
      
       </template>
      
     
- 
     
      
     
     
      
       <style scoped>
       </style>
      
     
  页面最终渲染结果为:
<div style="color: red; font-size: 30px; background-color: yellow;"> 123 </div>自动前缀 :
当在 :style 中使用了需要浏览器特殊前缀的 CSS 属性时,Vue 会自动为他们加上相应的前缀。Vue 是在运行时检查该属性是否支持在当前浏览器中使用。如果浏览器不支持某个属性,那么将尝试加上各个浏览器特殊前缀,以找到哪一个是被支持的。
样式多值:
可以对一个样式属性提供多个 (不同前缀的) 值
如下:
<div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>数组仅会渲染浏览器支持的最后一个值。在这个示例中,在支持不需要特别前缀的浏览器中都会渲染为 display: flex。
有问题可以在下面评论,我会为大家解答,如果此文对大家有帮助,欢迎大家点点关注啊,博主在此感谢
转载:https://blog.csdn.net/samxiaoguai/article/details/128500797
 
					