首页 > 编程笔记 > JavaScript笔记
阅读:36
Vue :class动态绑定样式(附带实例)
我们可以通过 HTML 元素的 class 属性、id 属性或直接使用标签名来进行 CSS 样式的绑定,其中,最为常用的是使用 class 的方式进行样式绑定。
在 Vue 中,对 class 属性的数据绑定进行了特殊的增强,从而方便通过布尔变量控制其设置的样式是否被选用。
v-bind 指令虽然可以直接对 class 属性进行数据绑定,但如果将绑定的值设置为一个对象,就会产生一种新的语法规则,设置的对象中可以指定对应的 class 样式是否被选用。Vue 为样式绑定提供了特殊的语法,在需要动态绑定样式的场景下非常好用。
编写如下示例代码:
需要注意,class 属性可绑定的值并不会冲突,如果设置的对象中有多个属性的值都是 true,那么它们都会被添加到 class 属性中。
在实际开发中,并不一定要用内联的方式为 class 绑定控制对象,我们也可以直接将其设置为一个 Vue 组件中的数据对象,修改代码如下:
HTML 元素:
Vue 还支持使用数组对象来控制 class 属性,示例代码如下:
HTML 元素:
在 Vue 中,对 class 属性的数据绑定进行了特殊的增强,从而方便通过布尔变量控制其设置的样式是否被选用。
v-bind 指令虽然可以直接对 class 属性进行数据绑定,但如果将绑定的值设置为一个对象,就会产生一种新的语法规则,设置的对象中可以指定对应的 class 样式是否被选用。Vue 为样式绑定提供了特殊的语法,在需要动态绑定样式的场景下非常好用。
编写如下示例代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>class 绑定</title> <script src="https://unpkg.com/vue@next"></script> <!-- 定义测试使用的样式表 --> <style> .red { color: red; } .blue { color: blue; } </style> </head> <body> <div id="Application"> <!-- 根据 isBlue / isRed 决定是否应用对应 class --> <div :class="{ blue: isBlue, red: isRed }"> 示例文案 </div> </div> <script> const { createApp, ref } = Vue; const config = { setup() { // 控制样式是否生效的属性 const isBlue = ref(true); const isRed = ref(false); return { isBlue, isRed }; } }; createApp(config).mount("#Application"); </script> </body> </html>如以上代码所示,其中 div 元素的 class 属性的值会根据 isBlue 和 isRed 属性的值而改变,当只有 isBlue 属性的值为 true 时,div 元素的 class 属性为 blue;同理,当只有 isRed 属性的值为 true 时,div 元素的 class 属性为 red。
需要注意,class 属性可绑定的值并不会冲突,如果设置的对象中有多个属性的值都是 true,那么它们都会被添加到 class 属性中。
在实际开发中,并不一定要用内联的方式为 class 绑定控制对象,我们也可以直接将其设置为一个 Vue 组件中的数据对象,修改代码如下:
HTML 元素:
<div :class="style"> 示例文案 </div>Vue 组件:
// 从 Vue 中解构所需 API const { createApp, ref } = Vue; const config = { setup() { // 控制样式选用的对象 const style = ref({ blue: true, red: false }); return { style }; } };修改后的代码在功能上保持不变,与之前的版本运行效果完全一致。在开发过程中,我们通常会将样式对象定义为计算属性来返回,这种方式可以显著提高组件样式控制的效率。
Vue 还支持使用数组对象来控制 class 属性,示例代码如下:
HTML 元素:
<!-- 数组中的样式表都会被添加 --> <div :class="[redClass, fontClass]"> 示例文案 </div>Vue 组件:
// 定义组件配置 const config = { setup() { const redclass = ref("red"); // 控制 red 类名 const fontclass = ref("font"); // 控制 font 类名 return { redclass, fontclass }; } };此时,只需要修改对应的 redClass 和 fontClass 属性的值,即可同步更改元素绑定的样式。