在前端开发中,设置元素的 class 列表和内联样式是基本要求。本文主要讲解Vue开发中,样式列表和内联样式的绑定,仅供学习分享使用,如果有不足之处,还请指正。
概述
Vue操作元素的 class 列表和内联样式是数据绑定的一个常见需求。因为它们都是属性,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可。不过,字符串拼接麻烦且易错。因此,在将 v-bind 用于 class 和 style 时,Vue.js 做了专门的增强。表达式结果的类型除了字符串之外,还可以是对象或数组。
绑定 HTML Class
可以传给 v-bind:class 一个对象,以动态地切换 class:
1 <div v-bind:class="{red:isred,bold:isbold}">混合样式1--绑定数据属性div>
上面的语法表示 red 这个 class 存在与否将取决于数据属性 isred 的 是否为true。你可以在对象中传入更多属性来动态切换多个 class。此外,v-bind:class 指令也可以与普通的 class 属性共存。
绑定的数据对象采用复合样式的效果,不必内联定义在模板里,如下所示:
1 <div v-bind:class="multi">混合样式2---复合对象div>
其中multi是一个复合数据对象,如下所示:
1
以上两种,结果渲染是一样的,如下所示:
1 <div class="red bold">div>
绑定计算属性
我们也可以在这里绑定一个返回对象的计算属性。这是一个常用且强大的模式:
1 <div v-bind:class="cmpstyle">混合样式3---计算属性div>
其中cmpstyle是一个计算属性,返回的对象,如下所示:
1
CSS数组语法
我们可以把一个数组传给 v-bind:class,以应用一个 class 列表:
1 <div v-bind:class="arrcss">混合样式4---数组绑定样式div>
其中arrcss是一个数组样式,如下所示:
1
绑定内联样式
v-bind:style 的对象语法十分直观——看着非常像 CSS,但其实是一个 JavaScript 对象。CSS 属性名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用引号括起来) 来命名:
1 <div v-bind:style="{color:bg2}">内联样式2--属性div>
绑定内联样式,直接绑定到一个样式对象通常更好,这会让模板更清晰:
1 <div v-bind:style="bg3">内联样式3--绑定对象div>
其中,bg3是一个对象,如下所示:
1
内联样式数组语法
v-bind:style 的数组语法可以将多个样式对象应用到同一个元素上:
1 <div v-bind:style="[bg3,bg4]">内联样式4--绑定对象div>
多重值
从 2.3.0 起你可以为 style 绑定中的属性提供一个包含多个值的数组,常用于提供多个带前缀的值,例如:
1 <div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }">div>
这样写只会渲染数组中最后一个被浏览器支持的值。在本例中,如果浏览器支持不带浏览器前缀的 flexbox,那么就只会渲染 display: flex。
本示例中源码如下:
1 DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>一起学Vue之绑定样式title> 6 7 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script> 8 <style type="text/css"> 9 .red{ 10 color:red; 11 } 12 .yellow{ 13 color: goldenrod; 14 } 15 .green{ 16 color: green; 17 } 18 .bold{ 19 font:bolder; 20 font-style: oblique; 21 } 22 style> 23 head> 24 <body> 25 <div id="app"> 26 <div v-bind:class="bg"> 27 这是我的颜色 28 div> 29 35 <div v-bind:class="{red:isred,bold:isbold}">混合样式1--绑定数据属性div> 36 41 <div v-bind:class="multi">混合样式2---复合对象div> 42 47 <div v-bind:class="cmpstyle">混合样式3---计算属性div> 48 53 54 <div v-bind:class="arrcss">混合样式4---数组绑定样式div> 55 60 <div v-bind:style="{color:bg2}">内联样式2--属性div> 61 <div v-bind:style="bg3">内联样式3--绑定对象div> 62 67 <div v-bind:style="[bg3,bg4]">内联样式4--绑定对象div> 68 div> 69 <script type="text/javascript"> 70 var vm=new Vue({ 71 el:"#app", 72 data:{ 73 bg:'yellow', 74 isbold:true, 75 isred:true, 76 multi:{ 77 red:true, 78 bold:true, 79 }, 80 arrcss:['red','bold'], 81 bg2:'green', 82 bg3:{ 83 color:'red', 84 fontSize:'30px' 85 }, 86 bg4:{ 87 fontStyle:'italic' 88 } 89 }, 90 computed:{ 91 cmpstyle:function(){ 92 return { 93 red:true, 94 bold:true, 95 } 96 } 97 } 98 }); 99 script> 100 body> 101 html>
备注
不管见识高低,一个人深度整理和收拾自己的内心,这事本身就很迷人。我努力奔跑只为追上曾经被寄予厚望的自己!!!