$ S! d- a4 H8 S% o! Y4 | H# D# lVue.js classclass 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。 Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。 class 属性绑定我们可以为 v-bind:class 设置一个对象,从而动态的切换 class: 实例 1实例中将 isActive 设置为 true 显示了一个绿色的 div 块,如果设置为 false 则不显示:
g) J) Z1 L& W7 ^0 [# K* K, o1 m1 p0 a% f1 M! M1 ?% r: D
- <div v-bind:class="{ active: isActive }"></div>
复制代码 以上实例 div class 为:8 x W- D( R6 L. Z$ Q6 f
- <div class="active"></div>
复制代码我们也可以在对象中传入更多属性用来动态切换多个 class 。 实例 2text-danger 类背景颜色覆盖了 active 类的背景色:
2 @: i4 N' V$ [% t$ F4 m3 s, T# X) p2 P. M( n4 j
- <div class="static", y: s, {# p2 G' \7 M
- v-bind:class="{ active: isActive, 'text-danger': hasError }">
# T5 \/ L0 Q# ~ - </div>
复制代码 以上实例 div class 为:
# j6 P( D! F0 u" g3 X1 o- <div class="static active text-danger"></div>
复制代码我们也可以直接绑定数据里的一个对象: 实例 3text-danger 类背景颜色覆盖了 active 类的背景色:
3 N# g$ h0 ]0 s+ G- `% `! e5 ?
6 j0 J# t4 T% J- <div id="app">" w! V& z) I- U+ l) s8 e- M
- <div v-bind:class="classObject"></div>. o9 m* K4 F+ ]" y+ C
- </div>
复制代码实例 3 与 实例 2 的渲染结果是一样的。 此外,我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式: 实例 4
4 i D" k+ r( H7 X, V7 |; i/ @- V
- new Vue({9 {& _4 g) W0 w1 V
- el: '#app',
" D( _# I8 n: z5 H1 J) H- \ - data: {5 S' a. m+ {* l4 ]- V# f
- isActive: true,
) D# r, G( b3 O( R9 O0 R - error: null- ?4 I5 h; x2 l/ L$ n0 W
- },
9 B2 ?. ^: ?* u" w$ G - computed: {/ r8 j# s. w9 X8 q: t/ B9 \
- classObject: function () {
4 K2 n- N4 y! L+ B. { - return {. K5 \. p2 N6 Y7 |4 O% b
- active: this.isActive && !this.error,
7 K) n. \ T( @: m- P - 'text-danger': this.error && this.error.type === 'fatal',
, i% B' z! @) A, k4 x - }0 Y) X$ q7 o" W' h
- }+ a( k1 J1 _# v. M1 N/ M7 T
- }' Z9 e5 U0 T% v T- @
- })
复制代码 数组语法我们可以把一个数组传给 v-bind:class ,实例如下: 实例 5( k. e9 I* x4 Y) T- k' N& a
! [, B. X6 \1 L: W# I0 ~- <div v-bind:class="[activeClass, errorClass]"></div>
复制代码 以上实例 div class 为:# t6 i: x; G: ]% x* K) X
- <div class="active text-danger"></div>
复制代码我们还可以使用三元表达式来切换列表中的 class : 实例 6errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类: # `7 v4 R2 F! V* I7 M8 B E
; \ f6 W# `3 f" n$ a- <div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>
复制代码
, I+ |( h) U3 a! J
! ~$ ~ Z# s! D. R& w7 s0 T# eVue.js style(内联样式)我们可以在 v-bind:style 直接设置样式: 实例 7! `- |8 H1 t* k4 j" x
& N# x3 \' k1 @3 x- <div id="app">
, p. L- h! y( z# J8 W5 N - <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>
2 I* o6 `! G0 g0 N0 w" r - </div>
复制代码 以上实例 div style 为:
) m+ r7 b2 R- J4 |, V- <div style="color: green; font-size: 30px;">菜鸟教程</div>
复制代码也可以直接绑定到一个样式对象,让模板更清晰: 实例 8* w/ T9 M3 r2 b+ ~5 z Z! j
4 I A. B7 }) A3 S# z- <div id="app">
+ _3 _ b# s/ z2 `5 p - <div v-bind:style="styleObject">菜鸟教程</div>
0 M5 |# P3 y1 @0 S/ i/ w5 k; m+ i - </div>
复制代码v-bind:style 可以使用数组将多个样式对象应用到一个元素上: 实例 9
- L7 i* b5 e9 ~* U9 }. f. g
3 c, R7 C- h' ?4 T& ^- <div id="app">
+ q/ c1 {1 K( X# z6 i$ Y+ p - <div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程</div>
4 [: V$ L7 F6 Q% h H8 q F( E - </div>
复制代码
i8 |* h* K, v8 ^' X5 W
?8 [" y( W- e/ S4 ]4 v n注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。% O: z' d" `2 Y1 X! g9 x; e* ?
: f8 b, S( m0 J" W7 N! Y$ \
M- }& ?& M1 c8 N% L
$ J* ~+ x1 t7 r8 U* k- d
7 I% t- V" V! m. W: s |