vue優(yōu)雅地使用icon,包括運行svg文件

?? 之前大部分 icon 是png圖片糕珊,當有兩種狀態(tài)時就需要兩種圖片的替換动分,占用的體積也是比較大的,后來接觸到了阿里iconfont红选,簡直不能太好用澜公,接下來就帶你領(lǐng)略 vue 的美好!

1. 使用阿里iconfont

  1. iconfont 官網(wǎng)上選擇自己想要的圖標喇肋,如果沒有想要的圖標揍诽,就讓ui在 adobe illustrator(簡稱 AI)軟件上繪制想要的圖標茁计,繪制前先下載 圖標制作模板.AI,繪制完成后一定要存儲為 svg,不要使用導出為 svg妓美,然后在上傳到 iconfont 官網(wǎng) 上就可以了潮峦。 參考
AI軟件
上傳后的圖標
  1. 將圖標添加到購物車入偷,點擊購物車嘹屯,添加至項目(方便日后項目管理),在項目目錄下低葫,點擊下載至本地详羡,就拿到字體文件了。
項目目錄
  1. src/assets 目錄下創(chuàng)建一個 fonts 文件夾嘿悬,將解壓后的 iconfont.eot殷绍、 iconfont.svg、 iconfont.ttf鹊漠、 iconfont.woff 這 4 個文件放進去主到。
下載并解壓后的字體文件
fonts 文件夾
  1. 將解壓后的 iconfont.css 文件放到 src/assets 目錄下茶行,并修改里面的字文件路徑,主要在 url 的位置新增 ./fonts/ 登钥。
修改后的 iconfont.css 文件
  1. main.js 中引入 iconfont.css畔师,加入以下代碼:
  import '@/assets/iconfont.css'
  1. 在要引入圖標的 .vue 文件中的相應位置寫以下的代碼:(注意:icon-eye 是在 iconfont.css 文件中的類名,)
  <i class="iconfont icon-eye" ></i>
HelloWorld.vue
效果圖

2. vue項目運行 svg 文件牧牢,與上文無聯(lián)系看锉,要說有點聯(lián)系的話最多也就是如何讓 ui給你想要的svg 文件的做法和上文的相同

  1. 安裝 svg-sprite-loader 插件,運行以下命令:
  npm i svg-sprite-loader -D
  1. 修改 webpack 的配置文件塔鳍,在 webpack.base.conf.js 中修改如下代碼:
image.png
     {
        test: /\.svg$/,
        loader: 'svg-sprite-loader',
        include: [resolve('src/icons')],
        options: {
          symbolId: 'icon-[name]'
        }
      },
      {
        test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
        loader: 'url-loader',
        exclude: [resolve('src/icons')],
        options: {
          limit: 10000,
          name: utils.assetsPath('img/[name].[hash:7].[ext]')
        }
      },
  1. src 目錄新建一個 icons 文件夾伯铣,里面放三個內(nèi)容:1)、 存放 .svg 文件的 svg文件夾 轮纫; 2)腔寡、 全局注冊組件的 index.js 文件 ;3)掌唾、svgo.yml 文件放前。
    // index.js  文件
    import Vue from 'vue'
    import SvgIcon from '@/components/SvgIcon'// svg組件

    // register globally
    Vue.component('svg-icon', SvgIcon)

    const req = require.context('./svg', false, /\.svg$/)
    const requireAll = requireContext => requireContext.keys().map(requireContext)
    requireAll(req)
  • svgo.yml 文件:
# replace default config

# multipass: true
# full: true

plugins:

  # - name
  #
  # or:
  # - name: false
  # - name: true
  #
  # or:
  # - name:
  #     param1: 1
  #     param2: 2

- removeAttrs:
    attrs:
      - 'fill'
      - 'fill-rule'

  1. 注冊 Svgicon 組件。 在 components 文件夾下新建 SvgIcon 文件夾糯彬,里面放置 index.vue 文件凭语, 代碼如下:
<template>
  <svg :class="svgClass" aria-hidden="true">
    <use :xlink:href="iconName"/>
  </svg>
</template>

<script>
export default {
  name: 'SvgIcon',
  props: {
    iconClass: {
      type: String,
      required: true
    },
    className: {
      type: String,
      default: ''
    }
  },
  computed: {
    iconName() {
      return `#icon-${this.iconClass}`
    },
    svgClass() {
      if (this.className) {
        return 'svg-icon ' + this.className
      } else {
        return 'svg-icon'
      }
    }
  }
}
</script>

<style scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}
</style>
  1. main.js 中引入全局注冊組件的 index.js 文件,main.js中要加的代碼如下:
  import '@/icons' //  全局注冊組件
  1. 需要使用圖標的地方(.vue 文件)使用以下代碼:
  <svg-icon icon-class="icon_set"/>
項目目錄
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末撩扒,一起剝皮案震驚了整個濱河市似扔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搓谆,老刑警劉巖虫几,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異挽拔,居然都是意外死亡,警方通過查閱死者的電腦和手機但校,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門螃诅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人状囱,你說我怎么就攤上這事术裸。” “怎么了亭枷?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵袭艺,是天一觀的道長。 經(jīng)常有香客問我叨粘,道長猾编,這世上最難降的妖魔是什么瘤睹? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮答倡,結(jié)果婚禮上轰传,老公的妹妹穿的比我還像新娘。我一直安慰自己瘪撇,他們只是感情好获茬,可當我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著倔既,像睡著了一般恕曲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上渤涌,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天佩谣,我揣著相機與錄音,去河邊找鬼歼捏。 笑死稿存,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的瞳秽。 我是一名探鬼主播瓣履,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼练俐!你這毒婦竟也來了袖迎?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腺晾,失蹤者是張志新(化名)和其女友劉穎燕锥,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體悯蝉,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡归形,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鼻由。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暇榴。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蕉世,靈堂內(nèi)的尸體忽然破棺而出蔼紧,到底是詐尸還是另有隱情,我是刑警寧澤狠轻,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布奸例,位于F島的核電站,受9級特大地震影響向楼,放射性物質(zhì)發(fā)生泄漏查吊。R本人自食惡果不足惜谐区,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望菩貌。 院中可真熱鬧卢佣,春花似錦、人聲如沸箭阶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仇参。三九已至嘹叫,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間诈乒,已是汗流浹背罩扇。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怕磨,地道東北人喂饥。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像肠鲫,于是被迫代替她去往敵國和親员帮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,507評論 2 359

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