1. 程式人生 > >Vue.js樣式繫結

Vue.js樣式繫結

樣式繫結

class和style時html元素的屬性,可以使用v-bind來進行樣式的yi繫結,以設定樣式。

v-bind在繫結class和style時,Vue專門增強了它。結果型別不僅可以時字串,還可以是物件和陣列。

class屬性繫結

1:基本使用:

<style>

.static{...}

.class1{...}

//最好不使用中劃線

//.class2-abc{...}

.class2_abc{...}

</style>

<div id="app">

<div v-bind:class="{ class1: isActive1 }"></div>

</div>

<script>

new Vue({

el: '#app',

data: {

isActive1: true,

//注意,如果data中使用中劃線的話,需要加單引號。否則出錯。而且,在v-bind中使用時,也需要加單引號。加上單引號又無法識別資料,預設為true。

//所以,儘量不要在data中使用中劃線。

//下劃線沒問題。

//is-active2:true

is_active2:true

}

});

</script>

以上可以根據isACtive的值,動態判斷來進行class樣式的繫結。

提示:為了避免不必要的問題,data中和style中的class,最好不要用中劃線。

2:也可以繫結多個

<div id="app">

<div class="static" v-bind:class="{class1:isActive, class2_abc:is_active2}"></div>

</div>

這裡,會把v-bind動態繫結的class合併到前面的class中。

3:使用物件

<div id="app">

<div v-bind="classObject"></div>

</div>

<script>

new Vue({

el:'#app',

data:{

classObject:{

class1:true,

class2_abc:true

}

}

});

</script>

這裡,v-bind中直接使用物件進行繫結。與前面不同的時,物件中的鍵應該和style中定義的class樣式名對應。雖然可以使用中劃線,用引號括起來。但是同樣不建議。

其實很好理解,把v-bind中的物件直接替換為{class1:true,class2_abc:true},這和前面兩個是相同的。

4:使用陣列

<div id="app">

<div v-bind="[classArr1,classArr2]"></div>

</div>

<script>

new Vue({

el:'#app',

data:{

classArr1:'class1',

classArr2:'class2_abc'

}

});

</script>

這裡,v-bid中使用陣列進行繫結。可以理解為將data中的屬性值替換到了class中。

5:使用計算屬性

這是強大且常用的方式。

<div id="app">

<div v-bind="classObject"></div>

</div>

<script>

new Vue({

el:'#app',

data:{

isActive:true,

error:null

},

computed:{

classObject:function(){

return{

class1: this.isActive && !this.error,

class2_abc: !this.error && this.error == null

}

}

}

});

</script>

用法就是這樣,可以藉助計算屬性做一些複雜的邏輯判斷等等。

style屬性繫結

1:直接設定樣式:

<div id="app">

<div v-bind:style="{color: activeColor, fontSize: fontSize + 'px'}">vue學習</div>

</div>

<script>

new Vue({

el:'#app',

data:{

activeColor:green,

fontSize:50

}

})

</srcipt>

使用清晰明瞭。需要注意的就是v-bind中屬性名和css中樣式的對應。如fontSize 對應font-size。

2:也可以直接使用物件

<div id="app">

<div v-bind:style="styleObject">vue學習</div>

</div>

<script>

new Vue({

el:'#app',

data:{

styleObject:{

color:'green',

fontSize:'30px'

}

}

});

</script>

與直接使用類似,只是要注意物件的屬性和css中的樣式對應。

3:同樣可以使用陣列

<div id="app">

<div v-bind:style="[styleArr1,styleArr2]">vue學習</div>

</div>

<script>

new Vue({

el:'#app',

data:{

styleArr1:{

color:'green',

fontSize:'30px'

},

styleArr2:{

fontSize:'bold'

}

}

});

</script>