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

QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

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

# ]5 c2 M; F4 j- H) ~' ZVue.js class
class 与 style 是 HTML 元素的属性,用于设置元素的样式,我们可以用 v-bind 来设置样式属性。
Vue.js v-bind 在处理 class 和 style 时, 专门增强了它。表达式的结果类型除了字符串之外,还可以是对象或数组。

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

1 u: Q/ c( P; j' R6 m% {0 m8 g9 n. N" Y  d) |& N/ f; N$ r: F
  1. <div v-bind:class="{ active: isActive }"></div>
复制代码
以上实例 div class 为:* j9 w; r7 c0 e
  1. <div class="active"></div>
复制代码
我们也可以在对象中传入更多属性用来动态切换多个 class 。
实例 2
text-danger 类背景颜色覆盖了 active 类的背景色:
1 F6 }+ z: S3 G( V* d+ t1 @

1 ~" Q2 K, C9 F* z; n4 t
  1. <div class="static"
    ! T8 f" e5 I3 R% u- J+ h
  2.      v-bind:class="{ active: isActive, 'text-danger': hasError }"># T' \; ^, T" @! M# _, c) A4 I% n
  3. </div>
复制代码
以上实例 div class 为:" e3 X8 u3 d. s; W! M
  1. <div class="static active text-danger"></div>
复制代码
我们也可以直接绑定数据里的一个对象:
实例 3
text-danger 类背景颜色覆盖了 active 类的背景色:
/ }( n8 p3 j# X2 f4 Z. p6 w; F
$ F9 e8 X; |/ x! e  b; o9 Q
  1. <div id="app">
    6 B' t  ^4 ]: s  N6 K
  2.   <div v-bind:class="classObject"></div>" i8 ~4 I0 v: o9 J0 K) w
  3. </div>
复制代码
实例 3 与 实例 2 的渲染结果是一样的。
此外,我们也可以在这里绑定返回对象的计算属性。这是一个常用且强大的模式:
实例 4
0 Y7 x+ S- T; v& q" Y, P  k9 }% q( u
  1. new Vue({0 [" T3 x% t+ z1 f- }4 Z% U& w$ o
  2.   el: '#app',
    $ q' F8 R1 K, @% @6 ~0 J
  3.   data: {
    1 f" y6 i5 \5 ^% X
  4.   isActive: true,
    8 N! V( J  \1 F& j, v
  5.   error: null/ R7 ^4 r  e! H# U2 E8 Y/ q! P' C% c
  6.   },
    / l: u1 g5 H. N0 l  g; i
  7.   computed: {
    0 r, M" O8 u7 f. G5 V- A' b
  8.     classObject: function () {
    ) ~& l; k! l# @( J2 G- b$ G
  9.       return {2 n+ D9 }/ k" W1 W6 J
  10.         active: this.isActive && !this.error,7 G5 R, u3 O' m( P
  11.         'text-danger': this.error && this.error.type === 'fatal',
    & n- o5 `: I$ c, E0 \; h
  12.       }" h2 C' ?- ]( [9 F
  13.     }" C0 b1 Q0 }. b/ ]( _5 n% r9 D5 H
  14.   }! j3 G- M6 N/ p
  15. })
复制代码
数组语法
我们可以把一个数组传给 v-bind:class ,实例如下:
实例 5
6 _! b4 @3 z5 x, [5 @' S' h0 T5 z$ D' o; v" h& j9 P) @) }
  1. <div v-bind:class="[activeClass, errorClass]"></div>
复制代码
以上实例 div class 为:
# o# z3 @3 G9 E" [
  1. <div class="active text-danger"></div>
复制代码
我们还可以使用三元表达式来切换列表中的 class :
实例 6
errorClass 是始终存在的,isActive 为 true 时添加 activeClass 类:
" ]4 G: P. L" w  j; E$ C$ G

. e* M9 ~7 L/ f: p  k8 F6 J
  1. <div v-bind:class="[errorClass ,isActive ? activeClass : '']"></div>
复制代码

" L% m& @$ }9 ^0 q# g3 v4 |$ c! ?# H0 K) V1 ?4 z( L
Vue.js style(内联样式)
我们可以在 v-bind:style 直接设置样式:
实例 7
5 n$ G! @+ Y7 M7 m: ^% A
, a  m; A. m) E4 N
  1. <div id="app">
    9 a* n2 a6 R2 g; I* j: ^% F4 E
  2.     <div v-bind:style="{ color: activeColor, fontSize: fontSize + 'px' }">菜鸟教程</div>
    3 d3 \( D, V+ N/ H' v. l
  3. </div>
复制代码
以上实例 div style 为:. R  X' I0 j- J% z) d( `
  1. <div style="color: green; font-size: 30px;">菜鸟教程</div>
复制代码
也可以直接绑定到一个样式对象,让模板更清晰:
实例 8
2 U) O& y2 Y* t. w/ L1 R. t- t2 t; @+ H2 p
  1. <div id="app">
    " L* p8 H5 ^1 k2 ^, ]. g. u
  2.   <div v-bind:style="styleObject">菜鸟教程</div>
    ' w( O) q2 P( l7 u+ m* X
  3. </div>
复制代码
v-bind:style 可以使用数组将多个样式对象应用到一个元素上:
实例 9
+ C- T& P6 X6 e: D
* F! X7 x4 O. @; e9 ?4 W
  1. <div id="app">
    6 b- V: o' S; z6 a# f. ^" v
  2.   <div v-bind:style="[baseStyles, overridingStyles]">菜鸟教程</div>9 w' ]3 }6 a$ I- `& ?5 C- }5 H
  3. </div>
复制代码

$ ~3 o5 f6 N# l6 n7 r( n; u8 h1 w' y+ {* c  l- F! i' c
注意:当 v-bind:style 使用需要特定前缀的 CSS 属性时,如 transform ,Vue.js 会自动侦测并添加相应的前缀。
+ W% G) x5 s  F/ B- s; u
( f6 X1 W* b2 Y6 u( `6 L9 r% ~: h: b7 W0 k
- j/ q' @! _, l7 W' D+ c
! p2 S  ~6 @, s7 O6 h9 \( g8 n6 g) M
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

GMT+8, 2026-3-17 20:21 , Processed in 0.061830 second(s), 19 queries .

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