8 d, e. n& E# N" \& L4 f
Vue.js classclass 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。 Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。 class 属性绑定我们可以为 v-bind:class 设置一个对象,从而动态的切换 class: 实例 1实例中将 isActive 设置为 true 显示了一个绿色的 div 块,如果设置为 false 则不显示: * k/ I) L5 O# b: ?* C* p
9 f7 }4 H/ Y$ v) w; w
- <div v-bind:class="{ active: isActive }"></div>
复制代码 以上实例 div class 为:
; C5 ^4 }# G$ U- <div class="active"></div>
复制代码我们也可以在对象中传入更多属性用来动态切换多个 class 。 实例 2text-danger 类背景颜色覆盖了 active 类的背景色: , I6 ]; }/ x+ } o; s0 t
5 U6 f! v+ h. U! l- <div class="static"
+ K9 T$ q; X* L - v-bind:class="{ active: isActive, 'text-danger': hasError }"># |' V, |3 O7 k2 D+ ]& m
- </div>
复制代码 以上实例 div class 为:
5 [& N2 j- @$ R+ T- <div class="static active text-danger"></div>
复制代码我们也可以直接绑定数据里的一个对象: 实例 3text-danger 类背景颜色覆盖了 active 类的背景色:
# x$ D. V @4 [8 y" ^6 }
3 ?1 {7 w+ r" N* _: a- <div id="app">9 o' A4 F O$ \, y& a
- <div v-bind:class="classObject"></div>' K% _: ~% e; r8 Y2 ], U% Z* d
- </div>
复制代码实例 3 与 实例 2 的渲染结果是一样的。 此外,我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式: 实例 4( o) w- E/ N: w3 m0 v- Q
0 S U3 e2 v: H
- new Vue({
6 L9 K- | `* W8 B - el: '#app',* O+ n% c- x0 c7 l
- data: {
3 o Q6 V. c6 @9 Q3 u. U, H+ ~ - isActive: true,
1 i% x% B$ \6 `+ I5 F4 x v/ k - error: null$ G' C) y# ~7 g, b
- }, o" B: G: g6 t1 K
- computed: {
. L E0 G% o6 c8 c- Z7 ` - classObject: function () {
5 W5 Q2 ?) b! `+ V' x - return {( f: |' s4 d3 F. Y: M. D- T! W
- active: this.isActive && !this.error,
3 U( C0 _2 Y, \ - 'text-danger': this.error && this.error.type === 'fatal',
; x) k' [; o# F T* T7 t5 [0 I - }
! Z. V; j: }% K- Y) G - }
# q8 T: Q$ }% P8 C* L1 b2 y - }( B! w2 x5 G5 n8 R% x- `
- })
复制代码 数组语法我们可以把一个数组传给 v-bind:class ,实例如下: 实例 57 q% e7 g( _! m! V9 ^ U
( y1 q+ J) I a# N- <div v-bind:class="[activeClass, errorClass]"></div>
复制代码 以上实例 div class 为:3 A) w- s8 @1 m% W8 s
- <div class="active text-danger"></div>
复制代码我们还可以使用三元表达式来切换列表中的 class : 实例 6errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类:
6 I" r3 u/ u8 Q' H4 ?3 z% v. E% i+ G
- <div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>
复制代码 : k1 @8 {& t. e
$ _: p r7 f2 _0 \Vue.js style(内联样式)我们可以在 v-bind:style 直接设置样式: 实例 70 Y) I; H1 S& p5 e
) c4 q3 n2 j6 {- <div id="app">/ }9 Q0 j; R# I" V+ ]: T
- <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>
3 E$ S. B- ~7 g! o - </div>
复制代码 以上实例 div style 为:
9 I* t9 K; c6 Y P5 W, e3 m- <div style="color: green; font-size: 30px;">菜鸟教程</div>
复制代码也可以直接绑定到一个样式对象,让模板更清晰: 实例 86 V# Z, ?5 s1 w0 P: P" a# y& s
9 \8 x2 k) ^- a; f2 `; v
- <div id="app">
6 @+ h/ E3 J( S4 O* o7 P - <div v-bind:style="styleObject">菜鸟教程</div> s2 H# i3 j9 G. d) p/ E% o
- </div>
复制代码v-bind:style 可以使用数组将多个样式对象应用到一个元素上: 实例 9& L- p" Y" e: A& S8 D
b' d' r9 H ?; J# v/ x
- <div id="app">0 ?9 ]; k3 C0 |5 O" D
- <div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程</div>1 v' r6 _" ]7 ^) L
- </div>
复制代码 $ P. x8 X& t+ d9 \% z
: H* } O+ V0 Z" T5 s注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。
; k* D& y/ q- i2 r* S4 [1 ^
8 U+ y' R! N7 ~* O. v
/ @6 U- }& p, B* O3 s% q( L3 T0 Z! v8 H
- m3 F- N6 h) T# ~2 I0 ?% ?) k
|