您尚未登录,请登录后浏览更多内容! 登录 | 立即注册

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 15533|回复: 0
打印 上一主题 下一主题

[Vue.js] Vue.js 样式绑定

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:12:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
6 P$ m" ^0 N9 a5 \
Vue.js class
class 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。
Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。

class 属性绑定
我们可以为 v-bind:class 设置一个对象,从而动态的切换 class:
实例 1
实例中将 isActive 设置为 true 显示了一个绿色的 div 块,如果设置为 false 则不显示:
% ^7 ]" L& D% A$ k

, L2 x- u4 w( a/ D# E3 [2 `2 ^
  1. <div v-bind:class="{ active: isActive }"></div>
复制代码
以上实例 div class 为:# }3 Q: t4 P. f/ k, z6 p
  1. <div class="active"></div>
复制代码
我们也可以在对象中传入更多属性用来动态切换多个 class 。
实例 2
text-danger 类背景颜色覆盖了 active 类的背景色:
5 M0 y9 E7 G, J; Q+ |0 h
; K: D7 T- l7 U- L! N. R. u6 g
  1. <div class="static"
    , `1 F8 M/ b" ^$ r" Z- ^* K5 c
  2.      v-bind:class="{ active: isActive, 'text-danger': hasError }">3 m4 `: t& q  R% j' ?  Q
  3. </div>
复制代码
以上实例 div class 为:/ b- ?. a: x5 n+ A
  1. <div class="static active text-danger"></div>
复制代码
我们也可以直接绑定数据里的一个对象:
实例 3
text-danger 类背景颜色覆盖了 active 类的背景色:

( Y1 R6 ~$ q* [
+ x* z, T7 j) q$ h. ~
  1. <div id="app">
    ' r" v* E! Q- k9 L% Z2 J$ v$ o2 ~( P
  2.   <div v-bind:class="classObject"></div>
    # S1 B9 y+ O) I2 \* g. \( W
  3. </div>
复制代码
实例 3 与 实例 2 的渲染结果是一样的。
此外,我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式:
实例 4- f, z2 |# Y, B, V

, Q$ d# B' D5 A$ k0 Y7 F
  1. new Vue({
      [5 G* _4 s- I( j- \
  2.   el: '#app',7 |$ x2 t, X3 O
  3.   data: {# ^/ E6 u3 e; ~* J( Z
  4.   isActive: true,2 F2 l' E' ^+ ], o
  5.   error: null! C( G2 h) s' }  n! h3 J- Q# _
  6.   },
    # v# [! }& v* W
  7.   computed: {2 ^1 d6 s) a; i
  8.     classObject: function () {
    6 f* x# l) A( n8 v* Y. e: \; b; p
  9.       return {; a2 o6 g2 M6 \& m
  10.         active: this.isActive && !this.error,
    3 J: t7 e. s" T
  11.         'text-danger': this.error && this.error.type === 'fatal',
      @6 I- Q- R; H2 s& n5 Z) V% d
  12.       }# f+ E3 z- C6 m. n
  13.     }% ]2 A0 K6 F1 ~. m# B( r2 V- u
  14.   }
    ( C# t) [! h2 }& s* j* R
  15. })
复制代码
数组语法
我们可以把一个数组传给 v-bind:class ,实例如下:
实例 5
+ {2 j7 ]- l6 X" L+ \* J: A* i6 C( K! b6 @
  1. <div v-bind:class="[activeClass, errorClass]"></div>
复制代码
以上实例 div class 为:3 ?% U9 i2 m* `) k
  1. <div class="active text-danger"></div>
复制代码
我们还可以使用三元表达式来切换列表中的 class :
实例 6
errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类:
( j, p" B6 f* ?  T5 z4 b
8 Q/ y. y0 T3 K- |) b8 ?
  1. <div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>
复制代码

: u! F. ?' y0 l1 H" ^+ X' F2 Y. U7 }6 R6 A# N4 S, i  B
Vue.js style(内联样式)
我们可以在 v-bind:style 直接设置样式:
实例 7% s; B. k1 S2 c$ \( _, k2 ^
; c; S  K% z( ~0 v
  1. <div id="app">3 q, s9 w6 r2 W5 x* d' ^% b. X
  2.     <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>4 a( j( G) A, a5 w
  3. </div>
复制代码
以上实例 div style 为:. x4 B7 S0 ~' @% F
  1. <div style="color: green; font-size: 30px;">菜鸟教程</div>
复制代码
也可以直接绑定到一个样式对象,让模板更清晰:
实例 8
+ m' ]: U9 |2 V! ^) A6 V/ ^' D: m5 E$ w+ y+ w
  1. <div id="app">
    8 r  R! x# F2 p# u) l) _: z% d# C
  2.   <div v-bind:style="styleObject">菜鸟教程</div>8 l& F: N3 t5 P: ~3 z1 S1 m' e
  3. </div>
复制代码
v-bind:style 可以使用数组将多个样式对象应用到一个元素上:
实例 9" t( t% w  Y9 j2 {6 Z* y3 I

/ O; D$ M* G* Q1 b4 u
  1. <div id="app">
    9 {6 ?* K1 T, N# n9 [, }
  2.   <div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程</div>9 c( V' P% V- t* n6 y. k4 l: A
  3. </div>
复制代码
* W, T, o6 V, A- _" q8 i! M

- W) E1 r* S( n1 N( U; p注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。
* ?: }# r% J( R9 {" ?/ F+ z9 p! \8 k7 l& X6 t) N& h

- _: O" [6 q2 {) X# v3 Q  X% I- k8 f+ x, [& s7 I$ E

7 O7 v& N( m% `( O( j# `7 |+ V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-5-2 13:33 , Processed in 0.044900 second(s), 19 queries .

Copyright © 2001-2026 Powered by cncml! X3.2. Theme By cncml!