VUE入门到实战--Vue样式绑定

1、样式绑定

1.1、class对象绑定

1、对象绑定有下面这几种:对象内联绑定对象外联,计算属性。

2、对象内联绑定:通过在元素上使用class与某个对象绑定,通过对象的属性值来控制样式的显示与否。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./vue.js"></script>
    <style>
        .activated {
            color: red;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div id="app">
        <div @click="handleDivClick"
            :class="{activated:isActivated}" 
        ><!--这个div绑定了一个名字叫做activated的class,这个样式的显示与否取决于isActivated-->
            Hello World
        </div>
    </div>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                isActivated: false,//isActivated控制样式的显示与否
            },
            methods: {
                handleDivClick:function() {
                    this.isActivated=!this.isActivated;
                }
            }
        })
    </script>
</body>
</html>

3、对象外联:绑定的数据对象不必内联定义在模板里:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./vue.js"></script>
    <style>
        .activated {
            color: red;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div id="app">
        <div @click="handleDivClick"
            :class="classObj" 
        ><!--1、这里使用的就是一种外联对象-->
            Hello World
        </div>
    </div>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                //2、外联对象中的键值对是CSS选择器:true/false
                classObj: {
                    activated: false,
                }
                
            },
            methods: {
                handleDivClick:function() {
                    this.classObj.activated = !this.classObj.activated;
                }
            }
        })
    </script>
</body>
</html>

4、渲染的结果和上面一样。我们也可以在这里绑定一个返回对象的计算属性。这是一个常用且强大的模式:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./vue.js"></script>
    <style>
        .activated {
            color: red;
            cursor: pointer;
        }
    </style>
</head>
<body>
    <div id="app">
        <div @click="handleDivClick"
            :class="classObj" 
        ><!--1、这里使用的就是一种计算属性-->
            Hello World
        </div>
    </div>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                isAcitve: true,
                error: false, 
            },
            computed: {
                //2、计算属性的返回值就是个对象,对象中的键值对还是CSS选择器:true/false(表达式决定)
                classObj: function() {
                    return {
                        activated: this.isAcitve&&this.error,
                    }
                }
               
            },
            methods: {
                handleDivClick:function() {
                   this.error = !this.error;
                }
            }
        })
    </script>
</body>
</html>

5、扩充:当在一个自定义组件上使用 class 属性时,这些类将被添加到该组件的根元素上面。这个元素上已经存在的类不会被覆盖。比如说下面这两个例子

<my-component class="baz boo"></my-component>
    ...
Vue.component('my-component', {
  template: '<p class="foo bar">Hi</p>'
})

//上面两者将被渲染成为:
<p class="foo bar baz boo">Hi</p>
<my-component v-bind:class="{ active: isActive }"></my-component>
    ...
Vue.component('my-component', {
  template: '<p class="foo bar">Hi</p>'
})

//上面两者被渲染为:
<p class="foo bar active">Hi</p>

1.2、class数组绑定

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="./vue.js"></script>
    <style>
        .changeRed {
            color: red;
            cursor: pointer;
        }
        .changeBig {
            font-size: 1.5em;
        }
        .line {
            text-decoration-line: underline;
        }
    </style>
</head>
<body>
    <div id="app">
        <div @click="handleDivClick"
            :class="[activatedone,activatedtwo]" 
        ><!--将样式的控制用一个数组来表示,数组中可以有多个元素,每个元素又可以对应多个CSS样式名称-->
            Hello World
        </div>
    </div>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                activatedone: "", //变量的值就是CSS样式的名称
                activatedtwo: "",
            },
            methods: {
                handleDivClick:function() {
                    this.activatedone=this.activatedone==="changeRed changeBig"?"":"changeRed changeBig";//重复变化
                    this.activatedtwo=this.activatedtwo==="line"?"":"line";
                }
            }
        })
    </script>
</body>
</html>

1.3、style对象绑定样式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue样式绑定style</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="app"><!--这将style绑定在一个js表达式,而这个JS表达式是个对象-->
        <div :style="styobj" @click="handleBtnClick">
            hello world
        </div>
    </div>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                styobj: {/*这里就像写原生一样写CSS就行了*/
                    color: "black",
                    cursor: "pointer",
                }
            },
            methods: {
                handleBtnClick:function() {
                    this.styobj.color=this.styobj.color==="black"?"red":"black";
                }
            }
        })
    </script>
</body>
</html>

1.4、style数组绑定样式

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Vue样式绑定style</title>
    <script src="./vue.js"></script>
</head>
<body>
    <div id="app"><!--这将style绑定在一个数组中,数组中每个元素又是JS对象-->
        <div :style="[styobj,{fontSize:'20px'}]" @click="handleBtnClick">
            hello world
        </div>
    </div>
    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                styobj: {/*这里就像写原生一样写CSS就行了*/
                    color: "black",
                    cursor: "pointer",
                }
            },
            methods: {
                handleBtnClick:function() {
                    this.styobj.color=this.styobj.color==="black"?"red":"black";
                }
            }
        })
    </script>
</body>
</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值