' I; X' e9 ^$ PVue.js classclass 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。 Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。 class 属性绑定我们可以为 v-bind:class 设置一个对象,从而动态的切换 class: 实例 1实例中将 isActive 设置为 true 显示了一个绿色的 div 块,如果设置为 false 则不显示:
3 S: U K0 e+ b2 W8 L0 E
' h/ Z" o/ f0 ]; u/ E4 Q- <div v-bind:class="{ active: isActive }"></div>
复制代码 以上实例 div class 为:
" ~5 g. J( ?; Q6 `. S% ?3 V7 h- <div class="active"></div>
复制代码我们也可以在对象中传入更多属性用来动态切换多个 class 。 实例 2text-danger 类背景颜色覆盖了 active 类的背景色: * E9 A, x# W+ ?" S
3 N7 j1 z1 c/ o& j z- <div class="static"4 Z2 ]0 e2 v: ~( z5 Y
- v-bind:class="{ active: isActive, 'text-danger': hasError }">, q; v4 ?4 v$ k1 Z) `7 t T
- </div>
复制代码 以上实例 div class 为:* v" V: P8 a. n$ c' ^
- <div class="static active text-danger"></div>
复制代码我们也可以直接绑定数据里的一个对象: 实例 3text-danger 类背景颜色覆盖了 active 类的背景色: ( ?! l5 g- f& e2 z
+ p, z4 s- M7 Z: x
- <div id="app">/ \6 v" T6 W( O' f5 I0 j
- <div v-bind:class="classObject"></div>
: K9 H) \6 S6 v% f - </div>
复制代码实例 3 与 实例 2 的渲染结果是一样的。 此外,我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式: 实例 4
* Y& o3 ~$ F7 d& U+ V: N3 H9 q
. m, U! x+ }8 x. f3 [" [: y- new Vue({! _/ j5 Y2 l S% p/ N3 w
- el: '#app'," _5 q8 k( C! Q3 q5 f8 J8 j
- data: {( n/ \ V x3 k& _0 M: b
- isActive: true,
6 X6 v! w3 L9 @& { - error: null5 w9 V' z: N) W) E6 L4 W
- },
! T! F; T6 R$ | - computed: {
+ y @) l* I2 ?7 q7 |- B: a6 a - classObject: function () {4 X' G& `) d- h" Y
- return {
$ K" a8 {( d2 \2 v0 c- f5 s - active: this.isActive && !this.error,
" J9 m; X% Z; a3 t+ d - 'text-danger': this.error && this.error.type === 'fatal',
, _+ T$ T* m& v4 V) p2 ^& L - }
! c0 c% z( S3 u2 z, X - }
5 j, `) W& l' g7 I; I. m7 k* a - }2 t7 T) e5 Y0 j* Q; a" p: p( B
- })
复制代码 数组语法我们可以把一个数组传给 v-bind:class ,实例如下: 实例 53 p9 J) T8 w% N* W! W# }
& t {3 n3 I* c1 T# G! U
- <div v-bind:class="[activeClass, errorClass]"></div>
复制代码 以上实例 div class 为:0 G3 j3 l/ o E
- <div class="active text-danger"></div>
复制代码我们还可以使用三元表达式来切换列表中的 class : 实例 6errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类: & I1 L O0 y6 @8 x' \7 k! M: t& w
1 o+ F) [6 ?) p- d, }* P2 h# y7 _- <div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>
复制代码 , [$ T# a0 ?8 W3 T' H! @! f
# a$ V# O1 a) f+ D) z: ?Vue.js style(内联样式)我们可以在 v-bind:style 直接设置样式: 实例 7
6 R/ E l( l) Z( ]2 c
. }, z* c/ p& n8 y- <div id="app">3 ]7 L; W6 e: @6 k! q, a
- <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>
9 N$ g1 @: ]. ^3 P8 X R - </div>
复制代码 以上实例 div style 为:
7 J0 J$ N2 U# P f5 _+ J- <div style="color: green; font-size: 30px;">菜鸟教程</div>
复制代码也可以直接绑定到一个样式对象,让模板更清晰: 实例 86 u) i/ a( ^. l5 u. t
4 G2 V+ a' h! k1 Z- <div id="app">3 e4 ]6 ]* c; {
- <div v-bind:style="styleObject">菜鸟教程</div>$ M6 P8 k& Z1 Q) ?
- </div>
复制代码v-bind:style 可以使用数组将多个样式对象应用到一个元素上: 实例 9
* ~, h# t$ h4 M! B7 |5 ]. ]- s) W2 T0 R
- <div id="app">
8 d" E. J$ A. Y% E0 U, | - <div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程</div>
, E* \5 s3 A' y8 l& S - </div>
复制代码 7 ? j" G4 {! D; I+ b, F
! [& \: J, ?; f( |% f5 p
注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。5 ~. ~5 x! @" Q4 j# a
3 V* \: e7 e) |5 @
% K& I6 f% ]+ O0 i B
! w6 _; E' c, y2 Q) f
. K9 i- E/ R) X0 e T: c |