1 b& L+ w9 W) g, C8 {1 n! X0 d
Vue.js classclass 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。 Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。 class 属性绑定我们可以为 v-bind:class 设置一个对象,从而动态的切换 class: 实例 1实例中将 isActive 设置为 true 显示了一个绿色的 div 块,如果设置为 false 则不显示: 0 s! y6 l q! R% B" M& k
" X9 v& b$ _, B. {' V/ D, y4 u
- <div v-bind:class="{ active: isActive }"></div>
复制代码 以上实例 div class 为:' ^* v9 T) ~* [. e! D7 D1 v, I
- <div class="active"></div>
复制代码我们也可以在对象中传入更多属性用来动态切换多个 class 。 实例 2text-danger 类背景颜色覆盖了 active 类的背景色:
; A+ W7 u" u( w- _0 f4 h, d( \+ I% C4 l& i
- <div class="static"
' u1 t ?$ z* [7 s3 S - v-bind:class="{ active: isActive, 'text-danger': hasError }">
1 J3 A4 k% D" S4 M - </div>
复制代码 以上实例 div class 为:
" X; m0 A: K0 F3 `7 I6 N( b0 R- <div class="static active text-danger"></div>
复制代码我们也可以直接绑定数据里的一个对象: 实例 3text-danger 类背景颜色覆盖了 active 类的背景色: . N9 t' g- D3 d* C4 f
! y6 v! P- t5 j$ N' n
- <div id="app">) Q! p% r0 K( Z$ ]$ U
- <div v-bind:class="classObject"></div>7 q( h4 z- k! }
- </div>
复制代码实例 3 与 实例 2 的渲染结果是一样的。 此外,我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式: 实例 4# r8 M' W9 f4 r) w# I& ] |
0 _1 H- ?) J2 m C/ c6 ^. u! J; C
- new Vue({
7 ]) S3 D# j% H& ~ - el: '#app',8 l1 G# u1 w6 z5 {+ r1 }
- data: {
- @" J1 y, y6 N - isActive: true,
& i+ @- @7 }( B, Z8 s* K0 {3 z r - error: null
. A9 Z9 a2 r! Q* O5 v! _2 ` - },9 Q9 f$ I- ?3 p
- computed: {- t) x" d) n8 H4 [ ^
- classObject: function () {
& Y0 {) k' p3 E& d5 ?. | - return {( b( v. l6 \+ v
- active: this.isActive && !this.error,
- i2 y: w' S" X4 U, x - 'text-danger': this.error && this.error.type === 'fatal',& a8 L. H. W6 z# w. F$ x/ l) }/ Z1 I. T
- }6 s2 a& v. l2 Z% n+ o& u( B) r/ G5 V
- }
7 W% j0 C: U# k9 G; ` D: ]5 N }& h - }# ?' o/ e# k$ L) ^( O
- })
复制代码 数组语法我们可以把一个数组传给 v-bind:class ,实例如下: 实例 5
' m# f* J& Q( p2 q" `+ y+ S2 }4 E* w4 V5 s- G
- <div v-bind:class="[activeClass, errorClass]"></div>
复制代码 以上实例 div class 为:& t" O) Y6 J' a$ a
- <div class="active text-danger"></div>
复制代码我们还可以使用三元表达式来切换列表中的 class : 实例 6errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类:
2 m; z v' L: v( Z1 i' V- x% S( T/ [# b9 l2 G' [
- <div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>
复制代码 " p% x0 [ n, `- G) S
" B' {8 S \) }3 q: ~
Vue.js style(内联样式)我们可以在 v-bind:style 直接设置样式: 实例 7. l7 t/ r1 N5 V. {- B$ }* d7 W2 o
. @) Y" K5 s9 H- <div id="app">
0 u: ~& j$ q o* d6 I4 w - <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>! z# M5 k' w0 ^8 L1 C
- </div>
复制代码 以上实例 div style 为:
( p1 Y& G {1 o- <div style="color: green; font-size: 30px;">菜鸟教程</div>
复制代码也可以直接绑定到一个样式对象,让模板更清晰: 实例 8) [) u7 x, Z1 b' g. B g
$ e7 s8 \$ ]* o) U+ @+ r
- <div id="app">
5 c' ]* X0 K* k5 j' q* \ - <div v-bind:style="styleObject">菜鸟教程</div>4 Y$ M/ v9 n: j$ O/ h5 U( f* o& Y
- </div>
复制代码v-bind:style 可以使用数组将多个样式对象应用到一个元素上: 实例 9- h. ?$ r u# @0 K. A: D- Y
) i$ K2 G) k) [- <div id="app">
- g. I$ D2 Q8 `8 i* Q - <div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程</div>; X4 s/ U- {% Y% G2 M' S* E
- </div>
复制代码
, N& P/ M8 i. v3 ~/ [9 l- A$ l3 [: v; G& @
注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。
7 ~& T. E; p0 Q0 X( l+ `5 L* w7 j1 F0 Z, Z( U- R2 B0 T9 u" D6 l9 j
$ H$ t$ u2 Z' S3 i( ^/ K% X1 }' `8 k0 a
- t, ]: p( s1 x/ G; x, Q |