小圖標(biāo)icon-fonts解決方案

  • 老生常談了,一般來(lái)說(shuō)簡(jiǎn)單優(yōu)化,可以選擇使用精靈圖,把多個(gè)icon放在一張圖中,本來(lái)需要請(qǐng)求多次的圖標(biāo)請(qǐng)求一次就ok了。

  • 本文介紹的是另一種方法,對(duì)于純色的icon,可以把他們打包成字體文件(目前應(yīng)該打包成兩個(gè)文件,一個(gè)*.ttf,一個(gè)*.woff,woff格式相對(duì)較新,是專門針對(duì)web的格式,兼容性不高,但是整體大小比tff文件小40%左右,所以引入兩個(gè)文件,如果打開(kāi)項(xiàng)目的瀏覽器支持woff格式的字體,則自動(dòng)引入woff),引入項(xiàng)目,一次請(qǐng)求就下載了全部項(xiàng)目用到的純色icon,就woff來(lái)說(shuō),我項(xiàng)目中的woff,經(jīng)過(guò)服務(wù)器壓縮,最后只有179B(這里修正一個(gè)錯(cuò)誤,貌似服務(wù)器并不能壓縮字體文件,但是也不用擔(dān)心,一個(gè)143個(gè)圖標(biāo)的woff文件只有不到15kb)。下面開(kāi)始介紹具體制作和引入方法。

  • 首先需要制作字體文件,在mac系統(tǒng)下,先下載一個(gè)軟件叫Panda,圖標(biāo)是一個(gè)熊貓,然后找UI要svg矢量圖(這個(gè)軟件只能用svg生成字體文件),軟件的使用很簡(jiǎn)單,首次使用點(diǎn)擊下面三個(gè)tab中的第一個(gè)“拼合”,把svg拖入軟件,點(diǎn)擊生成,軟件會(huì)在svg所在的文件夾生成一個(gè)demo文件夾,兩個(gè)字體文件就生成到這個(gè)文件里了


    image.png
  • 第二次添加圖標(biāo)的時(shí)候,點(diǎn)擊軟件下面三個(gè)tab中的第二個(gè)“修改”,把之前生成的ttf文件拖入軟件,再拖入需要添加的svg,點(diǎn)擊生成,就會(huì)更新“demo”文件夾中的字體文件了。

  • 制作好了字體文件,進(jìn)入第二步,比如把字體文件放入index.html同級(jí)的fonts文件夾中,推薦的做法是把字體圖標(biāo)的聲明和定義樣式全部抽離到一個(gè)文件中,再引入App.vue

  • 字體編碼可以在demo/demo.html中查看,比如第一個(gè)圖標(biāo)下面的編碼為ခ,則對(duì)應(yīng)的字體編碼為\1001

/* 使用font-face聲明字體 */
@font-face {
  font-family: 'iconfont';
  src: url('fonts/iconfont.woff?t=1510834658947') format('woff'), /* chrome, firefox */
       url('fonts/iconfont.ttf?t=1510834658947') format('truetype'); /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/
  font-weight: normal;
  font-style: normal
}

/* 定義使用iconfont的樣式 */
[class^="icon-font-"] {
  font-family: "iconfont" !important;
  speak: none;
  font-style: normal;
  font-weight: normal;
  font-variant: normal;
  text-transform: none;
  line-height: 1;
  vertical-align: baseline;
  display: inline-block;

  /* Better Font Rendering =========== */
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* 挑選相應(yīng)圖標(biāo)并獲取字體編碼,起個(gè)類名賦值給他的content */
i.icon-font-home:before {content: '\1001'}
  • 定義好之后就可以在頁(yè)面中使用了
<i class="icon-font-home"></i>

整合elementUI

  • 有的項(xiàng)目需要fork elementUI的樣式文件,修改成自己項(xiàng)目的風(fēng)格,我們也可以把圖標(biāo)整合進(jìn)elementUI本身的字體文件中。先下載 elementUI的樣式文件,解壓之后把文件夾中的src文件夾改個(gè)名字theme,放入/src/element,再修改main.js之前引入的element樣式文件路徑為import './element/theme/index.scss'

  • 然后重啟項(xiàng)目,這時(shí)你可能會(huì)發(fā)現(xiàn)報(bào)錯(cuò)了!

This relative module was not found:
* ./element/theme/index.scss in ./src/main.js
  • 居然說(shuō)找不到模塊,老子路徑明明沒(méi)錯(cuò)!莫慌,其實(shí)是你的項(xiàng)目解析不了scss文件,如果你使用的是webpack4.0+,只需要安裝一下sass就解決了,連寫配置都省了
// 在項(xiàng)目下,運(yùn)行下列命令行
npm install --save-dev sass-loader
// 因?yàn)閟ass-loader依賴于node-sass,所以還要安裝node-sass
npm install --save-dev node-sass
  • 下面就可以開(kāi)始修改字體文件了,把UI給你的svg添加到elementUI的字體文件中,步驟參照上面說(shuō)過(guò)的 第二次添加圖標(biāo) ,把需要修改的/src/element/theme/fonts/element-icons.ttf拖入熊貓,添加svg后生成新的字體文件,并用新生成的字體文件改名后替換element原來(lái)的那兩個(gè)字體文件

  • 最后一步,在/src/element/theme/icon.scss中配置一下剛才導(dǎo)入的圖標(biāo)就可以用了
    注意:類名前綴必須是'.el-icon-'

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容