element tab选项卡标签样式

news/2024/7/24 12:18:40 标签: javascript, css, elementui, vue

前言

今天工作时有一个需求,大致是把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>javascript">
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>javascript">
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>css">
.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>javascript">
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>css">
.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>

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


http://www.niftyadmin.cn/n/1257932.html

相关文章

JavaScript两个数组的数据处理

来自思否的一个问答。 原文链接 正文 问题 提问者大概需求为将下面的两个数组&#xff0c;经过处理后变为预期的数组 原数组 const arr1 [{ uid: 2 }, { uid: 3 }, { uid: 4 }]; const arr2 [{text: 随便1,children: [{ uid: 1 }, { uid: 2 }],},{text: 随便2,children: …

MySQL、Oracle和SQL Server的分页查询语句

原文地址&#xff1a;http://www.cnblogs.com/ginponson/p/5746435.html 假设当前是第PageNo页&#xff0c;每页有PageSize条记录&#xff0c;现在分别用Mysql、Oracle和SQL Server分页查询student表。 1.Mysql的分页查询 SELECT * FROM student LIMIT (PageNo - 1) * PageSi…

List 中去除 null 方法讨论

先看下面的程序段&#xff1a; public static void main(String[] args) { List<Integer> arrays new ArrayList<Integer>(); arrays.add(2); arrays.add(null); arrays.add(456); arrays.add(null); arrays.add(789); System.out.println(arrays); } …

前端工作周报8.2

记录工作中的收获 正文 1. 样式问题 文字超出容器显示省略号&#xff0c;必须设置三个属性&#xff1a; white-space: nowrap; text-overflow: ellipsis; overflow: hidden;除此之外&#xff0c;容器的display需为block/inline-block Margin负值不生效的话&#xff0c;考虑…

Python字符串基本操作

Python字符串基本操作 1、判断是不是合法的标识符isidentifier name"ABC" print(name.isidentifier()) 打印结果 True 2、首字母大写capitalize name abc print(name.capitalize()) 打印结果 Abc 3、计数count name abc print(name.count("a")) 打印结果 1…

js 字符串转数值 的常用方法和对比

话不多说&#xff0c;直接正文。 正文 常用方法为这三种 ~~按位取反再取反&#xff0c;作用是把字符串变为整数数值。Number(str) 会保留小数点parseInt(str) 化为整数数值 console.log(Number("121")); console.log(parseInt("121")); console.log(~~…

前端工作周报8.9

记录下前端实习工作的问题和收获。 正文 1. javaScript相关 即使 null 和 undefined 有关系&#xff0c;它们的用途也是完全不一样的。永远不必显式地将变量值设置为 undefined 。但 null 不是这样的。任何时候&#xff0c;只要变量要保存对象&#xff0c;而当时又没有那个对…

前端工作周报 8.16 8.23

本应两周写两个周报&#xff0c;但在上周主管和我说不用干vue了&#xff0c;需要学习dart->flutter。这两周主要是在学习&#xff0c;这个博客会贴很多平时联系的代码。 8.16 - 8.17 Dart 安装 下载SDK配置环境 helloworld 学习笔记 PS&#xff1a;很多与js相同的语法默认…