# ]5 c2 M; F4 j- H) ~' ZVue.js classclass 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。 Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。 class 属性绑定我们可以为 v-bind:class 设置一个对象,从而动态的切换 class: 实例 1实例中将 isActive 设置为 true 显示了一个绿色的 div 块,如果设置为 false 则不显示:
1 u: Q/ c( P; j' R6 m% {0 m8 g9 n. N" Y d) |& N/ f; N$ r: F
- <div v-bind:class="{ active: isActive }"></div>
复制代码 以上实例 div class 为:* j9 w; r7 c0 e
- <div class="active"></div>
复制代码我们也可以在对象中传入更多属性用来动态切换多个 class 。 实例 2text-danger 类背景颜色覆盖了 active 类的背景色: 1 F6 }+ z: S3 G( V* d+ t1 @
1 ~" Q2 K, C9 F* z; n4 t- <div class="static"
! T8 f" e5 I3 R% u- J+ h - v-bind:class="{ active: isActive, 'text-danger': hasError }"># T' \; ^, T" @! M# _, c) A4 I% n
- </div>
复制代码 以上实例 div class 为:" e3 X8 u3 d. s; W! M
- <div class="static active text-danger"></div>
复制代码我们也可以直接绑定数据里的一个对象: 实例 3text-danger 类背景颜色覆盖了 active 类的背景色: / }( n8 p3 j# X2 f4 Z. p6 w; F
$ F9 e8 X; |/ x! e b; o9 Q
- <div id="app">
6 B' t ^4 ]: s N6 K - <div v-bind:class="classObject"></div>" i8 ~4 I0 v: o9 J0 K) w
- </div>
复制代码实例 3 与 实例 2 的渲染结果是一样的。 此外,我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式: 实例 4
0 Y7 x+ S- T; v& q" Y, P k9 }% q( u
- new Vue({0 [" T3 x% t+ z1 f- }4 Z% U& w$ o
- el: '#app',
$ q' F8 R1 K, @% @6 ~0 J - data: {
1 f" y6 i5 \5 ^% X - isActive: true,
8 N! V( J \1 F& j, v - error: null/ R7 ^4 r e! H# U2 E8 Y/ q! P' C% c
- },
/ l: u1 g5 H. N0 l g; i - computed: {
0 r, M" O8 u7 f. G5 V- A' b - classObject: function () {
) ~& l; k! l# @( J2 G- b$ G - return {2 n+ D9 }/ k" W1 W6 J
- active: this.isActive && !this.error,7 G5 R, u3 O' m( P
- 'text-danger': this.error && this.error.type === 'fatal',
& n- o5 `: I$ c, E0 \; h - }" h2 C' ?- ]( [9 F
- }" C0 b1 Q0 }. b/ ]( _5 n% r9 D5 H
- }! j3 G- M6 N/ p
- })
复制代码 数组语法我们可以把一个数组传给 v-bind:class ,实例如下: 实例 5
6 _! b4 @3 z5 x, [5 @' S' h0 T5 z$ D' o; v" h& j9 P) @) }
- <div v-bind:class="[activeClass, errorClass]"></div>
复制代码 以上实例 div class 为:
# o# z3 @3 G9 E" [- <div class="active text-danger"></div>
复制代码我们还可以使用三元表达式来切换列表中的 class : 实例 6errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类: " ]4 G: P. L" w j; E$ C$ G
. e* M9 ~7 L/ f: p k8 F6 J- <div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>
复制代码
" L% m& @$ }9 ^0 q# g3 v4 |$ c! ?# H0 K) V1 ?4 z( L
Vue.js style(内联样式)我们可以在 v-bind:style 直接设置样式: 实例 7
5 n$ G! @+ Y7 M7 m: ^% A
, a m; A. m) E4 N- <div id="app">
9 a* n2 a6 R2 g; I* j: ^% F4 E - <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>
3 d3 \( D, V+ N/ H' v. l - </div>
复制代码 以上实例 div style 为:. R X' I0 j- J% z) d( `
- <div style="color: green; font-size: 30px;">菜鸟教程</div>
复制代码也可以直接绑定到一个样式对象,让模板更清晰: 实例 8
2 U) O& y2 Y* t. w/ L1 R. t- t2 t; @+ H2 p
- <div id="app">
" L* p8 H5 ^1 k2 ^, ]. g. u - <div v-bind:style="styleObject">菜鸟教程</div>
' w( O) q2 P( l7 u+ m* X - </div>
复制代码v-bind:style 可以使用数组将多个样式对象应用到一个元素上: 实例 9
+ C- T& P6 X6 e: D
* F! X7 x4 O. @; e9 ?4 W- <div id="app">
6 b- V: o' S; z6 a# f. ^" v - <div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程</div>9 w' ]3 }6 a$ I- `& ?5 C- }5 H
- </div>
复制代码
$ ~3 o5 f6 N# l6 n7 r( n; u8 h1 w' y+ {* c l- F! i' c
注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。
+ W% G) x5 s F/ B- s; u
( f6 X1 W* b2 Y6 u( `6 L9 r% ~: h: b7 W0 k
- j/ q' @! _, l7 W' D+ c
! p2 S ~6 @, s7 O6 h9 \( g8 n6 g) M
|