繼上次寫完《9012年了你還在用單色圖標?(iconfont多色圖標詳解)》以後,有一些小夥伴又問了我是否能在微信小程序中使用多色圖標呢?css
em....html
查閱了一些資料,發現小程序自己是不支持svg
的.這樣就否認了我想直接使用svg
引入多色圖標的想法.git
網上大多都只有對單色iconfont
字體引入的介紹,這裏貼上一篇我本身對小程序中引用多色圖標的方案.要是您又更好的解決方案請在評論處留言一塊兒學習一下😊,謝謝.github
方案的主角就是這名 mini-program-iconfont-cli 開源庫.其實你只要知道有這麼個東西而後按照裏面的README.md
一步一步就能夠實現效果了.web
在終端打開你的項目根目錄,而後使用npm
或者yarn
進行安裝.npm
npm install mini-program-iconfont-cli --save-dev
複製代碼
yarn add mini-program-iconfont-cli --dev
複製代碼
繼續使用命令生成配置文件:json
npx iconfont init
複製代碼
(這裏是npx
,不是npm
)小程序
此時會發現項目目錄生成了一個iconfont.json
文件:微信小程序
{
"symbol_url": "請參考README.md,複製 http://iconfont.cn 官網提供的JS連接",
"save_dir": "./iconfont", // 生成的組件保存的路徑
"use_rpx": false, // 是否使用微信提供的尺寸單位rpx仍是普通的像素單位px
"trim_icon_prefix": "icon-",
"default_icon_size": 18 // 默認字體大小
}
複製代碼
這裏的trim_icon_prefix
屬性作下解釋:bash
若是你的圖標有通用的前綴,而你在使用的時候又不想重複去寫,那麼能夠經過這種配置這個選項把前綴統一去掉。
好比我項目中全部的圖標的類名都是以icon-
開頭,這樣我在後面使用圖標類名的時候就能夠將icon-
這段給省略.
打開你iconfont
上的項目,並找到Symbol
的外部連接:
iconfont.json
的
symbol_url
下:
{
"symbol_url": "//at.alicdn.com/t/font_872514_tfvlfiqme6.js",
"save_dir": "./iconfont",
"use_rpx": false,
"trim_icon_prefix": "icon-",
"default_icon_size": 18
}
複製代碼
使用命令生成小程序組件
npx iconfont
複製代碼
此時項目目錄中會多出一個iconfont
的文件夾,它裏面存放的就是生成的圖標組件.
既然上面生成的是組件的話,那麼咱們就能夠將其當成小程序中其它的組件同樣來使用:
全局引用,在app.json
中加上配置:
"usingComponents": {
"iconfont": "./iconfont/iconfont"
}
複製代碼
頁面上使用起來也是很是簡單,這裏我就直接貼上了:
// 原色彩
<iconfont name="alipay" />
// 單色:紅色
<iconfont name="alipay" color="red" />
// 多色:紅色+橘色
<iconfont name="alipay" color="{{['red', 'orange']}}" size="300" />
複製代碼
我本身也新建了一個項目測試了一下是能實現效果的:
block
類型的,這樣就照成了會換行的狀況,因而我在全局的
wxss
中加上:
iconfont {
display: inline-block;
}
複製代碼
如果後面,你的項目須要更新圖標的話,只須要從新配置一下iconfont.json
中的symbol_url
,而後執行:
npx iconfont
複製代碼
從新生成iconfont
組件就能夠了.
說到這裏基本就能夠在項目中使用多色的iconfont
,後面的內容主要是對這種實現方式的擴展,感興趣的小夥伴能夠接着往下看.
由於我在前言中也提到了,小程序中暫時是不支持svg
的,因此一樣是一段代碼,你將它放在.html
中是能夠正常顯示成一個圖標的,可是放在wxml
中卻沒有效果:
<svg fill="#000000" height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg">
<path d="M0 0h24v24H0z" fill="none"/>
<path d="M19 19H5V5h7V3H5c-1.11 0-2 .9-2 2v14c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2v-7h-2v7zM14 3v2h3.59l-9.83 9.83 1.41 1.41L19 6.41V10h2V3h-7z"/>
</svg>
複製代碼
svg
,可是咱們能夠經過
css
,設置背景圖片的方式來設置。所以
mini-program-iconfont-cli
的做用應該是將
svg
轉化爲
Base64
格式。而後生成一個個能夠在小程序中使用的組件.
同時咱們打開iconfont
文件夾下的iconfont.wxml
文件,也能夠發現裏面就是生成了一個個view
標籤而後設置上背景圖片.
這裏貼上一個將svg
轉換爲Base64
的網址:
我這裏使用的方案可能也不是最合理的,但願能起到拋磚引玉的做用.另外看了一下,我添加了2個多色,一個單色的圖標,生成的iconfont
文件夾就有16KB
了,還算是比較大的.另外我把iconfont
官網上的圖標下載到本地比較了一下大小:
參考文章:
知識無價,支持原創.