Vue动态绑定样式

虽然经常使用动态绑定样式的方法,但有时候突然要用,一瞬间还是会有点困惑,决定记录一下,方便混乱的时候查阅。

绑定 HTML class

绑定对象

javascript 复制代码
<div :class="{ active: isActive }"></div>
javascript 复制代码
<div
  class="static"
  :class="{ active: isActive, 'text-danger': hasError }">
</div>

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

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

绑定数组

javascript 复制代码
<div :class="[activeClass, errorClass]"></div>
javascript 复制代码
<div :class="[isActive ? activeClass : '', errorClass]"></div>
javascript 复制代码
<div :class="[{ active: isActive }, errorClass]"></div>

在组件上使用

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

javascript 复制代码
<!-- 子组件模板 -->
<p class="foo bar">Hi!</p>

在使用时添加一些 class:

javascript 复制代码
<!-- 在使用组件时 -->
<MyComponent class="baz boo" />

渲染出的 HTML 为:

javascript 复制代码
<p class="foo bar baz boo">Hi!</p>

Class 的绑定也是同样的:

javascript 复制代码
<MyComponent :class="{ active: isActive }" />

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

javascript 复制代码
<p class="foo bar active">Hi!</p>

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

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

这将被渲染为:

javascript 复制代码
<p class="baz">Hi!</p>
<span>This is a child component</span>

绑定内联样式

绑定对象

javascript 复制代码
<div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div>
javascript 复制代码
<div :style="{ 'font-size': fontSize + 'px' }"></div>

绑定数组

javascript 复制代码
<div :style="[baseStyles, overridingStyles]"></div>

自动前缀

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

样式多值

可以对一个样式属性提供多个 (不同前缀的) 值。

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

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

相关推荐
love530love3 小时前
【笔记】AutoClaw NSIS 安装器卡死、进程杀不掉、目录删不了?我是这么解决的
人工智能·windows·笔记·agent
胡萝卜术4 小时前
当大模型遇上浏览器:用 React + WebGPU 在前端跑通 DeepSeek-R1 的实战笔记
前端·javascript·面试
不好听6134 小时前
Tailwind CSS 原子化 CSS 完全入门:为什么现代前端开发都在用?
前端·css
触底反弹4 小时前
🔥 React 零基础入门(上):环境搭建 + JSX 深度解析
前端·react.js·typescript
why技术4 小时前
分享一套我一直在使用的 AICoding 组合拳,小而美的典范。
前端·后端·ai编程
朦胧之5 小时前
AI应用-消费流式输出
前端·javascript·ai编程
小林ixn5 小时前
在浏览器跑通 15 亿参数大模型:我用 React + WebGPU 复刻了 DeepSeek-R1
前端·react.js·前端框架
Csvn5 小时前
容器查询 @container 实战:告别无休止的媒体查询
前端
谙弆悕博士6 小时前
系统集成项目管理工程师教程(第3版)笔记——第2章:信息技术发展
笔记·计算机网络·信息安全·学习方法·业界资讯·软考·系统分析师
世人万千丶6 小时前
鸿蒙Flutter TextStyle样式配置
学习·flutter·harmonyos·鸿蒙