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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-7-4 11:12:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

$ S! d- a4 H8 S% o! Y4 |  H# D# lVue.js class
class 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。
Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。

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

  g) J) Z1 L& W7 ^0 [# K* K, o1 m1 p0 a% f1 M! M1 ?% r: D
  1. <div v-bind:class="{ active: isActive }"></div>
复制代码
以上实例 div class 为:8 x  W- D( R6 L. Z$ Q6 f
  1. <div class="active"></div>
复制代码
我们也可以在对象中传入更多属性用来动态切换多个 class 。
实例 2
text-danger 类背景颜色覆盖了 active 类的背景色:

2 @: i4 N' V$ [% t$ F4 m3 s, T# X) p2 P. M( n4 j
  1. <div class="static", y: s, {# p2 G' \7 M
  2.      v-bind:class="{ active: isActive, 'text-danger': hasError }">
    # T5 \/ L0 Q# ~
  3. </div>
复制代码
以上实例 div class 为:
# j6 P( D! F0 u" g3 X1 o
  1. <div class="static active text-danger"></div>
复制代码
我们也可以直接绑定数据里的一个对象:
实例 3
text-danger 类背景颜色覆盖了 active 类的背景色:

3 N# g$ h0 ]0 s+ G- `% `! e5 ?
6 j0 J# t4 T% J
  1. <div id="app">" w! V& z) I- U+ l) s8 e- M
  2.   <div v-bind:class="classObject"></div>. o9 m* K4 F+ ]" y+ C
  3. </div>
复制代码
实例 3 与 实例 2 的渲染结果是一样的。
此外,我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式:
实例 4
4 i  D" k+ r( H7 X, V7 |; i/ @- V
  1. new Vue({9 {& _4 g) W0 w1 V
  2.   el: '#app',
    " D( _# I8 n: z5 H1 J) H- \
  3.   data: {5 S' a. m+ {* l4 ]- V# f
  4.   isActive: true,
    ) D# r, G( b3 O( R9 O0 R
  5.   error: null- ?4 I5 h; x2 l/ L$ n0 W
  6.   },
    9 B2 ?. ^: ?* u" w$ G
  7.   computed: {/ r8 j# s. w9 X8 q: t/ B9 \
  8.     classObject: function () {
    4 K2 n- N4 y! L+ B. {
  9.       return {. K5 \. p2 N6 Y7 |4 O% b
  10.         active: this.isActive && !this.error,
    7 K) n. \  T( @: m- P
  11.         'text-danger': this.error && this.error.type === 'fatal',
    , i% B' z! @) A, k4 x
  12.       }0 Y) X$ q7 o" W' h
  13.     }+ a( k1 J1 _# v. M1 N/ M7 T
  14.   }' Z9 e5 U0 T% v  T- @
  15. })
复制代码
数组语法
我们可以把一个数组传给 v-bind:class ,实例如下:
实例 5( k. e9 I* x4 Y) T- k' N& a

! [, B. X6 \1 L: W# I0 ~
  1. <div v-bind:class="[activeClass, errorClass]"></div>
复制代码
以上实例 div class 为:# t6 i: x; G: ]% x* K) X
  1. <div class="active text-danger"></div>
复制代码
我们还可以使用三元表达式来切换列表中的 class :
实例 6
errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类:
# `7 v4 R2 F! V* I7 M8 B  E

; \  f6 W# `3 f" n$ a
  1. <div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>
复制代码

, I+ |( h) U3 a! J
! ~$ ~  Z# s! D. R& w7 s0 T# eVue.js style(内联样式)
我们可以在 v-bind:style 直接设置样式:
实例 7! `- |8 H1 t* k4 j" x

& N# x3 \' k1 @3 x
  1. <div id="app">
    , p. L- h! y( z# J8 W5 N
  2.     <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>
    2 I* o6 `! G0 g0 N0 w" r
  3. </div>
复制代码
以上实例 div style 为:
) m+ r7 b2 R- J4 |, V
  1. <div style="color: green; font-size: 30px;">菜鸟教程</div>
复制代码
也可以直接绑定到一个样式对象,让模板更清晰:
实例 8* w/ T9 M3 r2 b+ ~5 z  Z! j

4 I  A. B7 }) A3 S# z
  1. <div id="app">
    + _3 _  b# s/ z2 `5 p
  2.   <div v-bind:style="styleObject">菜鸟教程</div>
    0 M5 |# P3 y1 @0 S/ i/ w5 k; m+ i
  3. </div>
复制代码
v-bind:style 可以使用数组将多个样式对象应用到一个元素上:
实例 9
- L7 i* b5 e9 ~* U9 }. f. g
3 c, R7 C- h' ?4 T& ^
  1. <div id="app">
    + q/ c1 {1 K( X# z6 i$ Y+ p
  2.   <div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程</div>
    4 [: V$ L7 F6 Q% h  H8 q  F( E
  3. </div>
复制代码

  i8 |* h* K, v8 ^' X5 W
  ?8 [" y( W- e/ S4 ]4 v  n注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。% O: z' d" `2 Y1 X! g9 x; e* ?
: f8 b, S( m0 J" W7 N! Y$ \
  M- }& ?& M1 c8 N% L
$ J* ~+ x1 t7 r8 U* k- d

7 I% t- V" V! m. W: s
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-16 20:20 , Processed in 0.057676 second(s), 19 queries .

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