Vue Class与Style绑定【五】

Class与Style绑定

操作元素的class列表和内联样式是数据绑定的一个常见需求,因为他们都是attribute,所以我们可以用v-bind来处理他们

绑定HTML Class

对象语法

通过v-bind:class,借助data或计算属性,来动态改变某个class是否存在

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <style>
      .active,
      .active2,
      .active3 {
        border: 3px solid red;
        width: 100px;
        height: 100px;
      }
    </style>
  </head>
  <body>
    <div id="app">
      <!-- <div v-bind:class="{'active': isactive}">我是DIV</div> -->
      <!-- <div v-bind:class="classObject">我是DIV</div> -->
      <div v-bind:class="classObject">我是DIV</div>
    </div>

    <script>
      let vm = new Vue({
        el: '#app',
        // data: function () {
        //   return {
        //     isactive: true
        //   }
        // }
        // data: {
        //   classObject: {
        //     active2: true,
        //     danger: true
        //   }
        // }
        data: function () {
          return {
            isactive: true
          }
        },
        computed: {
          classObject: function () {
            return {
              active3: this.isactive
            }
          }
        }
      })
    </script>
  </body>
</html>

数组语法

把一个数组传给v-bind:class,以应用一个class列表,进而借助这个class列表来动态修改class。

<div id="app">
      <div v-bind:class="[classOne,classTwo]">我是DIV</div>
    </div>

    <script>
      let vm = new Vue({
        el: '#app',
        data: function () {
          return {
            classOne: 'sty1',
            classTwo: 'sty2'
          }
        }
      })
    </script>

如果你也想根据条件切换列表中的 class,可以用三元表达式:

<div v-bind:class="[isActive ? activeClass : '', errorClass]"></div>

这样写将始终添加 errorClass,但是只有在 isActive 是 truthy时才添加 activeClass

不过,当有多个条件 class 时这样写有些繁琐。所以在数组语法中也可以使用对象语法:

<div v-bind:class="[{ active: isActive }, errorClass]"></div>
用在组件上

自定义组件的初始模板上的class不会被覆盖,后续添加的class会增加

绑定内联样式

对象语法

类似于class的对象语法

直接绑定到一个样式对象通常更好,这会让模板更清晰:

<div v-bind:style="styleObject"></div>
data: {
  styleObject: {
    color: 'red',
    fontSize: '13px'
  }
}

同样的,对象语法常常结合返回对象的计算属性使用。

数组语法

v-bind:style 的数组语法可以将多个样式对象应用到同一个元素上:

<div v-bind:style="[baseStyles, overridingStyles]"></div>
自动添加前缀

v-bind:style 使用需要添加浏览器引擎前缀的 CSS property 时,如 transform,Vue.js 会自动侦测并添加相应的前缀。

多重值

从 2.3.0 起你可以为 style 绑定中的 property 提供一个包含多个值的数组,常用于提供多个带前缀的值,例如:

<div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>

这样写只会渲染数组中最后一个被浏览器支持的值。在本例中,如果浏览器支持不带浏览器前缀的 flexbox,那么就只会渲染 display: flex

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值