記錄iconfont
的三種使用方式 多色圖標出來已經好久了,如今纔拿出來講貌似有點過期... 但爲了方便本身之後知道怎麼使用,也爲了讓更多剛入門的新手熟悉iconfont
,仍是決定寫一篇比較詳細的文章來記錄它的使用方式。 本文主要是參考花叔的文章:手摸手,帶你優雅的使用 iconjavascript
在iconfont官網上建立一個本身的帳號,並建立一個項目。在官網上挑選響應的圖標添加進項目中。好比我這裏有一個名爲vuepress-bolg
的項目,添加了一個github
的圖標。 css
最基礎的一種使用方式,就是使用unicode
。 它的主要優勢是:html
vue
這樣的前端框架開發的話,你能夠在公共的css
中引入它: 好比個人vue
項目下有一個common.css
:/* common.css */
@font-face {
font-family: 'iconfont'; /* project id 872514 */
src: url('//at.alicdn.com/t/font_872514_urq1z9ughp.eot');
src: url('//at.alicdn.com/t/font_872514_urq1z9ughp.eot?#iefix') format('embedded-opentype'),
url('//at.alicdn.com/t/font_872514_urq1z9ughp.woff') format('woff'),
url('//at.alicdn.com/t/font_872514_urq1z9ughp.ttf') format('truetype'),
url('//at.alicdn.com/t/font_872514_urq1z9ughp.svg#iconfont') format('svg');
}
複製代碼
注:上面的內容不是複製個人,而是複製你在iconfont
項目上Unicode
下的內容。這段代碼的做用是遠程的引入iconfont
字體。你能夠不須要下載到本地。 第二步 定義字體 將字體引入到了項目中的話,你須要定一個類,讓它的字體類型爲iconfont
:前端
/* common.css */
@font-face {
font-family: 'iconfont'; /* project id 872514 */
src: url('//at.alicdn.com/t/font_872514_urq1z9ughp.eot');
src: url('//at.alicdn.com/t/font_872514_urq1z9ughp.eot?#iefix') format('embedded-opentype'),
url('//at.alicdn.com/t/font_872514_urq1z9ughp.woff') format('woff'),
url('//at.alicdn.com/t/font_872514_urq1z9ughp.ttf') format('truetype'),
url('//at.alicdn.com/t/font_872514_urq1z9ughp.svg#iconfont') format('svg');
}
.icon-online { /* 定義一個類 */
font-family:"iconfont" !important;
font-size:16px;
font-style:normal;
-webkit-font-smoothing: antialiased;
-webkit-text-stroke-width: 0.2px;
-moz-osx-font-smoothing: grayscale;
}
複製代碼
因爲個人字體是遠程引入的,因此這裏我就取名爲icon-online
,固然你也可使用其它的命名。 第三步 頁面上使用unicode
vue
<i class="icon-online"></i>
複製代碼
建立一個i
標籤,而後給它設置class
,以後在標籤中寫上你要使用的字體的代碼。這樣在頁面上顯示的就是你在對應的圖標啦。 能夠看到上面的這種unicode
有一個很大的弊端,就是你看到代碼裏的這串
,根本不知道它是個什麼圖標,須要打開iconfont
在你的項目上找對應的代碼才知道。因此有了另外一種font-class
的方式。java
第二種方式就是使用font-class
它的優勢是:git
iconfont
項目下的Font class
,並複製它:
而後在css
中引用:/* common.css */
@import "//at.alicdn.com/t/font_872514_urq1z9ughp.css";
@font-face {
font-family: 'iconfont'; /* project id 872514 */
src: url('//at.alicdn.com/t/font_872514_urq1z9ughp.eot');
src: url('//at.alicdn.com/t/font_872514_urq1z9ughp.eot?#iefix') format('embedded-opentype'),
url('//at.alicdn.com/t/font_872514_urq1z9ughp.woff') format('woff'),
url('//at.alicdn.com/t/font_872514_urq1z9ughp.ttf') format('truetype'),
url('//at.alicdn.com/t/font_872514_urq1z9ughp.svg#iconfont') format('svg');
}
.icon-online { /* 定義一個類 */
font-family:"iconfont" !important;
font-size:16px;
font-style:normal;
-webkit-font-smoothing: antialiased;
-webkit-text-stroke-width: 0.2px;
-moz-osx-font-smoothing: grayscale;
}
複製代碼
第二步 而後你在使用的時候就能夠將unicode
的方式改成font-class
啦:github
<i class="icon-online icon-github"></i>
複製代碼
注意⚠️: 不過你的前端項目要是用到了多組iconfont
,必定要主要命名空間的問題。web
不論是unicode
仍是font-class
都只支持單色的圖標,設置了iconfont
的i
標籤其實就至關於一個字了,也就是能夠根據color
來控制它的字體顏色。可是你並不能使用多色。小程序
隨着IE
慢慢的退出歷史舞臺,svg-icon
使用形式慢慢成爲主流和推薦的方法。 它主要有一下幾個優勢:
js
引入的方式有兩種:iconfont
的項目裏,點擊下載至本地,它會把這個項目相關的字體文件都下載下來。找到下載下來裏面的iconfont.js
文件,把它拷貝到你的前端項目裏(只須要拷貝這一個文件就能夠了),而後在前端代碼裏引用這個js
:<script src="./iconfont.js"></script>
複製代碼
iconfont.js
,而是直接用iconfont
項目裏生成的那個地址:<script src="//at.alicdn.com/t/font_872514_urq1z9ughp.js"></script>
複製代碼
第二步 設置通用的類名
/* common.css */
.icon {
width: 1em; height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
複製代碼
第三步 挑選相應圖標並獲取類名,應用於頁面:
<div>
<svg class="icon" aria-hidden="true">
<use xlink:href="#icon-github"></use>
</svg>
</div>
複製代碼
注意⚠️ 在xlink:href="#"
後面接的就是你圖標的font-class
,好比我這裏github
的圖標就是icon-github
。前綴icon-
並非全部圖標都會有,要根據本身圖標的font-class
來填寫它。 另外,使用symbol
這種方式是不須要引用woff|eot|ttf|
這些字體庫的,也就是上面的unicon
和font-class
兩步均可以省去。
如今你能夠去iconfont
彩色圖標庫挑選你想要的彩色圖標應用在頁面中啦。
完成上面的第三步,你已經能夠在項目中使用多色的圖標了。 可是做爲一個有"追求"的前端,怎麼能容許在每次要用到圖標的時候就寫那麼一長串的html
標籤呢。我相信,你首先想到的就是把它封裝成一個組件。(若是你真的想到了,恭喜你,和我心有靈犀🧡) 下面以在vue
中建立多色圖標組件爲例: 第一步
建立
IconSvg
組件
首先在你的組件文件夾中建立一個IconSvg.vue
文件:
<template>
<svg class="svg-icon" aria-hidden="true">
<use :xlink:href="iconName"></use>
</svg>
</template>
<script> export default { name: 'icon-svg', props: { iconClass: { type: String, required: true } }, computed: { iconName() { return `#${this.iconClass}` } } } </script>
<style> .svg-icon { width: 1em; height: 1em; font-size: 18px; vertical-align: -0.15em; fill: currentColor; overflow: hidden; } </style>
複製代碼
第二步
註冊爲全局組件
因爲多色圖標可能會在多處使用,因此我建議你將這個組件註冊爲全局的組件。 好比我會在components
文件夾下建立一個GlobalComponent
文件夾,文件夾目錄爲:
|-src
|-components
|-GlobalComponent
|-index.js
|-IconSvg.vue
複製代碼
而後在index.js
中,將其註冊爲全局組件:
// 存放一些全局的組件
import Vue from 'vue'
import IconSvg from './components/IconSvg'
//全局註冊icon-svg
Vue.component('icon-svg', IconSvg)
複製代碼
最後記得在main.js
中引入:
// main.js
...
import '@components/GlobalComponent' // 全局組件
...
複製代碼
第三步
使用多色圖標組件
使用的時候只須要指定對應的font-class
就能夠了:
<icon-svg icon-class="icon-github" />
複製代碼
是否是感受方便多了呢? 因爲icon-svg
也是一個組件,因此你還能夠給它加上額外的屬性,好比:
<icon-svg class="cur_pointer" style="font-size: 20px;" icon-class="icon-github" title="我是github圖標" />
複製代碼
可是在使用過程當中,我碰到了一個問題。 就是在你想給圖標添加一個事件的時候,倒是無效的。 好比我先給圖標添加一個點擊事件:
<icon-svg icon-class="icon-github" @click="onClick"/>
複製代碼
click
事件並無觸發。 暫時的解決方案:使用事件修飾符native
:
<icon-svg icon-class="icon-github" @click.native="onClick"/>
複製代碼
有更好解決方案的大佬請評論區留言,謝謝...
注⚠️ 我喜歡使用iconfont
的還一個好處是它能夠在一個項目中添加多個項目成員,這樣在團隊進行項目開發的時候是十分方便的。
請參考《微信小程序使用多色圖標詳解》
參考文章:手摸手,帶你優雅的使用 icon
知識無價,支持原創