美文网首页
样式绑定

样式绑定

作者: 灯光树影 | 来源:发表于2018-10-21 20:20 被阅读0次

    一、前言

    我们知道,html标签的样式一般通过class和style来声明。由于class和style都是标签的属性,所以可以使用v-bind( : )来绑定class和style的值。样式的声明支持字符串、对象和数组。

    二、class的绑定

    • 使用字符串
    <div id="app">
        <a v-bind:class="status + ' btn'">123</a>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                status: 'active'
            }
        });
    </script>
    

    生成的dom是:

    <a class="active btn">123</a>
    
    • 使用对象
      对象主要用于类的切换,如果值为truthness,那么键名就会被编译成类名
    <div id="app">
        <a v-bind:class="{active: isActive}">123</a>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                isActive: true
            }
        });
    </script>
    

    生成的dom是:

    <a class="active">123</a>
    

    注意:这时不能使用{active: isActive} + btn来给class绑定可切换的active和btn两个类,因为vue会把它解释为[object Object] undefined

    提示:也可以将对象放到data的一个属性中,class只要绑定这个属性即可

    • 使用数组
      数组用于绑定多个class
    <div id="app">
        <a v-bind:class="[active, 'btn']">123</a>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
               active: 'active'
            }
        });
    </script>
    

    生成的dom是:

    <a class="active btn">123</a>
    

    提示:绑定class的表达式中可以出现简单的js逻辑,比如三元运算符,字符串表示等。这与之前说的vue的html模板有简单的js解释器有关。

    • 嵌套
      数组语法可以嵌套对象语法
      应用场景一般是标签有多个类需要绑定,而其中有些类需要切换
    <div id="app">
        <a v-bind:class="[{active: isActive}, 'btn', btnType]">123</a>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                isActive: true,
                btnType: 'btn-success'
            }
        });
    </script>
    

    生成的dom是:

    <a class="active btn btn-success">123</a>
    

    三、style的绑定

    因为style的每条样式属性都由键值对组成,所以style不能直接使用字符串。值得注意的是:vue会自动给绑定的个别css属性添加浏览器兼容性前缀

    • 使用对象
    <div id="app">
        <a v-bind:style="{color: color, background: 'yellow'}">123</a>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                color: 'red'
            }
        });
    </script>
    

    生成的dom是:

    <a style="color: red; background: yellow;">123</a>
    

    提示:同理,也可以把对象保存为data的一个属性来使用

    • 使用数组
      使用数组可以使用多个对象定义的样式
    <div id="app">
        <a v-bind:style="[bgObj, fontObj]">123</a>
    </div>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                bgObj: {
                    backgroundColor: 'yellow'
                },
                fontObj: {
                    fontSize: '20px',
                    color: 'red'
                }
            }
        });
    </script>
    

    生成的dom是:

    <a style="background-color: yellow; font-size: 20px; color: red;">123</a>
    
    • 嵌套
      对象语法可以嵌套数组语法
      主要应用场景是在使用需要添加前缀的css属性时,筛选出能被浏览器识别的值
    <div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>
    

    在chrome中,生成的dom是

    <div style="display: flex;"></div>
    

    相关文章

      网友评论

          本文标题:样式绑定

          本文链接:https://www.haomeiwen.com/subject/jlibzftx.html