当前位置: 首页 > news >正文

vue使用element-ui自定义样式思路分享【实操】

前言

在使用第三方组件时,有时候组件提供的默认样式不满足我们的实际需求,需要对默认样式进行调整,这就需要用到样式穿透。本篇文章以vue3使用element-ui的Tabs组件,对Tabs组件的添加按钮样式进行客制化为例。

确定需要修改的组件

组件代码

<template><el-tabsv-model="editableTabsValue"type="card"class="demo-tabs"editable@edit="handleTabsEdit"><template #add-icon><el-icon><Select/></el-icon></template><el-tab-panev-for="item in editableTabs":key="item.name":label="item.title":name="item.name">{{ item.content }}</el-tab-pane></el-tabs></template>

预览&确认修改目标

例如修改新闻标签下Tabs组件的添加按钮样式,计划将边框范围扩大、边框调整成圆形、√图标扩大
在这里插入图片描述

新建div以及自定义class

新建一个div,将el-tabs组件包住,并声明一个语义清晰的自定义class name,此处以new-tabs为例

<template><div class="new-tabs"><el-tabsv-model="editableTabsValue"type="card"class="demo-tabs"editable@edit="handleTabsEdit"><template #add-icon><el-icon><Select/></el-icon></template><el-tab-panev-for="item in editableTabs":key="item.name":label="item.title":name="item.name">{{ item.content }}</el-tab-pane></el-tabs></div>
</template>

在浏览器调整样式

定位需要调整的组件

在浏览器打开开发者模式,开启元素检查模式
在这里插入图片描述
定位需要调整的添加按钮,关注离选择元素最接近的class,此处为el-tabs__new-tab,我们可以在右侧观察到el-tabs__new-tab中需要调整的样式,以及刚才新增的自定义样式new-tabs
在这里插入图片描述

在浏览器中调整&预览样式

关注右侧el-tabs__new-tab的样式,我们需要边框范围扩大、边框调整成圆形、√图标扩大。于是将heightwidth从20px调整为30px,border-radius调整成15px,font-size调整成16px

在这里插入图片描述
此时,我们只对样式进行了临时修改,刷新页面后会恢复原状,还需要对css代码进行调整,见下文

整理&修改样式穿透css

上文在浏览器中对el-tabs__new-tab的修改整理如下

.el-tabs__new-tab {height: 30px;width: 30px;border-radius: 15px;font-size: 16px;
}

<style scoped>中申明样式穿透(scoped能够限制自定义样式只会影响当前页面),以我们自定义的classnew-tabs开头,使用:deep()(vue3推荐),参数为上文定位的el-tabs__new-tab

<style scoped>
/* 新闻 */
.new-tabs :deep(.el-tabs__new-tab){height: 30px;width: 30px;border-radius: 15px;font-size: 16px;
}
</style>

确认修改效果

刷新,观察页面渲染,定位到按钮后,观察样式,可知道自定义样式生效,成功覆盖了默认样式
在这里插入图片描述

页面完整代码

<template><div class="new-tabs"><el-tabsv-model="editableTabsValue"type="card"class="demo-tabs"editable@edit="handleTabsEdit"><template #add-icon><el-icon><Select/></el-icon></template><el-tab-panev-for="item in editableTabs":key="item.name":label="item.title":name="item.name">{{ item.content }}</el-tab-pane></el-tabs></div>
</template><script setup lang="ts" name="News">
import axios from "axios";
import { ref } from 'vue'
import { Select } from '@element-plus/icons-vue'
import type { TabPaneName } from 'element-plus'
let tabIndex = 2
const editableTabsValue = ref('2')
const editableTabs = ref([{title: 'Tab 1',name: '1',content: 'Tab 1 news content',},{title: 'Tab 2',name: '2',content: 'Tab 2 news content',},
])const handleTabsEdit = (targetName: TabPaneName | undefined,action: 'remove' | 'add'
) => {if (action === 'add') {const newTabName = `${++tabIndex}`editableTabs.value.push({title: 'New Tab',name: newTabName,content: 'New Tab content',})editableTabsValue.value = newTabName} else if (action === 'remove') {const tabs = editableTabs.valuelet activeName = editableTabsValue.valueif (activeName === targetName) {tabs.forEach((tab, index) => {if (tab.name === targetName) {const nextTab = tabs[index + 1] || tabs[index - 1]if (nextTab) {activeName = nextTab.name}}})}editableTabsValue.value = activeNameeditableTabs.value = tabs.filter((tab) => tab.name !== targetName)}
}
</script><style scoped>
/* 新闻 */
.new-tabs :deep(.el-tabs__new-tab){height: 30px;width: 30px;border-radius: 15px;font-size: 16px;
}
</style>

http://www.mrgr.cn/news/95271.html

相关文章:

  • 【QT5 多线程示例】互斥锁
  • Web-Machine-N7靶机通关攻略
  • 工厂方法模式、简单工厂模式与抽象工厂模式的对比
  • Netty中的直接内存是怎么回事?
  • 强推 Maven多镜像源快速切换工具,GUI操作超便捷
  • 软件工程之软件验证计划Software Verification Plan
  • 模型空间、图纸空间、布局(Layout)之间联系——CAD c#二次开发
  • Java+Html实现前后端客服聊天
  • K8S学习之基础四十:K8S配置altermanager发送告警到钉钉群
  • [AI速读]如何构建高效的AMBA协议检查器(Checker IP)
  • 基于carla的模仿学习(附数据集CORL2017)更新中........
  • PWM控制电机转速的原理及相关寄存器值计算
  • 失败的面试经历(ʘ̥∧ʘ̥)
  • 英伟达黄仁勋2025GTC演讲深度解析:液冷GPU、AI工厂、机器人AI…...
  • electron桌面应用多种快速创建方法
  • Windows 系统安装 Python3.7 、3.8、3.9、3.10、 3.11 、3.12、3.13最新版,附带相应程序。
  • 尝试在软考65天前开始成为软件设计师-计算机网络
  • VulnHub-Web-Machine-N7通关攻略
  • mysql之DATE_FORMAT迁移到gbase8s
  • 拓展 Coco AI 功能 - 智能检索 Hexo 博客