vue3 element-plus 圖標(biāo)(組件)替換方案 讓element識(shí)別

最近在做vue3+vite+ element-plus 后臺(tái)管理項(xiàng)目 原本以為后臺(tái)管理樣式大差不差就行
沒(méi)想到UI走查時(shí)像素級(jí)的檢查
比如下拉選擇的三角icon element圖標(biāo)庫(kù)里面有個(gè)實(shí)心三角的icon
我通過(guò)原有插槽進(jìn)行替換 suffix-icon
正當(dāng)我暗自慶幸自己的奇巧淫技時(shí) 被UI告知 '我圖上的三角是有圓角的'

what s the f*** !

跑題了 開(kāi)始上fuck good


從vue2中我們常用的更換圖標(biāo)的方法是找到 類(lèi)似于這個(gè)樣式的一個(gè)碼 放到偽類(lèi)中進(jìn)行替換

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

當(dāng)然 這個(gè)方案在vue3中 貌似不能用的這么痛快

方案一 :在element未給出插槽時(shí) 且不存在一個(gè)容器內(nèi)有兩個(gè)相同標(biāo)簽名的icon標(biāo)簽

所以 還有更常用的方案 就是找到這個(gè)class名 將其背景圖片設(shè)置為要更改的圖標(biāo)樣式
比如這樣

          .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;
              }
            }

方案二: 這個(gè)方案其實(shí)和方案一類(lèi)似 只不過(guò) 某些場(chǎng)景 不能動(dòng)當(dāng)前的標(biāo)簽名 而又需要在當(dāng)前的標(biāo)簽前后加上圖標(biāo)

比如這樣

                .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%;
                }

也就是使用偽類(lèi) 在前面或者后天添加進(jìn)去圖標(biāo) ,在這里 這是個(gè)message-box 我需要在標(biāo)題前面加上一個(gè)icon

以上方案足以解決大部分圖標(biāo)問(wèn)題震桶,但有的時(shí)候 比如我方案一的描述不存在一個(gè)容器內(nèi)有兩個(gè)相同標(biāo)簽名的icon標(biāo)簽

在這里我舉例一個(gè)場(chǎng)景:


image.png

select選擇下拉框組件:如果添加clearble屬性后 選擇值后鼠標(biāo)懸浮會(huì)出現(xiàn)個(gè)小X號(hào)


image.png

這個(gè)好在select給出兩個(gè)插槽 但是此插槽非彼插槽 是直接在屬性上的


image.png

element是使用js控制的DOM 他倆的類(lèi)名是相同的 也就是說(shuō) 我如果使用方法一方法二更換了圖標(biāo) 這兩種狀態(tài)顯示的圖標(biāo)會(huì)同時(shí)被替換 相當(dāng)于改了一個(gè)其他的也被改


image.png

image.png

現(xiàn)在的問(wèn)題點(diǎn)在抓住這兩個(gè)狀態(tài)進(jìn)行控制 css上是抓不住了 如果想改某個(gè)下拉框可以單獨(dú)寫(xiě)js 根據(jù)當(dāng)前下拉框是否有值加上:class 去展示

但是我要全局都用 這樣會(huì)太麻煩 唯一的辦法是通過(guò)更換element能夠識(shí)別的圖標(biāo)組件

方案三: element給出的插槽 使用外面的圖標(biāo)庫(kù)(這個(gè)方法我還沒(méi)用過(guò) 別的地兒找的)

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

方案四:做一個(gè)讓element能識(shí)別的圖標(biāo)組件 并且全局放入到element的圖標(biāo)組件庫(kù)中

第一步

需要安裝插件
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,
        // 自定義圖標(biāo)加載
          customCollections: {
               // home圖標(biāo)集
               // 給svg文件設(shè)置fill="currentColor"屬性查库,使圖標(biāo)的顏色具有適應(yīng)性
               home: FileSystemIconLoader('src/assets/svg', svg => svg.replace(/^<svg /, '<svg fill="currentColor" ')),
          }
        }),
第五步

在頁(yè)面中引用一下 看看是否成功

<template>
  <el-icon size="14" color="#000"><IconSanjiao /></el-icon>
</template>
 
<script setup>
// 自定義圖標(biāo)
import IconSanjiao from '~icons/home/sanjiao3';
</script>

在這一步 把圖標(biāo)名放入到屬性插槽中是不顯示的 因?yàn)閑lement現(xiàn)在還不認(rèn)她


image.png
第六步

讓element識(shí)別到她
個(gè)人認(rèn)為這一步比較關(guān)鍵 在加載ElementPlusIconsVue時(shí) 將自己的組件混入其中 比如這樣
而在后面調(diào)用時(shí) key 也就是你組件的名字


image.png

現(xiàn)在去頁(yè)面看一下效果唄

至此 大部分vue3圖標(biāo)組件就處于可調(diào)整的狀態(tài)了

希望更多大佬能給給出其他思路與技巧 大家一起探討旨椒!

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市乖寒,隨后出現(xiàn)的幾起案子覆旭,更是在濱河造成了極大的恐慌,老刑警劉巖瘸味,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異够挂,居然都是意外死亡旁仿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)孽糖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)枯冈,“玉大人,你說(shuō)我怎么就攤上這事梭姓。” “怎么了嫩码?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵誉尖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我铸题,道長(zhǎng)铡恕,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任丢间,我火速辦了婚禮探熔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烘挫。我一直安慰自己诀艰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布饮六。 她就那樣靜靜地躺著其垄,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卤橄。 梳的紋絲不亂的頭發(fā)上绿满,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音窟扑,去河邊找鬼喇颁。 笑死漏健,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的橘霎。 我是一名探鬼主播蔫浆,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼茎毁!你這毒婦竟也來(lái)了克懊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤七蜘,失蹤者是張志新(化名)和其女友劉穎谭溉,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體橡卤,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扮念,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了碧库。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柜与。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖嵌灰,靈堂內(nèi)的尸體忽然破棺而出弄匕,到底是詐尸還是另有隱情,我是刑警寧澤沽瞭,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布迁匠,位于F島的核電站,受9級(jí)特大地震影響驹溃,放射性物質(zhì)發(fā)生泄漏城丧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一豌鹤、第九天 我趴在偏房一處隱蔽的房頂上張望亡哄。 院中可真熱鬧,春花似錦布疙、人聲如沸蚊惯。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拣挪。三九已至,卻和暖如春俱诸,著一層夾襖步出監(jiān)牢的瞬間菠劝,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赶诊,地道東北人笼平。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像舔痪,于是被迫代替她去往敵國(guó)和親寓调。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容