歪向UI设计的前端技巧-如何使用icon

1,370 阅读3分钟

1、将svg转为font

这里要介绍两个网站:

(1)www.iconfont.cn/home/index(获取想要的图标的svg)

(2)icomoon.io/ (将svg转成font)

First,find what svg you want.

打开www.iconfont.cn/home/index


这里有很多图标,基本需求都可以满足,你可以在搜索栏搜索关键词来找到你想要的图标,比如搜索refresh


选择你想要的那个,下载svg格式

然后到icomoon网站上转成font和css


选择selection,再选择左上角import icons,把我们刚下载的svg导入


然后选中它,切换到右边菜单generate font

然后就可以下载了,在下载前我们可以设置下下载文件夹名和fontclass的前缀

一般默认就好了

解压下载的文件夹,打开


将fonts文件夹和style.css复制到vue项目的assets目录下,打开style.css我们可以看到


检查style.css对font文件夹内的文件的引用路径是否正确

然后在style.css文件最后就是我们真正要用到的font class了,这里icon-refresh就是我们导入的refresh那个svg转成的


接着在main.js里面引入style.css

再在页面任意地方加

<i class="icon-refresh"></i>

启动项目,我们就可以看到页面上多了一个refresh刷新的icon啦


我们还可以改变他的颜色,只要给icon-refresh这个class加上color字体颜色,就可以改变啦,前提是你这个svg是不带颜色的~


上面所说的大家都应该很熟悉了,如果是个人开发还好,iconfont网站上的很多svg都是标准的,接下来我说一下企业开发会遇到的问题吧

如果公司UI是用蓝湖的话,可能会遇到有些svg下载下来后上传到icomoon时报错,特别是比较复杂的圆圈类或者方形类的svg,比如这个 说明提示的icon 



下载font class文件到项目中引入,也会发现这个class并不能渲染出所要的icon效果


这时候,在不麻烦UI设计师的情况下,我们可以怎么处理呢

这时候我们需要一个软件,叫sketch

新建一个文档,把刚刚下载的svg拖进去

点击左边svg结构展开

选中相关的图层,分别轮廓化,轮廓化在上方菜单图层选项里


轮廓化完成后,选择最顶级( 这里是编组5(2) ),选择导出->导出画布->svg格式,点右上角的导出按钮

将导出的svg再次上传到icomoon,你会发现跟一开始不一样了,在generate中可以看到icon的样子


这时再下载font class到项目中使用,大功告成!


2、直接存放svg在项目中,通过组件渲染icon

首先先在src下建个icons文件夹,下面建个svg文件夹专门存放svg文件,与svg文件夹同级建个index.js

然后在components下建个SvgIcon文件夹,在其下面写个组件:

<template>
    <svg :class="svgClass" aria-hidden="true">
        <use :href="iconName"></use>
    </svg>
</template>
<script>
export default {
    name: 'icon',
    props: {
        iconClass: {
            type: String,
            default: ''
        },
        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>

接着icons/index.js的代码(自动引入svg文件夹下所有svg文件):

import Vue from 'vue'
import SvgIcon from '../components/SvgIcon/index'

Vue.component('svg-icon', SvgIcon)
const req = require.context('./svg', false, /\.svg$/)
const requireAll = requireContext => requireContext.keys().map(requireContext)
requireAll(req)

然后在main.js中引入icons/index.js

还差最后一步,在打包时你需要一个loader来解析你的svg文件,它就是 svg-sprite-loader

npm i svg-sprite-loader --save-dev

在vue.config.js的chainWebpack里配置loader

config.module
    .rule('svg')  
    .exclude.add(resolve('src/icons')) 
    .end()
config.module  
    .rule('icons')  
    .test(/\.svg$/)  
    .include.add(resolve('src/icons'))  
    .end()  
    .use('svg-sprite-loader')  
    .loader('svg-sprite-loader')  
    .options({    
        symbolId: 'icon-[name]' 
     })  
    .end()

大功告成!你就可以直接在项目里使用svgicon组件来渲染你svg icon了!

<svg-icon icon-class="refresh"></svg-icon>



希望可以帮到大家~