VUE之样式操作

149 阅读1分钟
VUE之样式操作

在数据绑定中,最常见得需求之二就是元素得样式名称class和内联style得动态绑定了,vue则使用v-bind指令来实现得;v-bind得基本用途事动态更新html元素上得属性,比如id或者class等等;

  • 1. class对象绑定

    给v-bind:class设置一个对象,可以动态得切换class;

<style>
    .red {
        color: red;
    }
    .show{
        display: unset;
    }
</style>
<body>
    <div id="app">
        <!-- 对象形式进行绑定时,当为false则代表不应用该属性,反之亦然。 -->
        <!-- 还可以使用正常的class=类名来定制不变的类。 -->
        <div :class="{red:status}" class="show">class绑定方式</div>
    </div>
    <script src="../js/vue.js"></script>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                status: true,
            }
        })
    </script>
</body>

页面显示:

image.png

  1. :class等同于v-bind:class,是一个语法糖;
  2. :class可以与普通class共存得;
  3. 使用对象形式绑定得时候,当为true得时候,代表应用该属性;当为false得时候,代表不应用该属性;
  4. 样式red依赖与status,根据它来决定得;
  5. 对象也可以传入多个属性得,动态切换class;
<p :class=[变量1,变量2,"字符串"]>内容</p>
<!-- `注意,当数组内的元素没有加引号是会认为是一个变量,会去Vue实例中寻找` -->
<!-- `如果数组内的元素加上引号,则被认位是一个字符串` -->
<style>
    .show{
        display: unset;
    }
</style>

<body>
    <div id="app">
        <p :class=[actives,color,'show']>class绑定方式</p>
    </div>
    <script src="./vue.js"></script>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                actives: "active",
                color: "red",
            }
        })
    </script>
</body>

也可以使用三元表达式来根据条件切换

<body>
    <div id="app">
        <p :class=[isActives?active:'','color']>class绑定方式</p>
    </div>
    <script src="./vue.js"></script>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                isActives:true,
                actives: "active",
                color: "color",
            }
        })
    </script>
</body>

class有多个条件时候可以在数组中使用对象语法;

<body>
    <div id="app">
        <p :class=[{'active':isActives}'color']>class绑定方式</p>
    </div>
    <script src="./vue.js"></script>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                isActives:true,
                color: "color",
            }
        })
    </script>
</body>

直接在自定义组件上使用class或者:class,样式规则会直接应用到这个组件得根元素上面;

Vue.componemt('my-componemt',{
    template:'<p :class="active">class绑定方式</p>'
});

在调用这个组件得时候,给组件绑定class

<div id="app">
    <my-componemt :class="{'show':isActives}"></my-componemt>
</div>
<script src="./vue.js"></script>
<script>
    const app = new Vue({
        el: "#app",
        data: {
            isActives:true,
        }
    })
</script>

最后渲染为:<p class="active show">class绑定方式</p>

  • 2. style对象绑定

通过v-bind与对象,动态绑定标签的style属性。

它有两种书写style的方式,一种是驼峰式,一种是通过-来进行链接。

<!-- 准备好一个容器-->
<div id="root">
<!-- 绑定class样式--字符串写法,适用于:样式的类名不确定,需要动态指定 -->
<div class="basic" :class="mood" @click="changeMood">{{name}}</div> <br/><br/>

<!-- 绑定class样式--数组写法,适用于:要绑定的样式个数不确定、名字也不确定 -->
<div class="basic" :class="classArr">{{name}}</div> <br/><br/>

<!-- 绑定class样式--对象写法,适用于:要绑定的样式个数确定、名字也确定,但要动态决定用不用 -->
<div class="basic" :class="classObj">{{name}}</div> <br/><br/>

<!-- 绑定style样式--对象写法 -->
<div class="basic" :style="styleObj">{{name}}</div> <br/><br/>
<!-- 绑定style样式--数组写法 -->
<div class="basic" :style="styleArr">{{name}}</div>
</div>
<script type="text/javascript" src="../js/vue.js"></script>
<script type="text/javascript">
    Vue.config.productionTip = false

    const vm = new Vue({
        el:'#root',
        data:{
            name:'子鱼',
            mood:'normal',
            classArr:['ziYu1','ziYu2','ziYu'],
            classObj:{
                ziYu1:false,
                ziYu2:false,
            },
            styleObj:{
                fontSize: '40px',
                color:'red',
            },
            styleObj2:{
                backgroundColor:'orange'
            },
            styleArr:[
                {
                    fontSize: '40px',
                    color:'blue',
                },
                {
                    backgroundColor:'gray'
                }
            ]
        },
        methods: {
            changeMood(){
                const arr = ['happy','sad','normal']
                const index = Math.floor(Math.random()*3)
                this.mood = arr[index]
            }
        },
    })
</script>

"vue.js实战"・等 学习笔记总结