zoukankan      html  css  js  c++  java
  • 一起学Vue之样式绑定

    在前端开发中,设置元素的 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>
    View Code

    备注

    不管见识高低,一个人深度整理和收拾自己的内心,这事本身就很迷人。我努力奔跑只为追上曾经被寄予厚望的自己!!!

  • 相关阅读:
    17张程序员壁纸推荐,是否有一张你喜欢的?
    学会了这些英文单词,妈妈再也不用担心我学不会Python
    小白学习Python英语基础差怎么办,都帮你想好拉!看这里
    自动化测试学习防踩坑手册,测试人员人手一份
    Selenium自动化结合Mysql数据项目实战操作
    解除你学习Python自动化测试框架的所有疑惑,开启学习直通车
    数据库管理软件navicate12的激活和安装
    修改文件版本号方法
    Json的数据映射(基于LitJson)
    VMware 虚拟机安装黑屏问题
  • 原文地址:https://www.cnblogs.com/hsiang/p/12064085.html
Copyright © 2011-2022 走看看