封装自己的web字体图标库

308 阅读6分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

封装自己的web字体图标库
Jack Lee 的 个人博客
邮箱 :291148484@163.com
作者主页

掘金 主页juejin.cn/user/113073…

CSDN 主页blog.csdn.net/qq_28550263…

原文地址:blog.csdn.net/qq_28550263…(此页面为副本,如部分图片无法显示请参考我的原文)

相关文章推荐


目 录

1. 字体图标简介

2. 绘制或下载矢量图标素材

3. 生成字体文件

4. 图标字体文件的基本使用

5. 将字体图标文件封装成 Vue 组件


1. 字体图标简介

1.1 什么是字体图标

所谓字体图标指的是一种使用字体的编码规则来编码的图形,因此从本质上看其实与其叫做 字体图标还不如叫做 图标字体。图标字体是使用微小图形而不是字母形式的字体。与字符一样,每个图标可以使用 CSS 进行修改大小(font-size)、颜色(color)等等样式。

1.2 字体图的特点

特点描述
灵活Web 已针对显示文本进行了优化。轻松更改图标的颜色或应用其他 CSS 效果。Unicode 中有明确的图标和表情符号定义。字体一直是用来表示字母和图标的
可扩展使用图标字体,更改图标的大小就像更改字体大小一样简单
矢量字体图标与矢量和分辨率无关。它们在移动和桌面设备上的高和低 PPI 显示器上看起来都不错
迅速通过将图标设置为字体,您可以使用一个 HTTP 请求加载它们
无障碍如果操作正确,图标字体可以 100% 访问并与屏幕阅读器兼容
本地使用通过在您的系统上安装定制的 TTF 字体,您可以在各种不同的设计和编辑应用程序中使用它们

2. 绘制或下载矢量图标素材

要制作自己的图标库那么先得有自己的素材。我们的原始素材是SVG格式的矢量图片,它是一种基于基于 XML、由World Wide Web Consortium(W3C)联盟进行开发的矢量图形格式,严格来说应该是一种开放标准的矢量图形语言。能够绘制 SVG 图片的软件有许多

2.1 制合规的作svg图标

2.1.1 使用 Adobe Illustrator 制作

这里介绍使用 Adobe Illustrator 软件来绘制图标矢量文件的流程。 安装打开Adobe Illustrator

![在这里插入图片描述](img-blog.csdnimg.cn/8782b55c425… =45%x)

![在这里插入图片描述](img-blog.csdnimg.cn/6977204ef42… =45%x)

依次点击 对象>轮廓化描边 ![在这里插入图片描述](img-blog.csdnimg.cn/ad3184608f6… =65%x)

![在这里插入图片描述](img-blog.csdnimg.cn/8b2e781c60d… =45%x)

2.1.2 使用 Inkscape 制作

2.1.2.1 安装软件

Inkscape是一款自由及开源的矢量图形编辑软件,其功能与Illustrator、Freehand、CorelDraw、Xara X等其他软件相似。与Adobe Illustrator不同的是,可以在Inkscape官网免费下载该软件:inkscape.org/ ![在这里插入图片描述](img-blog.csdnimg.cn/830048a4f6c… =85%x) 点击官网 DOWNLOAD 下的 Current Version: ![在这里插入图片描述](img-blog.csdnimg.cn/40d166d7374… =85%x) 根据你的系统类型下载相应的版本即可。

2.1.2.2 绘制图形

安装完成后启动该软件,新建文件,使用左侧工具栏中的各种工具,绘制你的SVG矢量图形: ![在这里插入图片描述](img-blog.csdnimg.cn/717b28bef48… =35%x) 绘制后可以通过 编辑 > 设置为页面选取大小 调整为绘制区域的大小: ![在这里插入图片描述](img-blog.csdnimg.cn/da7cec7a8e4… =35%x)

2.1.2.2 临摹轮廓

临摹轮廓是一个及其强大的功能,它能使得位图矢量化,如果不适用此功能,之后你的svg图标无法被转换成字体。这和上文中使用 点击Adobe Illustrator 中的 对象>轮廓化描边功能类似。更多关于该功能的介绍推荐阅读博文:inkscape:临摹位图轮廓blog.csdn.net/ouening/art… ![在这里插入图片描述](img-blog.csdnimg.cn/82b09ef8422… =65%x) 完成后将其保存以待使用。

2.1.3 使用 microsoft Visio 制作

microsoft Visio 是一款强大的绘图工具,使用它绘制的平面图形多数是可以通过导出 SVG 格式,但是需要通过 Adobe Illustrator 或者 Inkscape轮廓化描边或者 临摹轮廓功能进行处理。

![在这里插入图片描述](img-blog.csdnimg.cn/0a130648275… =65%x)

![在这里插入图片描述](img-blog.csdnimg.cn/c35a0c23b56… =65%x)

对于很多简单的线性图标,我会选择使用 Microstft Visio 先绘制出图标,在导出 SVG文件,接着交给 Inkscape调整为选取大小,最后 临摹轮廓 得到之后能正常生成字体的 SVG 矢量图。

2.2 从互联网获取现成的svg矢量图片

2.2.1 SvgIcons

SvgIcons 收录了大量免费图片,点击图标按钮即可弹出图标代码。其官网地址为: svgicons.sparkk.fr/。 进入其主页后点击左上角的"Icon Sets": ![在这里插入图片描述](img-blog.csdnimg.cn/e1677e5b493… =60%x)

选择一个图标集: ![在这里插入图片描述](img-blog.csdnimg.cn/399e1910183… =20%x) 进队对应的页面下载素材: ![在这里插入图片描述](img-blog.csdnimg.cn/23e51895a16… =60%x)

2.2.2 Ikonate

Ikonate 提供200多个完全可定制的矢量图标,其地址为:ikonate.com/。 进入页面后,可以直接点击Export all Icons导出所有图标: ![在这里插入图片描述](img-blog.csdnimg.cn/e40a4a23502… =80%x)

也可以选择你心仪的图标后,再点击Export: ![在这里插入图片描述](img-blog.csdnimg.cn/6a88aeee984… =30%x)

2.2.3 Iconfont-阿里巴巴矢量图标库

Iconfont-阿里巴巴矢量图标库的官方地址为:www.iconfont.cn/。在这个网站你可以直接使用关键字搜索到更多你喜欢的图标,打开网站后,其主页界面如下: ![在这里插入图片描述](img-blog.csdnimg.cn/f7282af1abc… =80%x) 比如在搜索框中输入”购物车“回车提交后进入搜索结果页面: ![在这里插入图片描述](img-blog.csdnimg.cn/d8c5e2bd81d… =80%x) 鼠标移动至某个图标上点击“下载”打开下载子页面: ![在这里插入图片描述](img-blog.csdnimg.cn/89b8ada8d6e… =80%x) 点击SVG下载即可下载图标。

2.2.4 谷歌图标库

其官方地址为:fonts.google.com/icons?selec… ![在这里插入图片描述](img-blog.csdnimg.cn/89ed203f706… =65%x) 你可以选择你需要的图标,点击它,在右侧点击下载SVG图标: ![在这里插入图片描述](img-blog.csdnimg.cn/337d8c03b2e… =65%x)

3. 生成字体文件

![在这里插入图片描述](img-blog.csdnimg.cn/796ecfc48fe… =65%x) ![在这里插入图片描述](img-blog.csdnimg.cn/45bb7d61de8… =65%x)

![在这里插入图片描述](img-blog.csdnimg.cn/4546209980b… =65%x)

![在这里插入图片描述](img-blog.csdnimg.cn/b643454e99e… =65%x)

4. 图标字体文件的基本使用

你需要引用生成的CSS文件(style.css):

<link rel="stylesheet" href="https://i.icomoon.io/public/temp/2910d84d51/UntitledProject/style.css">

注意这个CSS样式文件和字体文件所在的目录关系,在该CSS文件中,导入了所使用的字体:

@font-face {
  font-family: 'jcicon';
  src:  url('fonts/jcicon.eot?1kky57');
  src:  url('fonts/jcicon.eot?1kky57#iefix') format('embedded-opentype'),
    url('fonts/jcicon.ttf?1kky57') format('truetype'),
    url('fonts/jcicon.woff?1kky57') format('woff'),
    url('fonts/jcicon.svg?1kky57#jcicon') format('svg');
  font-weight: normal;
  font-style: normal;
  font-display: block;
}

而我们的字体文件就在这个font目录下面: ![在这里插入图片描述](img-blog.csdnimg.cn/0527a64e0c9… =65%x)

5. 将字体图标文件封装成 Vue 组件

简单封装示例

定义图标组件

<template>
<span 
  :class="[name,{
    iconstyle:true,
  }]" 
  
  v-if="colorVal && sizeVal"

  :style="{'color': colorVal}" 
></span>
<span 
  :class="[name,{
    iconstyle:true,
  }]" 
  
  v-else-if="colorVal"

  :style="{'color': colorVal}" 
></span>

<span 
  :class="[name,{
    iconstyle:true,
  }]" 
  v-else-if="sizeVal"
  
  :style="{'font-size': sizeVal}" 
></span>

<span 
  :class="[name,{
    iconstyle:true,
  }]" 
  v-else
></span>
</template>

<script lang="ts">
import { 
  defineComponent, ref, 
} from 'vue';

export default defineComponent({
  name: 'my-icon',
  props:{
    name:{
      type:String,
      default:'icon-image'
    },
    size:String,
    color: String,
  },

  setup(props){
    let colorVal = undefined;
    if(props.size){
      colorVal = ref(props.color)
    }
    
    let sizeVal = undefined;
    if(props.size){
      sizeVal = ref(props.size.toString()+'px');
    }
    return {
      colorVal,
      sizeVal
    }
  }
});
</script>

<style lang="scss" scoped>
@import "./style.css";
.iconstyle{
 margin: 0;
 padding: 0;
}

</style>

全局安装组件:

import IconVue from 'Icon.vue';      // 你组件文件的位置 
import type { App, Component } from 'vue';


const components: Component[] = [
  IconVue,
  // ...其它你想安装的组件
]

export const MyComponents = {
  install:(app: App<Element>)=>{
    components.forEach(component =>{
      app.component((component as any).name, component)
    })
  }
}

在 main.ts中:

import { createApp } from 'vue'
import App from './App.vue'
import { MyComponents } from './components'; // 上面定 MyComponents 的 ts 文件地址

const app = createApp(App);
app.use(MyComponents);
app.mount('#app');

使用举例:

<template>
  <my-icon name="jcicon-toggle-left"></jc-icon>
</template>