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

news/2024/11/27 23:46:03/

目录

一、Vue3 Class 绑定

1.Vue3 Class 绑定基础

绑定对象:

绑定数组

二、Vue3 Style 绑定

1.Vue3 Style  绑定基础

绑定对象:

绑定数组:

自动前缀 :

样式多值:


一、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

有问题可以在下面评论,我会为大家解答,如果此文对大家有帮助,欢迎大家点点关注啊,博主在此感谢


http://www.ppmy.cn/news/10880.html

相关文章

Python学生信息管理系统源码,学生教师端分离,支持数据的增删查改、数据分析与统计 基于Tkinter带图形界面

介绍 Python学生信息管理系统。学生教师端分离&#xff0c;支持数据的增删查改、数据分析与统计。 下载地址&#xff1a;Python学生信息管理系统源码 软件架构 Python3.9版本 Python-Tkinter库开发的图形界面 Python-Pandas库数据处理 Python-matplotlib库数据分析与展示 P…

这些年工作以来自己读过的书

->上学时不喜欢读书看见书就烦&#xff0c;就想把书拿来垫东西->工作时强迫自己读书有时会强迫饭后看半小时&#xff0c;有时又会强迫看50页&#xff0c;有时又会看着看着直接睡着了&#xff0c;越看越疲劳->慢慢接受每月读书的习惯制定计划&#xff0c;每月看多少&am…

ArcGIS基础实验操作100例--实验73创建闭合线内部缓冲区

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验73 创建闭合线内部缓冲区 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff0…

不可错过,Java程序员必备珍藏书单

不要因为迷茫&#xff0c;而停止了脚下的路。给大家推荐一份Java程序员必看的书单&#xff0c;豆瓣评分都挺不错的&#xff0c;往下看&#xff01; 一、Java 基础篇书单 《Java编程思想》&#xff1a;从Java的基础语法到最高级特性&#xff08;深入的面向对象概念、多线程、自…

数据仓库基础知识(维度建模)

一、数据仓库概述1.1 数据仓库定义数据仓库&#xff1a;Data Warehouse&#xff0c;是为企业所决策制定过程&#xff0c;提供所有支持类型的数据集合。用于分析性报告和决策支持。数仓是一个面向主题、集成的、相对稳定、反应历史变化的数据集合&#xff0c;随着大数据技术的发…

剑指offer----C语言版----第十四天

表示数值的字符串 原题链接&#xff1a;剑指 Offer 20. 表示数值的字符串 - 力扣&#xff08;LeetCode&#xff09;1.1 题目描述 请实现一个函数用来判断字符串是否表示数值&#xff08;包括整数和小数&#xff09;。数值&#xff08;按顺序&#xff09;可以分成以下几个部分&a…

GDI对象泄漏导致程序UI界面绘制异常的问题排查

目录 1、问题说明 2、初步分析 3、查看任务管理器&#xff0c;并使用GDIView工具分析 4、GDIView可能对Win10兼容性不好&#xff0c;显示的GDI对象个数不太准确 5、采用历史版本比对法&#xff0c;确定初次出现问题的时间点&#xff0c;并查看前一天的代码修改记录 6、将…

特定领域知识图谱知识融合方案(实体对齐)

优酷领域知识图谱为例{基础方案}1.1领域知识图谱模式层构建(业务侧已完成) 在领域知识图谱中,模式层(Schema Level)的构建一般会先于数据层,知识图谱的schema在构建过程中,不仅借助行业专业人员并对大量的底层数据做分析和提炼来明确领域的基本属性、明确属性的适用概念、…