美文网首页
[vue3快速入门] 12.样式控制1——class绑定

[vue3快速入门] 12.样式控制1——class绑定

作者: 林哥学前端 | 来源:发表于2021-09-14 08:47 被阅读0次

在日常开发中,我们经常会动态地给一个元素增加或者删除一个class,来更改它的样式
比如选中了一个元素,那么给它加一个class叫active,同时其他元素要删除active这个class

我们这节课来学习在vue中如何动态的控制元素的class属性
我们给一个元素增加:class(v-bind:class的简写)来动态切换class

<div :class="{active: hasFocus}"></div>

这里:class接受的是一个js对象,这个对象的键active,就是我们要动态切换的class的名称,值hasFocus可以理解为是一个Boolean型的值,

data() {
  return {
    hasFocus: true,
  }
}

如果hasFocus是一个真值时,在元素上就会加上对应的class,渲染结果就是

<div class="active"></div>

如果hasFocus是一个假值时,在元素上就不会有active这个class,渲染结果就是

<div class></div>

如果同一个元素,有多个class需要动态控制,只需要在对象内增加多个键值就行了,如果有固定的class,按普通的html的方式写就行了 class和:class两个属性可以同时存在

<div
  class="static"
  :class="{ active: hasFocus, 'large-size': isLarge}"
></div>

还有一点需要注意,如果我们的class的名称带有短杠,比如上面的large-size,需要用引号括起来

下面我们写一个例子,我们有一个超级英雄列表,点名字以后,文字就变红

<template>
  <div>
    <ul>
      <li
        v-for="(item, index) in list"
        :key="index"
        class="hero-item"
        :class="{ red: activeIndex === index }"  // 如果当前的索引等于这个英雄的索引,就添加上red这个class
        @click="onHeroClick(index)"
      >
        {{ item }}
      </li>
    </ul>
  </div>
</template>

<script>
// class绑定
export default {
  name: 'App',
  data() {
    return {
      list: ['钢铁侠', '蜘蛛侠', '美国队长', '蝙蝠侠'],
      activeIndex: -1, // 当前选中的英雄的index索引,初始化的时候都没有选中,所以是-1
    }
  },
  methods: {
    onHeroClick(index) {
      // 在点击一个英雄时,把他的index索引传进来,并赋值给当前索引activeIndex
      this.activeIndex = index
    },
  },
}
</script>

<style>
.hero-item {
  cursor: pointer;
}
.red {
  color: red;
}
</style>

在工作中这样的列表最常见的就是网站的导航栏,
比如有首页、公司简介、关于我们、招聘信息等导航,
用户在哪个页面时,哪个的导航就是高亮的状态,
小伙伴们可以考虑一下怎么实现

动态绑定class还有其他的语法,大家在熟练掌握这种对象写法后,可以去官网上看一下其他的写法,我就不再介绍了,一下学太多对初学者来说容易记混了。

相关文章

网友评论

      本文标题:[vue3快速入门] 12.样式控制1——class绑定

      本文链接:https://www.haomeiwen.com/subject/zysfgltx.html