一.Iconfont
1.下载至本地
2.将文件引入 项目
3.在main.js注册
import '@/assets/font/iconfont.css'
4.使用:一定要注意iconfont后面的空格!!!
<i :class="'iconfont '+item.iconClass"></i>
二.使用svg :
详见:https://juejin.im/post/59bb864b5188257e7a427c09#heading-5
- 优点:
1.不用向woff|eot|ttf|
这些字体库发送请求,所有的svg都可以内联在html内。
2.矢量图,放缩不会失真
- 用法:
1.创建SvgIcon
<template>
<div
v-if="isExternal"
:style="styleExternalIcon"
class="svg-external-icon svg-icon"
v-on="$listeners"
/>
<svg
v-else
:class="svgClass"
aria-hidden="true"
v-on="$listeners"
>
<use :xlink:href="iconName" />
</svg>
</template>
<script>
// 是否外链
import { isExternal } from '@/utils/validate'
export default {
name: 'SvgIcon',
props: {
iconClass: {
type: String,
required: true
},
className: {
type: String,
default: ''
}
},
computed: {
isExternal () {
return isExternal(this.iconClass)
},
iconName () {
return `#icon-${this.iconClass}`
},
svgClass () {
if (this.className) {
return 'svg-icon ' + this.className
} else {
return 'svg-icon'
}
},
styleExternalIcon () {
return {
mask: `url(${this.iconClass}) no-repeat 50% 50%`,
'-webkit-mask': `url(${this.iconClass}) no-repeat 50% 50%`
}
}
}
}
</script>
<style scoped>
.svg-icon {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
.svg-external-icon {
background-color: currentColor;
mask-size: cover !important;
display: inline-block;
}
</style>
2.在src下创建icons文件夹
svg文件夹放自己下载的svg图标
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'
index.js
import Vue from 'vue'
import SvgIcon from '@/components/svg-icon'// svg component
/**
* svg-sprite-loader:去掉多余的注释只取path
* svgo:去掉svg中path 中产生的冗余信息
*/
Vue.component('svg-icon', SvgIcon)
// 自动引入svg
const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)
package.json
svgo:去掉svg中产生的冗余信息
cnpm install svgo --save
"scripts": {
"svgo": "svgo -f src/icons/svg --config=src/icons/svgo.yml"
},
main.js引入一下
import './icons'
组件使用
<svg-icon icon-class="user" />
配置webpack,见https://blog.youkuaiyun.com/qq_35993607/article/details/89451474