在前端开发中,设置元素的 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 <script type="text/javascript"> 2 var vm=new Vue({ 3 el:"#app", 4 data:{ 5 bg:'yellow', 6 isbold:true, 7 isred:true, 8 multi:{ 9 red:true, 10 bold:true, 11 } 12 } 13 14 }); 15 </script>
以上两种,结果渲染是一样的,如下所示:
1 <div class="red bold"></div>
绑定计算属性
我们也可以在这里绑定一个返回对象的计算属性。这是一个常用且强大的模式:
1 <div v-bind:class="cmpstyle">混合样式3---计算属性</div>
其中cmpstyle是一个计算属性,返回的对象,如下所示:
1 <script type="text/javascript"> 2 var vm=new Vue({ 3 el:"#app", 4 computed:{ 5 cmpstyle:function(){ 6 return { 7 red:true, 8 bold:true, 9 } 10 } 11 } 12 }); 13 </script>
CSS数组语法
我们可以把一个数组传给 v-bind:class,以应用一个 class 列表:
1 <div v-bind:class="arrcss">混合样式4---数组绑定样式</div>
其中arrcss是一个数组样式,如下所示:
1 <script type="text/javascript"> 2 var vm=new Vue({ 3 el:"#app", 4 data:{ 5 arrcss:['red','bold'], 6 } 8 }); 9 </script>
绑定内联样式
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 <script type="text/javascript"> 2 var vm=new Vue({ 3 el:"#app", 4 data:{ 5 bg2:'green', 6 bg3:{ 7 color:'red', 8 fontSize:'30px' 9 } 10 } 11 }); 12 </script>
内联样式数组语法
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 <!-- 30 作者:Alan.hsiang@qq.com 31 时间:2019-11-20 32 描述:Html样式:可以传给 v-bind:class 一个对象,以动态地切换 class: 33 上面的语法表示 active 这个 class 存在与否将取决于数据属性 isActive 的 是否为true。 34 --> 35 <div v-bind:class="{red:isred,bold:isbold}">混合样式1--绑定数据属性</div> 36 <!-- 37 作者:Alan.hsiang@qq.com 38 时间:2019-11-20 39 描述:绑定的数据对象采用复合样式的效果,不必内联定义在模板里 40 --> 41 <div v-bind:class="multi">混合样式2---复合对象</div> 42 <!-- 43 作者:Alan.hsiang@qq.com 44 时间:2019-11-20 45 描述:绑定计算属性 46 --> 47 <div v-bind:class="cmpstyle">混合样式3---计算属性</div> 48 <!-- 49 作者:Alan.hsiang@qq.com 50 时间:2019-11-20 51 描述:数组绑定样式 52 --> 53 54 <div v-bind:class="arrcss">混合样式4---数组绑定样式</div> 55 <!-- 56 作者:Alan.hsiang@qq.com 57 时间:2019-11-20 58 描述:绑定内联样式,直接绑定到一个样式对象通常更好,这会让模板更清晰: 59 --> 60 <div v-bind:style="{color:bg2}">内联样式2--属性</div> 61 <div v-bind:style="bg3">内联样式3--绑定对象</div> 62 <!-- 63 作者:Alan.hsiang@qq.com 64 时间:2019-11-20 65 描述:也可以绑定数组 66 --> 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>
备注
不管见识高低,一个人深度整理和收拾自己的内心,这事本身就很迷人。我努力奔跑只为追上曾经被寄予厚望的自己!!!