飞道的博客

Vue3浅谈:(三)Vue3类与样式绑定

359人阅读  评论(0)

目录

一、Vue3 Class 绑定

1.Vue3 Class 绑定基础

绑定对象:

绑定数组

二、Vue3 Style 绑定

1.Vue3 Style  绑定基础

绑定对象:

绑定数组:

自动前缀 :

样式多值:


一、Vue3 Class 绑定

1.Vue3 Class 绑定基础

数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式。我们可以使用 v-bind 将它们和动态的字符串绑定。除了字符串外,表达式的值也可以是对象或数组。

绑定对象:

如下:


   
  1. <script setup lang="ts">
  2. import { ref } from 'vue'
  3. const isClassOne = ref( true)
  4. </script>
  5. <template>
  6. <div>
  7. <div :class="{ classOne: isClassOne }"> </div>
  8. </div>
  9. </template>
  10. <style scoped> </style>

页面最终渲染结果为:

<div class="classOne"></div>

上面的语法表示 classOne 是否存在取决于数据属性 isClassOne 的真假值

我们可以在对象中写一个或多个字段来操作一个或多个 class。此外,:class 指令也可以和一般的 class 属性共存。

如下:


   
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. const isClassOne = ref( true);
  4. const isClassTwo = ref( false);
  5. </script>
  6. <template>
  7. <div>
  8. <div :class="{ classOne: isClassOne, classTwo: isClassTwo }" class="static"> </div>
  9. </div>
  10. </template>
  11. <style scoped> </style>

页面最终渲染结果为:

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

注:isClassOne和isClassTwo值改变时,class 列表会随之更新

绑定的对象并非一定写成内联字面量的形式,亦可以直接绑定一个对象或者绑定一个返回对象的计算属性

如下:


   
  1. <script setup lang="ts">
  2. import { ref, reactive, computed } from "vue";
  3. const isClassOne = ref<boolean>( true);
  4. const isClassTwo = ref<boolean>( false);
  5. const oneClassObj = reactive({
  6. objOne: true,
  7. objTwo: true,
  8. });
  9. const classObject = computed( () => ({
  10. classOne: isClassOne. value == true,
  11. classTwo: isClassTwo. value == true,
  12. }));
  13. </script>
  14. <template>
  15. <div>
  16. <div :class="{ classOne: isClassOne, classTwo: isClassTwo }" class="static"> </div>
  17. <div :class="oneClassObj"> </div>
  18. <div :class="classObject"> </div>
  19. </div>
  20. </template>
  21. <style scoped> </style>

页面最终渲染结果为:


   
  1. <div class="classOne static"> </div>
  2. <div class="objOne objTwo"> </div>
  3. <div class="classOne"> </div>

绑定数组

可以给 :class 绑定一个数组来渲染多个 CSS class
绑定的数组并非一定写成内联字面量的形式,亦可以直接绑定一个数组或者绑定一个返回数组的计算属性

如下:


   
  1. <script setup lang="ts">
  2. import { ref, reactive, computed } from "vue";
  3. const isClassOne = ref<string>( "classOne");
  4. const isClassTwo = ref<string>( "classTwo");
  5. const oneClassArr = reactive< Array<string>>([ "classOneArr", "classTwoArr"]);
  6. const classArr = computed< Array<string>>( () => {
  7. let oneArr = [ "classOneArr", "classTwoArr"];
  8. return oneArr;
  9. });
  10. </script>
  11. <template>
  12. <div>
  13. <div :class="[isClassOne, isClassTwo]"> </div>
  14. <div :class="oneClassArr"> </div>
  15. <div :class="classArr"> </div>
  16. </div>
  17. </template>
  18. <style scoped> </style>

页面最终渲染结果为:


   
  1. <div class="classOne classTwo"> </div>
  2. <div class="classOneArr classTwoArr"> </div>
  3. <div class="classOneArr classTwoArr"> </div>

如果数组中有条件地渲染某个 class,可以使用三元表达式或者在数组中嵌套对象。

如下:


   
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. const isClassOne = ref<boolean>( false);
  4. </script>
  5. <template>
  6. <div>
  7. <div :class="[isClassOne ? 'classOne' : '', 'classTwo']"> </div>
  8. <div :class="[{ classOne: isClassOne }, 'classTwo']"> </div>
  9. </div>
  10. </template>
  11. <style scoped> </style>

页面最终渲染结果为:


   
  1. <div class="classTwo"> </div>
  2. <div class="classTwo"> </div>

classTwo 会一直存在,但 classOne 只会在 isClassOne 为真时才存在。 

二、Vue3 Style 绑定

1.Vue3 Style  绑定基础

绑定对象:

:style 支持绑定 JavaScript 对象值,对应的是HTML 元素的 style 属性

推荐使用 camelCase,但 :style 也支持 kebab-cased 形式的 CSS 属性 key (对应其 CSS 中的实际名称)

如下:


   
  1. <script setup lang="ts">
  2. import { ref } from "vue";
  3. const oneColor = ref<string>( "red");
  4. const oneFontSize = ref<number>( 30);
  5. const oneBgc = ref<string>( "yellow");
  6. </script>
  7. <template>
  8. <div>
  9. <div
  10. :style= "{
  11. color: oneColor,
  12. fontSize: oneFontSize + 'px',
  13. 'background-color': oneBgc,
  14. }"
  15. >
  16. 123
  17. </div>
  18. </div>
  19. </template>
  20. <style scoped> </style>

页面最终渲染结果为:

<div style="color: red; font-size: 30px; background-color: yellow;"> 123 </div>

除此外,亦可以直接绑定一个样式对象或返回样式对象的计算属性

绑定数组:

可以给 :style 绑定一个包含多个样式对象的数组。这些对象会被合并后渲染到同一元素上。

如下:


   
  1. <script setup lang="ts">
  2. import { reactive } from "vue";
  3. const oneStyleObj = reactive({
  4. color: "red",
  5. fontSize: "30px",
  6. });
  7. const twoStyleObj = reactive({
  8. "background-color": "yellow",
  9. });
  10. </script>
  11. <template>
  12. <div>
  13. <div :style="[oneStyleObj, twoStyleObj]">123 </div>
  14. </div>
  15. </template>
  16. <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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场