vue3 element-plus 图标(组件)替换方案 让element识别

最近在做vue3+vite+ element-plus 后台管理项目 原本以为后台管理样式大差不差就行
没想到UI走查时像素级的检查
比如下拉选择的三角icon element图标库里面有个实心三角的icon
我通过原有插槽进行替换 suffix-icon
正当我暗自庆幸自己的奇巧淫技时 被UI告知 '我图上的三角是有圆角的'

what s the f*** !

跑题了 开始上fuck good


从vue2中我们常用的更换图标的方法是找到 类似于这个样式的一个码 放到伪类中进行替换

.el-icon-plus:before {
    content: "\e6d9";
}

当然 这个方案在vue3中 貌似不能用的这么痛快

方案一 :在element未给出插槽时 且不存在一个容器内有两个相同标签名的icon标签

所以 还有更常用的方案 就是找到这个class名 将其背景图片设置为要更改的图标样式
比如这样

          .icon-arrow-down{
              background-image: url('@/assets/svg/sanjiao3.svg');
              background-position: center;
              background-size: 100%;
              background-repeat: no-repeat;
              // width: 12px;
              // height: 12px;
              svg{
                display: none;
              }
            }

方案二: 这个方案其实和方案一类似 只不过 某些场景 不能动当前的标签名 而又需要在当前的标签前后加上图标

比如这样

                .el-message-box__title:before {
                    content: '';
                    position: absolute;
                    left: 0;
                    top: -3px;
                    width: 22px;
                    height: 22px;
                    background-image: url(../assets/confirmi.png);
                    background-repeat: no-repeat;
                    background-size: 100% 100%;
                }

也就是使用伪类 在前面或者后天添加进去图标 ,在这里 这是个message-box 我需要在标题前面加上一个icon

以上方案足以解决大部分图标问题,但有的时候 比如我方案一的描述不存在一个容器内有两个相同标签名的icon标签

在这里我举例一个场景:


image.png

select选择下拉框组件:如果添加clearble属性后 选择值后鼠标悬浮会出现个小X号


image.png

这个好在select给出两个插槽 但是此插槽非彼插槽 是直接在属性上的


image.png

element是使用js控制的DOM 他俩的类名是相同的 也就是说 我如果使用方法一方法二更换了图标 这两种状态显示的图标会同时被替换 相当于改了一个其他的也被改


image.png

image.png

现在的问题点在抓住这两个状态进行控制 css上是抓不住了 如果想改某个下拉框可以单独写js 根据当前下拉框是否有值加上:class 去展示

但是我要全局都用 这样会太麻烦 唯一的办法是通过更换element能够识别的图标组件

方案三: element给出的插槽 使用外面的图标库(这个方法我还没用过 别的地儿找的)

           <el-input @input="fun" class="inputClass"  v-model="inputModel">
            <template #prefix>
                <i class="iconfont icon-wodimaya"></i>
            </template>
          </el-input>

方案四:做一个让element能识别的图标组件 并且全局放入到element的图标组件库中

第一步

需要安装插件
npm i -D unplugin-icons


第二步

config中配置
Vue3 + VueCLI

// vue.config.js
// 引入
const Icons = require('unplugin-icons/webpack')
module.exports = {
  configureWebpack: {
    plugins: [
      // 使用
      Icons({ compiler: 'vue3' }),
    ],
  }
}



vue3 + vite

// vite.config.js
import Icons from 'unplugin-icons/vite'
 
export default defineConfig({
  plugins: [
    Icons({ compiler: 'vue3' }),
  ],
})

第三步

放入要替换的svg文件


image.png
第四步

config中配置SVG 文件解析的 loader

        Icons({ 
          compiler: 'vue3',
          autoInstall: true,
        // 自定义图标加载
          customCollections: {
               // home图标集
               // 给svg文件设置fill="currentColor"属性,使图标的颜色具有适应性
               home: FileSystemIconLoader('src/assets/svg', svg => svg.replace(/^<svg /, '<svg fill="currentColor" ')),
          }
        }),
第五步

在页面中引用一下 看看是否成功

<template>
  <el-icon size="14" color="#000"><IconSanjiao /></el-icon>
</template>
 
<script setup>
// 自定义图标
import IconSanjiao from '~icons/home/sanjiao3';
</script>

在这一步 把图标名放入到属性插槽中是不显示的 因为element现在还不认她


image.png
第六步

让element识别到她
个人认为这一步比较关键 在加载ElementPlusIconsVue时 将自己的组件混入其中 比如这样
而在后面调用时 key 也就是你组件的名字


image.png

现在去页面看一下效果呗

至此 大部分vue3图标组件就处于可调整的状态了

希望更多大佬能给给出其他思路与技巧 大家一起探讨!

更多unplugin-icons使用方法参考
https://blog.csdn.net/qq_43430453/article/details/123267638

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358

推荐阅读更多精彩内容