cncml手绘网

标题: Vue.js 样式绑定 [打印本页]

作者: admin    时间: 2018-7-4 11:12
标题: Vue.js 样式绑定
' D0 A$ I% }) ^" T
Vue.js class
class 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。
Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。

class 属性绑定
我们可以为 v-bind:class 设置一个对象,从而动态的切换 class:
实例 1
实例中将 isActive 设置为 true 显示了一个绿色的 div 块,如果设置为 false 则不显示:
+ I( o" O3 w0 g& p# z% _
2 v% x: c. k5 k5 A# U- n" d/ t
  1. <div v-bind:class="{ active: isActive }"></div>
复制代码
以上实例 div class 为:: A9 @5 ^$ Y+ W6 f" G7 I8 m- V* q
  1. <div class="active"></div>
复制代码
我们也可以在对象中传入更多属性用来动态切换多个 class 。
实例 2
text-danger 类背景颜色覆盖了 active 类的背景色:

% H( l7 H+ y1 x, C; e1 `! u9 x) {$ w: ?9 S, R
  1. <div class="static"/ \9 S7 b* J  a3 _- k
  2.      v-bind:class="{ active: isActive, 'text-danger': hasError }">) g! e3 V/ _; P  c0 Q
  3. </div>
复制代码
以上实例 div class 为:# U% q3 V/ ~  S8 D( \6 A: K: b; W
  1. <div class="static active text-danger"></div>
复制代码
我们也可以直接绑定数据里的一个对象:
实例 3
text-danger 类背景颜色覆盖了 active 类的背景色:

0 s/ {2 D. @9 h  Z+ i! N; c
+ s  z4 H0 n% F2 p4 E
  1. <div id="app">
    6 Z' ^/ I4 |- _' y' S
  2.   <div v-bind:class="classObject"></div>6 [4 M, t/ L$ S
  3. </div>
复制代码
实例 3 与 实例 2 的渲染结果是一样的。
此外,我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式:
实例 44 |' k! {6 _* u" N$ o
7 V0 r8 M. e7 w# U& F  S
  1. new Vue({( v7 q& X/ I. H; _- g
  2.   el: '#app',& \* E  |6 x5 ^9 j0 E
  3.   data: {% L' U9 U% e1 E9 y: C5 j6 w
  4.   isActive: true,
    * ~9 p0 n$ w! k6 p1 G! H7 b5 z- X
  5.   error: null+ d/ @) E8 C5 x* \
  6.   },6 x4 }* s; G- a+ O
  7.   computed: {
    $ X* X7 q5 G- A( m6 r! t
  8.     classObject: function () {
    0 f5 o/ z/ ]# b2 I1 ?2 ?
  9.       return {
    $ A+ A# M0 M  D  _0 V, M/ E
  10.         active: this.isActive && !this.error,
      R" O& W0 c/ r( X+ l( X
  11.         'text-danger': this.error && this.error.type === 'fatal',
    9 L/ Y8 U% J* Z/ K/ m. I
  12.       }
    1 W6 g1 ^" h; Y" W* ~& T
  13.     }+ g& k6 ^+ r7 a2 x! w
  14.   }
    - i3 b  ]# o) }( \  j
  15. })
复制代码
数组语法
我们可以把一个数组传给 v-bind:class ,实例如下:
实例 5
. G! H  L+ }" L! ~) b/ Y0 }8 D+ `& A0 b
  1. <div v-bind:class="[activeClass, errorClass]"></div>
复制代码
以上实例 div class 为:
: {' b1 R$ p) h- t3 U7 t
  1. <div class="active text-danger"></div>
复制代码
我们还可以使用三元表达式来切换列表中的 class :
实例 6
errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类:

3 K9 L+ f8 u( E! u; _6 ^# C  V
' d$ _- n+ L1 |( e
  1. <div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>
复制代码
- u6 Z+ H. t( c/ S) ~
- x5 |: x: `% ~* a; A$ u% r$ e
Vue.js style(内联样式)
我们可以在 v-bind:style 直接设置样式:
实例 7
" F6 S  r8 |: g
5 {4 N/ M5 v4 n! I1 t' z
  1. <div id="app">5 O) }* ~' c! O  t$ H' r
  2.     <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>
    - `& A4 s1 Q9 T
  3. </div>
复制代码
以上实例 div style 为:
  v3 ^( C, W- R. H; C( Y- d3 C
  1. <div style="color: green; font-size: 30px;">菜鸟教程</div>
复制代码
也可以直接绑定到一个样式对象,让模板更清晰:
实例 8
. ~, _; J9 [% S# M1 X, S5 o8 |
6 G8 T  M$ h" S3 E9 z8 X
  1. <div id="app">7 w+ V  O. M. z7 }# S
  2.   <div v-bind:style="styleObject">菜鸟教程</div>
    ; y) |: ]" b' Z4 w0 U, D; |
  3. </div>
复制代码
v-bind:style 可以使用数组将多个样式对象应用到一个元素上:
实例 9
' ~2 H$ ^3 _7 V' X# H7 y9 Z5 D
2 D; ]2 s$ [% k6 f7 O
  1. <div id="app">
    $ S) c" O/ h; Q1 D8 h% D. ]& l
  2.   <div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程</div>! b8 l; }  X% X% V  S
  3. </div>
复制代码

6 u' G) H3 p' V3 y  t( j- L" t2 }# B. p# U7 G  f% {
注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。3 `: o' E1 N. w& S& u
" U8 u, s8 w* c; b

6 E4 Z* w) g+ o/ x  |! t8 k% F7 v
  Q, E3 @- B- c* p6 c1 D9 X- ?1 B. ?0 B% X





欢迎光临 cncml手绘网 (http://bbs.cncml.com/) Powered by Discuz! X3.2