element tab选项卡标签样式

前言

今天工作时有一个需求,大致是把elementUI的选项卡标签样式修改修改。起初是想直接重写element样式类,但是需求中还需对标签中的数字特殊处理,这种方式就行不通了。百度找了很久,终于在一个偏僻的角落找到了答案。

正文

使用插槽

其实这个解决方式,也是我第一时间想到的,但是查阅官网后,发现并没有对label的插槽。但是看着那位老哥的写法,试了试果然成功了。现在整理整理,发出来与大家共勉。

原始的代码以及效果图
<template>
  <el-tabs v-model="activeName" @tab-click="handleClick">
    <el-tab-pane
      v-for="item in tabs"
      :label="item.count ? item.title + item.count : item.title"
      :name="item.value"
      :key="item.id"
    >
      {{ item.id }}
    </el-tab-pane>
  </el-tabs>
</template>

<script>
export default {
  data() {
    return {
      activeName: "first",
      tabs: [
        {
          title: "消息",
          value: "first",
          count: 3,
          id: 1
        },
        {
          title: "待办",
          value: "second",
          count: 4,
          id: 2
        },
        {
          title: "角色管理",
          value: "third",
          id: 3
        }
      ]
    };
  },
  methods: {
    handleClick(tab, event) {
      console.log(tab, event);
    }
  }
};
</script>

<style scoped></style>

在这里插入图片描述
如果我对整体进行处理,比如把消息3字体设置大一些,颜色改一改,那么你直接重写el-tab-pane这个样式类即可;但现在我想给标签中的数字来点间距和背景色啥的,这种方式就不行了。下面是解决方法。

使用插槽后的代码和效果图
<template>
  <el-tabs v-model="activeName" @tab-click="handleClick">
    <el-tab-pane
      v-for="item in tabs"
      :label="item.count ? item.title + item.count : item.title"
      :name="item.value"
      :key="item.id"
    >
      <div slot="label">
        <span class="key">{{ item.title }}</span>
        <span class="value" v-if="item.count">{{ item.count }}</span>
      </div>
      {{ item.id }}
    </el-tab-pane>
  </el-tabs>
</template>

<script>
export default {
  data() {
    return {
      activeName: "first",
      tabs: [
        {
          title: "消息",
          value: "first",
          count: 3,
          id: 1
        },
        {
          title: "待办",
          value: "second",
          count: 4,
          id: 2
        },
        {
          title: "角色管理",
          value: "third",
          id: 3
        }
      ]
    };
  },
  methods: {
    handleClick(tab, event) {
      console.log(tab, event);
    }
  }
};
</script>

<style scoped>
.value {
  color: #ff0000;
  font-size: 16px;
}
</style>

在这里插入图片描述
如果你要是接过来一张设计稿,里面提及选项卡标签选中和未选中的字体颜色,大小,背景颜色等等,那么当你设置了这些样式之后,就会发现elementUI的默认tab切换效果失效了。这时,我们就要写一个active类来控制切换样式。在这里我简单示范下。

最终代码以及预览图
<template>
  <el-tabs v-model="activeName" @tab-click="handleClick">
    <el-tab-pane
      v-for="item in tabs"
      :label="item.count ? item.title + item.count : item.title"
      :name="item.value"
      :key="item.id"
    >
      <div
        slot="label"
        class="my-label"
        :class="activeName === item.value ? 'tab-active' : ''"
      >
        <span class="key">{{ item.title }}</span>
        <span class="value" v-if="item.count">{{ item.count }}</span>
      </div>
      {{ item.id }}
    </el-tab-pane>
  </el-tabs>
</template>

<script>
export default {
  data() {
    return {
      activeName: "first",
      tabs: [
        {
          title: "消息",
          value: "first",
          count: 3,
          id: 1
        },
        {
          title: "待办",
          value: "second",
          count: 4,
          id: 2
        },
        {
          title: "角色管理",
          value: "third",
          id: 3
        }
      ]
    };
  },
  methods: {
    handleClick(tab, event) {
      console.log(tab, event);
    }
  }
};
</script>

<style scoped>
.my-label {
  color: #424242;
}

.my-label .key {
  font-size: 14px;
  font-family: PingFangSC-Regular, PingFang SC;
  font-weight: 400;
  line-height: 20px;
}

.my-label .value {
  vertical-align: middle;
  display: inline-block;
  width: 21px;
  height: 16px;
  font-size: 12px;
  font-family: CZ-Regular, CZ;
  font-weight: 400;
  line-height: 15px;
  background: #f5f5f5;
  border-radius: 8px;
  margin: -4px 0 0 4px;
}

.tab-active {
  color: #01b27a;
}

.tab-active .value {
  background-color: #e5f7f1;
}
</style>

在这里插入图片描述
如果对你有帮助的话,请点一个赞吧

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
element-ui实现tab选项卡的基本用法可以通过el-tabs和el-tab-pane组件来实现。首先,需要在data中定义一个变量来控制当前选中的标签页,然后使用v-model指令将el-tabs的value属性与该变量进行绑定。接下来,在el-tabs中使用v-for指令遍历标签页,并使用el-tab-pane组件来创建每个标签页。在el-tab-pane中,使用:label属性来设置标签页的标题,使用:name属性来设置标签页的唯一标识符。最后,可以在el-tab-pane的内容区域插入需要显示的内容。 对于自定义标签样式,可以使用插槽来实现。在el-tab-pane中,可以使用slot="label"来定义一个插槽,然后在插槽中编写自定义的标签页内容,可以包含任意的HTML元素和Vue指令。 下面是具体的代码示例: ```html <template> <el-tabs v-model="activeName" @tab-click="handleClick"> <el-tab-pane v-for="item in tabs" :label="item.count ? item.title + ' ' + item.count : item.title" :name="item.value" :key="item.id"> <div slot="label"> <span class="key">{{ item.title }}</span> <span class="value" v-if="item.count">{{ item.count }}</span> </div> {{ item.id }} </el-tab-pane> </el-tabs> </template> <script> export default { data() { return { activeName: "first", tabs: [ { title: "消息", value: "first", count: 3, id: 1 }, { title: "待办", value: "second", count: 4, id: 2 }, { title: "角色管理", value: "third", id: 3 } ] }; }, methods: { handleClick(tab, event) { console.log(tab, event); } } }; </script> <style scoped> .value { color: #ff0000; font-size: 16px; } </style> ``` 以上代码实现了一个基本的tab选项卡,每个标签页都有一个标题和一个可选的数字,点击标签页会触发handleClick方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值