5 K8 t1 q1 `# ^) Y s
Vue.js classclass 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。 Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。 class 属性绑定我们可以为 v-bind:class 设置一个对象,从而动态的切换 class: 实例 1实例中将 isActive 设置为 true 显示了一个绿色的 div 块,如果设置为 false 则不显示: 7 F; f: z& \+ g2 n( g* K* d
4 _3 S$ r4 a' |3 g- <div v-bind:class="{ active: isActive }"></div>
复制代码 以上实例 div class 为:
0 _* e, A* ^1 @/ ]9 f7 G' R- <div class="active"></div>
复制代码我们也可以在对象中传入更多属性用来动态切换多个 class 。 实例 2text-danger 类背景颜色覆盖了 active 类的背景色:
( j3 l7 n; V$ S e$ _3 k/ F6 ^9 N, B8 g4 D
- <div class="static"+ r/ V0 t- s6 B7 z. `
- v-bind:class="{ active: isActive, 'text-danger': hasError }"> O7 N ]! r# R
- </div>
复制代码 以上实例 div class 为:- X% [% g& W. P
- <div class="static active text-danger"></div>
复制代码我们也可以直接绑定数据里的一个对象: 实例 3text-danger 类背景颜色覆盖了 active 类的背景色: . i2 ?' D G* R$ }9 g9 s' s+ D
" M% j/ ?% b& e3 f' O2 u
- <div id="app">
5 {/ \; t4 _( v5 ]9 K' r( T - <div v-bind:class="classObject"></div>
, y' h; i$ R! _ s' w. {, q( c' w - </div>
复制代码实例 3 与 实例 2 的渲染结果是一样的。 此外,我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式: 实例 4 w: G3 i2 |3 O
; t& b% L# m- k; Y+ x% k- new Vue({
+ N0 C/ _) j- X4 p. u - el: '#app',7 \1 K6 n% K$ w
- data: {& n* T! B% Y. I% I8 b- ]) l4 R
- isActive: true,
) l8 W' b# Z1 c9 x& |) W8 [ - error: null; n% Z Z/ s$ K
- },
( Q# e) h, @* ]9 H/ M - computed: { p* g, ?2 M) F* F0 }: m* Z
- classObject: function () {; o/ R! e$ q8 A+ Q
- return {' j) C! U8 J5 d' Z
- active: this.isActive && !this.error," Y. |$ A/ r' J L/ d S- a
- 'text-danger': this.error && this.error.type === 'fatal',
: N2 |# F M+ R5 w* { - }
: V4 I3 ^7 n5 t" I5 ?" f - }7 v; N4 m9 N8 j3 `. i {' D$ H' [+ T
- }
& n: ^8 }0 f4 r! j+ t. q - })
复制代码 数组语法我们可以把一个数组传给 v-bind:class ,实例如下: 实例 5
9 u/ G" o" }$ Z9 o! A) m$ w# [; v+ h; w4 ]
- <div v-bind:class="[activeClass, errorClass]"></div>
复制代码 以上实例 div class 为:
. f2 h1 u- {1 A4 |! S/ b8 o- <div class="active text-danger"></div>
复制代码我们还可以使用三元表达式来切换列表中的 class : 实例 6errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类: * g1 [0 K- W* B' m; L- g
4 ^& p7 B" t8 Z- <div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>
复制代码 ) F2 v6 z6 e, o/ `
) v6 s5 ^0 I+ l. dVue.js style(内联样式)我们可以在 v-bind:style 直接设置样式: 实例 75 z/ O" D9 T/ ]6 e+ P: I) Z! [" b* i% W" v
/ {( [$ |4 Q" }3 x$ z$ h- <div id="app">
: V5 R+ w: U6 L2 M$ Y. a - <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>' Y& O8 |* G0 D0 l
- </div>
复制代码 以上实例 div style 为:2 g/ q k3 A, q4 M" \! @
- <div style="color: green; font-size: 30px;">菜鸟教程</div>
复制代码也可以直接绑定到一个样式对象,让模板更清晰: 实例 8
$ |5 G. a3 k4 U5 u
6 \8 {; q6 v! C: c; I; C! d- <div id="app">
" i$ f* W6 B9 O0 Q" C+ V, T - <div v-bind:style="styleObject">菜鸟教程</div>
0 q1 l7 n1 C7 X; y- e - </div>
复制代码v-bind:style 可以使用数组将多个样式对象应用到一个元素上: 实例 97 d# l$ O( B! J
) l0 J9 M$ F- y0 D& X9 Q. T
- <div id="app">
# u8 ]' H+ e l) n/ x3 j& j1 H - <div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程</div>
0 a2 `% F8 k, A - </div>
复制代码
! V1 i* M7 Y3 H3 }6 Z) X4 Z7 W! J& R- u; n* ~: l4 p4 d" d9 }
注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。4 T* M6 ?+ h( l7 n3 E: v: I
* w& r9 ^1 [: t
1 j9 ^8 [( v. K
" V; O3 s g+ h6 V( f8 p+ I5 N2 g7 s' R
|