& s3 O# j/ v5 O w. C! X* U/ v1 P. M
Vue.js classclass 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。 Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。 class 属性绑定我们可以为 v-bind:class 设置一个对象,从而动态的切换 class: 实例 1实例中将 isActive 设置为 true 显示了一个绿色的 div 块,如果设置为 false 则不显示:
+ r* Y0 }( @1 g2 g3 u6 D2 r" R. h1 r; e
- <div v-bind:class="{ active: isActive }"></div>
复制代码 以上实例 div class 为:* Y( t* k7 F/ C( D
- <div class="active"></div>
复制代码我们也可以在对象中传入更多属性用来动态切换多个 class 。 实例 2text-danger 类背景颜色覆盖了 active 类的背景色:
9 D2 f/ t: @/ G, f+ {9 G8 D; {4 Q( A/ I5 A5 @+ x! h
- <div class="static"
& K- b0 c# B) L6 T' l! O1 |' ] - v-bind:class="{ active: isActive, 'text-danger': hasError }">
, c& s% |$ h: S5 X1 C - </div>
复制代码 以上实例 div class 为:
, V5 L7 Y: G) w' Z6 m4 f1 D! [- <div class="static active text-danger"></div>
复制代码我们也可以直接绑定数据里的一个对象: 实例 3text-danger 类背景颜色覆盖了 active 类的背景色: 0 ~6 o1 E! d. v
) `* a! L- C8 e- <div id="app">
* J! Q' S( q& B4 [9 J0 Z& Q - <div v-bind:class="classObject"></div>
( i9 M: `1 j" l, a - </div>
复制代码实例 3 与 实例 2 的渲染结果是一样的。 此外,我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式: 实例 4
2 `% b+ @ r1 [" b$ F9 s6 v* X
2 x! Z# J8 v5 \9 Y; a% n1 U- new Vue({
# P& P4 b- q! V) l: L) m$ _2 p - el: '#app',
1 y y* ?* ?, b- L1 F- A - data: {5 A+ H2 i# R5 b6 L
- isActive: true," q# r5 {8 S' P) _- W6 H4 `4 n
- error: null
1 Q6 f2 G& u+ W6 m1 H - },# j" f) ^ r, |, K/ z$ D. Z, Z- r
- computed: {; p( T: d: B: H
- classObject: function () {
/ D- o0 {' c( \3 I* k# \( ] - return {
! }- f5 n( g# t; Z4 m4 K& r, a - active: this.isActive && !this.error,
; p2 e+ ]0 U2 G; W - 'text-danger': this.error && this.error.type === 'fatal',
2 _5 P. \3 J! @: r* Q. g! V; v7 { - }7 I( U, J/ S, W/ n( A
- }
. q& Q# `9 O4 K5 y( V - }
# J: W: _7 ]/ T& ?, k6 E7 { - })
复制代码 数组语法我们可以把一个数组传给 v-bind:class ,实例如下: 实例 5- l9 H: f4 U r% U* \7 E
/ j5 d7 E$ o6 [0 Y
- <div v-bind:class="[activeClass, errorClass]"></div>
复制代码 以上实例 div class 为:
- I$ T; @. b% i- <div class="active text-danger"></div>
复制代码我们还可以使用三元表达式来切换列表中的 class : 实例 6errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类:
, ]9 T, @' y8 R3 E$ e( j! ?" f( N1 r
8 n# i, O/ p Y- <div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>
复制代码
$ N2 b6 _1 a7 Z3 B+ b; O
$ r% E4 j# ^# O( ]( W- ~' OVue.js style(内联样式)我们可以在 v-bind:style 直接设置样式: 实例 7
1 x* Y) ~- x& X( D+ o9 B8 p; D2 N/ R! M
- <div id="app">
: {6 W% i+ B* M, ]; Q; p+ n( O - <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>- X* s0 Y1 k; R
- </div>
复制代码 以上实例 div style 为:9 Q. q6 K5 Z& P& K* |* h
- <div style="color: green; font-size: 30px;">菜鸟教程</div>
复制代码也可以直接绑定到一个样式对象,让模板更清晰: 实例 8
# y) A* j6 J. B
5 f" n9 `) L0 D1 i- <div id="app">$ K. A9 L7 c3 }0 f4 Q4 ?
- <div v-bind:style="styleObject">菜鸟教程</div>6 H6 s) F9 p9 i5 t
- </div>
复制代码v-bind:style 可以使用数组将多个样式对象应用到一个元素上: 实例 9! f# R; ?' n5 e8 C4 b" P% N
' a+ w' A8 r% ?5 N( U% C- <div id="app">' o- u' j, U" ?; n
- <div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程</div>
& @+ Q+ ^4 {3 m - </div>
复制代码 ; {! e! W$ y1 T" h5 K) j" t
# j3 S. D6 L* U# ?5 g9 q
注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。
D3 M9 y) b: @( p/ G4 c- k- ~" S) H- d$ }$ D$ J
1 z1 c$ ]8 N! ?
6 f# n5 o+ |# b# {( \9 H5 b: N' K1 J
, E; p8 T9 G" f3 M |