Vue Class 与 Style 绑定

news/2025/11/28 10:09:38/文章来源:https://www.cnblogs.com/Jing61/p/19280601

Vue Class 与 Style 绑定

数据绑定的一个常见需求场景是操纵元素的 CSS class 列表和内联样式。因为 class 和 style 都是 attribute,我们可以和其他 attribute 一样使用 v-bind 将它们和动态的字符串绑定。但是,在处理比较复杂的绑定时,通过拼接生成字符串是麻烦且易出错的。因此,Vue 专门为 class 和 style 的 v-bind 用法提供了特殊的功能增强。除了字符串外,表达式的值也可以是对象或数组。

绑定 HTML class

绑定对象​

我们可以给 :class(v-bind:class 的缩写)传递一个对象来动态切换 class:

<div :class="{ active: isActive }"></div>

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

你可以在对象中写多个字段来操作多个 class。此外,:class 指令也可以和一般的 class attribute 共存。举例来说,下面这样的状态:

const isActive = ref(true)
const hasError = ref(false)
<div class="static" :class="{ active: isActive, 'text-danger': hasError }"></div>

渲染的结果会是:

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

当 isActive 或者 hasError 改变时,class 列表会随之更新。举例来说,如果 hasError 变为 true,class 列表也会变成 "static active text-danger"。

绑定的对象并不一定需要写成内联字面量的形式,也可以直接绑定一个对象:

const classObject = reactive({active: true,'text-danger': false
})
<div :class="classObject"></div>

这将渲染:

<div class="active"></div>

我们也可以绑定一个返回对象的计算属性。这是一个常见且很有用的技巧:

const isActive = ref(true)
const error = ref(null)const classObject = computed(() => ({active: isActive.value && !error.value,'text-danger': error.value && error.value.type === 'fatal'
}))
<div :class="classObject"></div>

绑定数组​

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

const activeClass = ref('active')
const errorClass = ref('text-danger')
<div :class="[activeClass, errorClass]"></div>

渲染的结果是:

<div class="active text-danger"></div>

如果你也想在数组中有条件地渲染某个 class,你可以使用三元表达式:

<div :class="[isActive ? activeClass : '', errorClass]"></div>

errorClass 会一直存在,但 activeClass 只会在 isActive 为真时才存在。

然而,这可能在有多个依赖条件的 class 时会有些冗长。因此也可以在数组中嵌套对象:

<div :class="[{ [activeClass]: isActive }, errorClass]"></div>

在组件上使用​

对于只有一个根元素的组件,当你使用了 class attribute 时,这些 class 会被添加到根元素上并与该元素上已有的 class 合并。

举例来说,如果你声明了一个组件名叫 MyComponent,模板如下:

<!-- 子组件模板 -->
<p class="foo bar">Hi!</p>

在使用时添加一些 class:

<!-- 在使用组件时 -->
<MyComponent class="baz boo" />

渲染出的 HTML 为:

<p class="foo bar baz boo">Hi!</p>

Class 的绑定也是同样的:

<MyComponent :class="{ active: isActive }" />

当 isActive 为真时,被渲染的 HTML 会是:

<p class="foo bar active">Hi!</p>

如果你的组件有多个根元素,你将需要指定哪个根元素来接收这个 class。你可以通过组件的 $attrs 属性来指定接收的元素:

<!-- MyComponent 模板使用 $attrs 时 -->
<p :class="$attrs.class">Hi!</p>
<span>This is a child component</span>
<MyComponent class="baz" />

这将被渲染为:

<p class="baz">Hi!</p>
<span>This is a child component</span>

绑定内联样式​

绑定对象​

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

const activeColor = ref('red')
const fontSize = ref(30)
<div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>

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

<div :style="{ 'font-size': fontSize + 'px' }"></div>

直接绑定一个样式对象通常是一个好主意,这样可以使模板更加简洁:

const styleObject = reactive({color: 'red',fontSize: '30px'
})
<div :style="styleObject"></div>

同样的,如果样式对象需要更复杂的逻辑,也可以使用返回样式对象的计算属性。

:style 指令也可以和常规的 style attribute 共存,就像 :class。

模板:

<h1 style="color: red" :style="'font-size: 1em'">hello</h1>

这将被渲染为:

<h1 style="color: red; font-size: 1em;">hello</h1>

绑定数组​

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

<div :style="[baseStyles, overridingStyles]"></div>

自动前缀​

当你在 :style 中使用了需要浏览器特殊前缀的 CSS 属性时,Vue 会自动为他们加上相应的前缀。Vue 是在运行时检查该属性是否支持在当前浏览器中使用。如果浏览器不支持某个属性,那么将尝试加上各个浏览器特殊前缀,以找到哪一个是被支持的。

样式多值​

你可以对一个样式属性提供多个(不同前缀的)值,举例来说:

<div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>

数组仅会渲染浏览器支持的最后一个值。在这个示例中,在支持不需要特别前缀的浏览器中都会渲染为 display: flex。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/979345.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【译】Visual Studio 十月更新 —— 新模型、记忆功能、计划功能及更多内容

2025年10月的 Visual Studio 2022(v17.14)更新现已发布。本月,我们为您带来了模型选择和智能体流程方面的改进。新模型我们的聊天窗口中现已提供 Claude Sonnet 4.5 和 Claude Haiku 4.5。这意味着,推动您的智能体…

2025年初中物理培训机构深度推荐:专业师资+教学案例,学习更靠谱!

在竞争激烈的初中物理培训市场中,如何为孩子挑选一家既专业又靠谱的培训机构,成为众多家长的心头之急。毕竟,物理作为一门基础学科,不仅关乎孩子的学业成绩,更影响着他们未来的科学素养和逻辑思维能力。今天,我们…

Swift底层原理学习笔记

Swift 底层原理学习笔记 Swift 作为 Apple 推出的现代编程语言,兼具高效性与安全性,其底层原理涉及编译机制、内存管理、类型系统等核心模块。以下从关键维度梳理 Swift 底层原理要点,结合源码与实践深化理解: 一、…

基于ESP32-C3驱动BL0942电参数采集模块Arduino代码

1.全部代码// ESP32-C3 UART1 配置 #define UART1_RX_PIN 4 //接BL0942模块的T引脚 #define UART1_TX_PIN 3 //接BL0942模块的R引脚 #define BAUDRATE 9600 //波特率9600#define MAX_C 10 //BL0942模块电流最大值,…

氮气压缩机厂家哪家好?2025天然气压缩机源头工厂实力榜

在工业生产与能源输送领域,气体压缩机作为核心设备,其性能稳定性与适配性直接影响生产效率与安全。市场中一批专注细分领域的源头工厂凭借技术沉淀与精准服务崭露头角。以下结合产品实力、场景适配性与市场口碑,梳理…

2025年本地人推荐的火锅品牌口碑排行榜TOP10,特色美食/美食/火锅/火锅店/重庆火锅/老火锅/川渝火锅火锅品牌排行

前言 随着火锅行业的持续发展,消费者对品质与体验的要求日益提升。基于市场调研与公开数据,我们特别推出本地人推荐火锅品牌口碑排行榜,聚焦那些深受回头客青睐的优质品牌。本榜单从推荐理由、核心优势等维度进行深…

闭眼入不翻车!荷兰蔻帝、立邦这些艺术涂料,形象质感双在线,提升家的档次

选对艺术涂料,家的高级感立马提升一个档次 你是不是也在为装修犯愁?担心选错涂料,不仅装不出理想效果,还可能影响家人健康?别急,今天为你推荐几款闭眼入都不翻车的艺术涂料品牌,让家的颜值和质感双双在线! 荷兰…

2025年2.0mm人工湖用防渗土工膜/光面防渗土工膜环保材料推荐榜

2025年2.0mm人工湖用防渗土工膜/光面防渗土工膜环保材料推荐榜行业背景与市场趋势随着我国生态文明建设的深入推进,人工湖作为城市景观和生态修复的重要组成部分,其防渗工程的质量要求日益提高。2.0mm厚度的防渗土工…

2025年11月铝箔袋厂家推荐列表:知名企业对比与用户口碑评价

在包装行业快速迭代的背景下,铝箔袋因其优异的阻隔性能和耐用性,成为食品、电子、医疗等领域的关键包装材料。2025年,随着环保政策收紧和消费市场对包装安全性要求的提升,铝箔袋厂家需同时应对成本控制、技术升级及…

2025年苏州婚礼策划机构权威推荐榜单:目的婚礼‌/草坪婚礼‌/西式婚礼源头机构精选

在苏州这座古典与现代交融的城市,新人们对婚礼的品质与个性化需求正推动着婚庆市场的专业化升级。 据《2025苏州婚庆行业白皮书》数据显示,每年约有12万对新人在苏州拍摄婚纱,其中超过68% 的新人将“风格适配度”与…

Mutual妙趣艺增长飞轮是什么?解码文娱IP资产化的三位一体创新引擎

Mutual妙趣艺以“让文娱IP成为资产”为使命,通过智能合约与金融科技的深度融合,构建起覆盖全球的文娱IP数字资产化生态体系。想要了解Mutual妙趣艺的运营模式和增长飞轮是什么?Mutual妙趣艺RWA业务是什么?文娱IP事…

2025年汽车隔热棉供货厂家权威推荐榜单:隔热泡棉‌/隔热海绵‌/隔音棉源头厂家精选

随着汽车轻量化和电动化趋势加速,高性能隔热材料市场正迎来快速增长,其中隔热泡棉、隔热海绵和隔音棉三大类产品成为行业焦点。 据QYResearch研究报告显示,全球汽车内饰隔热件市场预计到2031年将保持稳定增长。另一…

python笔记-小整数

1、小整数概念python中的小整数,通常指的是-5至256之前的整数 当你在python中创建一个整数对象时,python会根据该整数的值动态地址为其分配内存空间。 对于小整数python会使用一种称为“小整数缓存”的机制来优化内存…

ESPIDF在VScode内打不开SDKconfig解决办法

​ 如图所示,编译与烧录均正常,但SDKconfig无法打开,删除build目录重新编译后也无法打开,同时右下角加载进度条卡死在1/4或者最后处,报错内容通常为.py文件或者GBK编码报错 原因是新电脑配置环境时未勾选UTF-8适配…

扫描线+图论优化学习笔记

虽然CPP给的标题是线段树,但是由于后面又加了道和线段树无关的题目,然后发现这个扫描线还在二维数点里面有使用,就一并完成了,所以姑且称为 扫描线+图论优化 Part 1 扫描线 oi-wiki如是说: 扫描线一般运用在图形上…

2025年耐用的集束电缆/矿物质防火电缆厂家最新用户好评榜

2025年耐用的集束电缆/矿物质防火电缆厂家用户好评榜行业背景与市场趋势随着全球能源需求的持续增长和基础设施建设的加速推进,电线电缆行业迎来了前所未有的发展机遇。特别是在"双碳"目标背景下,高效、安…

2025年优质的淋浴房配件厂家最新热销排行

2025年优质的淋浴房配件厂家热销排行行业背景与市场趋势随着人们生活品质的不断提升,卫浴空间作为家居生活的重要组成部分,其舒适度和美观度越来越受到消费者的重视。淋浴房作为现代卫浴空间的核心元素,其配件质量直…

重点高中退休教师授课培训机构,2025年高中培训机构权威评估指南

在高中学习的关键阶段,每一位学子都渴望找到那个能助力自己突破瓶颈、实现飞跃的特训班。无论是面对压轴题的挑战,还是中档题的困扰,选择一家靠谱的特训机构都至关重要。在众多选择中,选择有重点高中退休教师授课培…

番茄工作法计时器:专注力与效率的简洁管理工具

在信息爆炸、注意力分散的时代,如何保持高效专注成为许多人面临的挑战。番茄工作法计时器正是基于这一需求应运而生的经典时间管理工具。它通过一种简单而强大的机制,帮助用户将精力集中在当前任务上,从而显著提升工…

2025精密塑胶模具厂家测评大盘点

2025精密塑胶模具厂家测评大盘点!在选择精密塑胶模具厂家时,建议从以下几个维度进行考量:首先关注企业的专业领域与自身需求是否匹配,比如是否专注于特定行业或产品类型;其次可以考察其技术装备与研发能力,这关系…