一起学Vue之样式绑定

本文详细介绍了在Vue.js中如何使用v-bind:class和v-bind:style动态绑定HTML元素的class列表和内联样式。包括对象语法、数组语法、计算属性的使用以及多重值的支持,展示了多种灵活的样式绑定方式。
摘要由CSDN通过智能技术生成

在前端开发中,设置元素的 class 列表和内联样式是基本要求。本文主要讲解Vue开发中,样式列表和内联样式的绑定,仅供学习分享使用,如果有不足之处,还请指正。

概述

Vue操作元素的 class 列表和内联样式是数据绑定的一个常见需求。因为它们都是属性,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可。不过,字符串拼接麻烦且易错。因此,在将 v-bind 用于 class 和 style 时,Vue.js 做了专门的增强。表达式结果的类型除了字符串之外,还可以是对象或数组。

绑定 HTML Class

可以传给 v-bind:class 一个对象,以动态地切换 class:

<div v-bind:class="{red:isred,bold:isbold}">混合样式1--绑定数据属性</div>

上面的语法表示 red 这个 class 存在与否将取决于数据属性 isred 的 是否为true。你可以在对象中传入更多属性来动态切换多个 class。此外,v-bind:class 指令也可以与普通的 class 属性共存。

绑定的数据对象采用复合样式的效果,不必内联定义在模板里,如下所示:

<div v-bind:class="multi">混合样式2---复合对象</div>

其中multi是一个复合数据对象,如下所示:

<script type="text/javascript">
    var vm=new Vue({
        el:"#app",
        data:{
            bg:'yellow',
            isbold:true,
            isred:true,
            multi:{
                red:true,
                bold:true,
            }
        }

    });
</script>

以上两种,结果渲染是一样的,如下所示:

<div class="red bold"></div>

绑定计算属性

我们也可以在这里绑定一个返回对象的计算属性。这是一个常用且强大的模式:

<div v-bind:class="cmpstyle">混合样式3---计算属性</div>

其中cmpstyle是一个计算属性,返回的对象,如下所示:

<script type="text/javascript">
    var vm=new Vue({
        el:"#app",
        computed:{
            cmpstyle:function(){
                return {
                    red:true,
                    bold:true,
                }
            }
        }
    });
</script>

CSS数组语法

我们可以把一个数组传给 v-bind:class,以应用一个 class 列表:

<div v-bind:class="arrcss">混合样式4---数组绑定样式</div>

其中arrcss是一个数组样式,如下所示:

<script type="text/javascript">
    var vm=new Vue({
        el:"#app",
        data:{
            arrcss:['red','bold'],
        }
    });
</script>

绑定内联样式

v-bind:style 的对象语法十分直观——看着非常像 CSS,但其实是一个 JavaScript 对象。CSS 属性名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用引号括起来) 来命名:

<div v-bind:style="{color:bg2}">内联样式2--属性</div>

绑定内联样式,直接绑定到一个样式对象通常更好,这会让模板更清晰:

<div v-bind:style="bg3">内联样式3--绑定对象</div>

其中,bg3是一个对象,如下所示:

<script type="text/javascript">
    var vm=new Vue({
        el:"#app",
        data:{
            bg2:'green',
            bg3:{
                color:'red',
                fontSize:'30px'
            }
        }
    });
</script>

内联样式数组语法

v-bind:style 的数组语法可以将多个样式对象应用到同一个元素上:

<div v-bind:style="[bg3,bg4]">内联样式4--绑定对象</div>

多重值

从 2.3.0 起你可以为 style 绑定中的属性提供一个包含多个值的数组,常用于提供多个带前缀的值,例如:

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

这样写只会渲染数组中最后一个被浏览器支持的值。在本例中,如果浏览器支持不带浏览器前缀的 flexbox,那么就只会渲染 display: flex。

本示例中源码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>一起学Vue之绑定样式</title>
        <!-- 开发环境版本,包含了有帮助的命令行警告 -->
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <style type="text/css">
            .red{
                color:red;
            }
            .yellow{
                color: goldenrod;
            }
            .green{
                color: green;
            }
            .bold{
                font:bolder;
                font-style: oblique;
            }
        </style>
    </head>
    <body>
        <div id="app">
            <div v-bind:class="bg">
                这是我的颜色
            </div>
            <!--
                作者:Alan.hsiang@qq.com
                时间:2019-11-20
                描述:Html样式:可以传给 v-bind:class 一个对象,以动态地切换 class:
                上面的语法表示 active 这个 class 存在与否将取决于数据属性 isActive 的 是否为true。
            -->
            <div v-bind:class="{red:isred,bold:isbold}">混合样式1--绑定数据属性</div>
            <!--
                作者:Alan.hsiang@qq.com
                时间:2019-11-20
                描述:绑定的数据对象采用复合样式的效果,不必内联定义在模板里
            -->
            <div v-bind:class="multi">混合样式2---复合对象</div>
            <!--
                作者:Alan.hsiang@qq.com
                时间:2019-11-20
                描述:绑定计算属性
            -->
            <div v-bind:class="cmpstyle">混合样式3---计算属性</div>
            <!--
                作者:Alan.hsiang@qq.com
                时间:2019-11-20
                描述:数组绑定样式
            -->

            <div v-bind:class="arrcss">混合样式4---数组绑定样式</div>
            <!--
                作者:Alan.hsiang@qq.com
                时间:2019-11-20
                描述:绑定内联样式,直接绑定到一个样式对象通常更好,这会让模板更清晰:
            -->
             <div v-bind:style="{color:bg2}">内联样式2--属性</div>
              <div v-bind:style="bg3">内联样式3--绑定对象</div>
              <!--
                  作者:Alan.hsiang@qq.com
                  时间:2019-11-20
                  描述:也可以绑定数组
              -->
               <div v-bind:style="[bg3,bg4]">内联样式4--绑定对象</div>
        </div>
        <script type="text/javascript">
            var vm=new Vue({
                el:"#app",
                data:{
                    bg:'yellow',
                    isbold:true,
                    isred:true,
                    multi:{
                        red:true,
                        bold:true,
                    },
                    arrcss:['red','bold'],
                    bg2:'green',
                    bg3:{
                        color:'red',
                        fontSize:'30px'
                    },
                    bg4:{
                        fontStyle:'italic'
                    }
                },
                computed:{
                    cmpstyle:function(){
                        return {
                            red:true,
                            bold:true,
                        }
                    }
                }
            });
        </script>
    </body>
</html>

备注

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老码识途呀

写作不易,多谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值