" @4 q' b2 |: ^. J2 `
Vue.js classclass 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。 Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。 class 属性绑定我们可以为 v-bind:class 设置一个对象,从而动态的切换 class: 实例 1实例中将 isActive 设置为 true 显示了一个绿色的 div 块,如果设置为 false 则不显示: $ v$ b6 Y1 R9 s; u% \2 b. q
: H; |8 z/ s7 e1 Y+ O* E- <div v-bind:class="{ active: isActive }"></div>
复制代码 以上实例 div class 为:
0 R2 R9 k% k# d* I y- <div class="active"></div>
复制代码我们也可以在对象中传入更多属性用来动态切换多个 class 。 实例 2text-danger 类背景颜色覆盖了 active 类的背景色:
Z- }* `8 r/ l( l
$ c" p1 |/ n- h# M \- <div class="static"
6 [% k1 H. H; i5 l - v-bind:class="{ active: isActive, 'text-danger': hasError }"># {) g0 k8 Z. h4 P( Y# R0 V' B% H5 [
- </div>
复制代码 以上实例 div class 为:5 I# M! s9 }3 v- z+ d1 |! D# ]$ U
- <div class="static active text-danger"></div>
复制代码我们也可以直接绑定数据里的一个对象: 实例 3text-danger 类背景颜色覆盖了 active 类的背景色:
* k5 Z. ~7 o% H
0 f9 _& o r7 F0 z- <div id="app">
+ y; j3 @0 Q! U8 }$ f) T' ?, N - <div v-bind:class="classObject"></div>( A( y6 l) }2 t( e5 Z# H/ O
- </div>
复制代码实例 3 与 实例 2 的渲染结果是一样的。 此外,我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式: 实例 4
$ _( R' M$ n: u0 D# }" G5 m$ l q+ s
2 U+ x2 {9 ]9 I1 i2 ~7 c- new Vue({( E+ o U; A9 M3 v8 k# n d, U3 }
- el: '#app',
& S1 u+ \# } Q - data: {
+ P- q0 p: @7 P - isActive: true,
, Z9 r0 j9 L7 \ - error: null" b: e3 K. Q1 G3 g' Q) L3 G
- },
' {" O2 C1 }- q/ ~- k! ]* E! R. f - computed: {4 p& W) H9 B. T/ |
- classObject: function () {( `1 C2 V! |9 H$ a5 ^
- return {8 W2 z7 g5 Y2 [- T" h7 b
- active: this.isActive && !this.error,
. Y I: @8 b( q - 'text-danger': this.error && this.error.type === 'fatal',
: @' H6 W# Q. X: h! n3 j1 A9 L - }
7 _+ r& O5 d$ l - }
. r! U: e( y2 { - }' F7 f; c1 p% z9 l* @; x
- })
复制代码 数组语法我们可以把一个数组传给 v-bind:class ,实例如下: 实例 5" q3 K4 ]+ n; A
4 U+ _) K' U: [* `6 z- <div v-bind:class="[activeClass, errorClass]"></div>
复制代码 以上实例 div class 为:- |" A! p5 S" ~3 n9 J, H( ^* j
- <div class="active text-danger"></div>
复制代码我们还可以使用三元表达式来切换列表中的 class : 实例 6errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类: 7 Y4 @5 V v5 |! F3 P7 v/ I
" x& G, S( r1 P, H/ v* }6 p9 \3 T; O- <div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>
复制代码
- Y: c5 ~/ ~# x; R
! v" Z! ^3 U( ^/ D9 DVue.js style(内联样式)我们可以在 v-bind:style 直接设置样式: 实例 7% R/ U7 N( P `/ o
3 @: z$ p, a% O/ \9 f+ Q
- <div id="app">( I, a2 |+ Y1 d; |3 n
- <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>7 [+ g( j6 b$ | B1 W
- </div>
复制代码 以上实例 div style 为:
* T- c& m% I* N: v* q- <div style="color: green; font-size: 30px;">菜鸟教程</div>
复制代码也可以直接绑定到一个样式对象,让模板更清晰: 实例 8
& B6 ]- u% N2 U" q
* v K# ?5 G/ n% p% `9 S- <div id="app">. U* |; b! N- v4 B& W, v
- <div v-bind:style="styleObject">菜鸟教程</div>
5 @; m ]2 x n* V4 n7 b' w - </div>
复制代码v-bind:style 可以使用数组将多个样式对象应用到一个元素上: 实例 9- h$ B, I* i4 i' _) \/ \ x
1 L; T b3 `5 s# r# F6 f' I; T- <div id="app">. d: _; w6 D# M) F5 g9 T/ p
- <div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程</div>
) l' X( m/ I6 @7 t4 U6 z; P - </div>
复制代码 2 Y8 _3 P4 t6 F
0 W# e4 i5 W8 x, T# d注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。! l) m5 H0 d; [# [, G
6 @4 R* ?& X) x1 J0 u$ i+ Q' B W- x
: {. P4 F; r% q
2 ]# L, M! E3 ~, l1 p
7 }7 h, s0 I) M, }" b& _5 e
|