/ d. k/ R: c: M- E0 E0 C: r
Vue.js classclass 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。 Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。 class 属性绑定我们可以为 v-bind:class 设置一个对象,从而动态的切换 class: 实例 1实例中将 isActive 设置为 true 显示了一个绿色的 div 块,如果设置为 false 则不显示:
$ ], l* V) d# R. ~5 X8 j' m( K; m, \( w, U( \$ S
- <div v-bind:class="{ active: isActive }"></div>
复制代码 以上实例 div class 为:
- }/ s5 i+ N3 w4 p4 c' D5 O- y- <div class="active"></div>
复制代码我们也可以在对象中传入更多属性用来动态切换多个 class 。 实例 2text-danger 类背景颜色覆盖了 active 类的背景色: 3 @3 M; B- F. l& b7 H0 g) Q8 z
* Y: t& {% k9 @
- <div class="static"# q* F2 Z6 K* k7 {7 c6 k
- v-bind:class="{ active: isActive, 'text-danger': hasError }">% U& { J. g4 L. J
- </div>
复制代码 以上实例 div class 为:
# k& B u3 N. i9 E1 D* b$ t3 u! O- <div class="static active text-danger"></div>
复制代码我们也可以直接绑定数据里的一个对象: 实例 3text-danger 类背景颜色覆盖了 active 类的背景色: 2 |) S% T8 h$ R( L4 R# t
; C2 q J7 n$ J- y1 k! R
- <div id="app">, k( H) J$ }- }0 s7 ^: @9 \$ F
- <div v-bind:class="classObject"></div>! ?+ B8 g. u2 j. J7 M) K7 v
- </div>
复制代码实例 3 与 实例 2 的渲染结果是一样的。 此外,我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式: 实例 4
2 C, S" V6 q$ u2 i3 F0 a/ p# f7 v' D9 a8 U
- new Vue({3 E6 m/ d/ M) A: I' n
- el: '#app',7 B: g4 ?: G& d
- data: {
e. n6 [. b6 w - isActive: true,9 b3 \) S G v
- error: null
2 w* k1 V2 i# U2 R - },
; f* {% J' a7 H* H - computed: {' K f! q: ]2 w4 n% l/ D5 s$ t
- classObject: function () {
* ]9 g# E( f) p4 R5 l - return {& C# N% M" S' j/ w* s: F+ A3 F
- active: this.isActive && !this.error,% H5 L5 Q/ _# @3 v3 V) @5 f' i {
- 'text-danger': this.error && this.error.type === 'fatal',
, u1 x& a9 \% p7 f! {# _- t8 L7 X, E/ G7 ` - }
3 Q6 b6 _" l }( F - }
" s% h s( A2 Z3 X - }! T% e% @ d/ j9 H! y/ q4 D
- })
复制代码 数组语法我们可以把一个数组传给 v-bind:class ,实例如下: 实例 5
( ^& e! K2 t9 d2 d1 z2 P9 W$ e# a* T* E' U2 n
- <div v-bind:class="[activeClass, errorClass]"></div>
复制代码 以上实例 div class 为:9 ?! J; w) C2 r! q {
- <div class="active text-danger"></div>
复制代码我们还可以使用三元表达式来切换列表中的 class : 实例 6errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类: # |8 R' s2 S# _' H y5 O% b
5 d U$ J! e4 d! W$ p- <div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>
复制代码 2 h# F+ D% t" u S1 U
! O* }0 j0 W. `$ ~& u
Vue.js style(内联样式)我们可以在 v-bind:style 直接设置样式: 实例 7" T; ?* f3 A f i! e; I) T0 a* I
) n6 @- z% u7 N! A& U ^/ k7 ?
- <div id="app">4 \2 I7 w1 z! o& y
- <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>
/ }5 K. S- w* C - </div>
复制代码 以上实例 div style 为:% e8 n, @5 @/ W( D/ d: E
- <div style="color: green; font-size: 30px;">菜鸟教程</div>
复制代码也可以直接绑定到一个样式对象,让模板更清晰: 实例 8; l0 K2 x Y' q: j
^4 I. m! }9 \2 n3 S- <div id="app">& ?5 l1 N. c# [) t6 ?% s( e1 ?
- <div v-bind:style="styleObject">菜鸟教程</div>
' W$ ~, Z5 P% U$ ~5 P: f/ ] - </div>
复制代码v-bind:style 可以使用数组将多个样式对象应用到一个元素上: 实例 9
+ h# E7 E% H9 M0 X: B% E% O/ ]7 ^( r7 L2 ^% ~0 E4 U0 X
- <div id="app">
; c# |) o, M- q- u - <div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程</div>! k5 C: ] \) k- p
- </div>
复制代码
2 y* E( f) r" R" e0 d( O( B
; c0 y; I8 d$ f) @4 P3 P注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。
! e( _0 _2 c. p" Y
& J% S2 r; h' L, S) s6 R5 W
9 @$ \& Z, T3 b% m3 y. S! o+ Z! u/ o% B* T/ V1 O# H* V
6 v; [$ b$ `$ [2 A s E
|