vue-Class 与 Style 绑定
创始人
2025-05-31 20:54:31
0

vue-Class 与 Style 绑定

  • 绑定 HTML class
    • 绑定对象
    • 绑定数组
    • 在组件上使用
  • 绑定内联样式
    • 绑定对象
    • 绑定数组
    • 自动前缀
    • 样式多值

绑定 HTML class

绑定对象

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

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

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

data() {return {isActive: true,hasError: false}
}

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

data() {return {classObject: {active: true,'text-danger': false}}
}

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

data() {return {isActive: true,error: null}
},
computed: {classObject() {return {active: this.isActive && !this.error,'text-danger': this.error && this.error.type === 'fatal'}}
}

绑定数组

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

data() {return {activeClass: 'active',errorClass: 'text-danger'}
}

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

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

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

在组件上使用

对于只有一个根元素的组件,当你使用了 class attribute 时,这些 class 会被添加到根元素上,并与该元素上已有的 class 合并。
举例来说,如果你声明了一个组件名叫 MyComponent,模板如下:


Hi!

在使用时添加一些 class:


渲染出的 HTML 为:

Hi!

Class 的绑定也是同样的:

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

Hi!

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


Hi!

This is a child component

这将被渲染为:

Hi!

This is a child component

绑定内联样式

绑定对象

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

data() {return {activeColor: 'red',fontSize: 30}
}

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

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

data() {return {styleObject: {color: 'red',fontSize: '13px'}}
}

绑定数组

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

自动前缀

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

样式多值

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

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

相关内容

热门资讯

雅江超级工程核心受益标的建材E... 受“雅江”1.2万亿超级工程利好催化,建材ETF(159745)今日开盘再度大涨近3%,昨日收盘也同...
刚一字涨停,又曝利好! 【导读】刚因雅下水电概念涨停,中国电建公告上半年水电新签合同额暴增66% 中国基金报记者 南深 7月...
银行板块短线跳水,厦门银行跌超... 银行板块短线跳水, 厦门银行跌超4%, 渝农商行跌超3%, 西安银行、 江苏银行、 重庆银行、 民生...
【网金基金研究中心】壹佰金每周... 壹佰金一周基金市场动态 1、核心资讯一览 Wind数据显示,截至7月18日17时,A股共有1540家...
1.25万亿份,净申购! 【导读】今年二季度基金整体净申购1.25万亿份,货基和债基为主力军 中国基金报记者 张燕北 公募二季...
骑士乳业及董事长党涌涛等被罚3... 具体来看,2024年,骑士乳业开展了豆粕、白糖、尿素等期货交易业务。截至2024年1月17日,骑士乳...
现货黄金突破3400美元关口 ... 财联社7月22日讯(编辑 牛占林)周一美盘交易时段,现货黄金突破3400美元/盎司,为6月17日以来...
摩根大通:人工智能和动量交易过... 市场中最具投机性的领域可能变得过于热门,且热度攀升速度过快。 摩根大通在周一发布的一份研究报告中警告...
“金融科技第一股”退市加速 记者丨曹媛 编辑丨孙超逸 “金融科技第一股”金融壹账通(6638.HK/OCFT.N)正加速退市。 ...
公募管理规模历史首破34万亿! 公募基金2025年二季报披露完毕。 天相投顾数据显示,公募基金二季度末管理规模历史首次超过34万亿元...
京东旗下首家自营外卖门店“七鲜... 观点网讯:7月21日消息,京东集团旗下首家自营外卖门店“七鲜小厨”已于7月20日在北京正式开业,标志...
企业居民融资成本处低位 7月L... 7月21日,中国人民银行授权全国银行间同业拆借中心公布,1年期贷款市场报价利率(LPR)为3.0%,...
港股“双重优势”吸引QDII基... 本报记者 彭衍菘 随着公募基金二季报陆续披露,QDII基金的区域配置策略调整引发市场关注。Wind资...
夯筑起应对复杂变局的坚实依托 安六高速铁路上的动车组列车驶过贵州省安顺市普定县化处镇。新华社记者 陶亮 摄 ...
“强实名”仍一票难求?遏制技术... 暑期来临,演唱会、音乐节、话剧等演出活动热度飙升。无论手速多快,总是一票难求,让众多消费者叫苦不迭。...
上证红利回报指数上涨0.83%... 金融界7月21日消息,上证指数高开高走,上证红利回报指数 (上红回报,H50019)上涨0.83%,...
为啥股票与基金的走势相反? 虚位以待! 平姐姐摄于毛里求斯网红酒店 昨天的文章,标题就很明确,那就是《准备出击》,在半年报不少上...
美加密货币相关法案落地引发三连... 当地时间7月18日,美国总统特朗普在白宫正式签署《指导与建立美国稳定币国家创新法案》(简称《天才法案...
股市必读:湖南黄金(00215... 截至2025年7月21日收盘,湖南黄金(002155)报收于18.33元,上涨2.57%,换手率3....
四川发布六大红色旅游新线路 四川发布六大红色旅游新线路 “锦绣天府·安逸四川”之红色旅游央地媒体联动采访启动 “锦绣天府·安...