【web组件库系列】封装自己的字体图标库

简介: 【web组件库系列】封装自己的字体图标库

封装自己的web字体图标库


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

依次点击 对象>轮廓化描边

2.1.2 使用 Inkscape 制作

2.1.2.1 安装软件

Inkscape是一款自由及开源的矢量图形编辑软件,其功能与Illustrator、Freehand、CorelDraw、Xara X等其他软件相似。与Adobe Illustrator不同的是,可以在Inkscape官网免费下载该软件:https://inkscape.org/

点击官网 DOWNLOAD 下的 Current Version

根据你的系统类型下载相应的版本即可。

2.1.2.2 绘制图形

安装完成后启动该软件,新建文件,使用左侧工具栏中的各种工具,绘制你的SVG矢量图形:

绘制后可以通过 编辑 > 设置为页面选取大小 调整为绘制区域的大小:

2.1.2.2 临摹轮廓

临摹轮廓是一个及其强大的功能,它能使得位图矢量化,如果不适用此功能,之后你的svg图标无法被转换成字体。这和上文中使用 点击Adobe Illustrator 中的 对象>轮廓化描边功能类似。更多关于该功能的介绍推荐阅读博文:inkscape:临摹位图轮廓https://blog.csdn.net/ouening/article/details/90221773

完成后将其保存以待使用。

2.1.3 使用 microsoft Visio 制作

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

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

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

2.2.1 SvgIcons

SvgIcons 收录了大量免费图片,点击图标按钮即可弹出图标代码。其官网地址为: http://svgicons.sparkk.fr/

进入其主页后点击左上角的"Icon Sets":

选择一个图标集:

进队对应的页面下载素材:

2.2.2 Ikonate

Ikonate 提供200多个完全可定制的矢量图标,其地址为:https://ikonate.com/

进入页面后,可以直接点击Export all Icons导出所有图标:

也可以选择你心仪的图标后,再点击Export:

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

Iconfont-阿里巴巴矢量图标库的官方地址为:https://www.iconfont.cn/。在这个网站你可以直接使用关键字搜索到更多你喜欢的图标,打开网站后,其主页界面如下:

比如在搜索框中输入”购物车“回车提交后进入搜索结果页面:

鼠标移动至某个图标上点击“下载”打开下载子页面:

点击SVG下载即可下载图标。

2.2.4 谷歌图标库

其官方地址为:https://fonts.google.com/icons?selected=Material+Icons

你可以选择你需要的图标,点击它,在右侧点击下载SVG图标:

3. 生成字体文件

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目录下面:

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>
目录
相关文章
|
5月前
|
JavaScript 前端开发 开发者
哇塞!Vue.js 与 Web Components 携手,掀起前端组件复用风暴,震撼你的开发世界!
【8月更文挑战第30天】这段内容介绍了Vue.js和Web Components在前端开发中的优势及二者结合的可能性。Vue.js提供高效简洁的组件化开发,单个组件包含模板、脚本和样式,方便构建复杂用户界面。Web Components作为新兴技术标准,利用自定义元素、Shadow DOM等技术创建封装性强的自定义HTML元素,实现跨框架复用。结合二者,不仅增强了Web Components的逻辑和交互功能,还实现了Vue.js组件在不同框架中的复用,提高了开发效率和可维护性。未来前端开发中,这种结合将大有可为。
211 0
|
5月前
|
Web App开发 JavaScript 前端开发
[译] 用 Web Worker 改善 Vue 组件性能
[译] 用 Web Worker 改善 Vue 组件性能
|
3月前
|
前端开发 JavaScript 开发者
Web组件:一种新的前端开发范式
【10月更文挑战第9天】Web组件:一种新的前端开发范式
114 2
|
3月前
|
前端开发 JavaScript Go
前端开发趋势:从响应式设计到Web组件的探索
【10月更文挑战第1天】前端开发趋势:从响应式设计到Web组件的探索
50 3
|
2月前
|
消息中间件 监控 Kafka
Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面
随着大数据技术的发展,Apache Kafka 成为处理实时数据流的关键组件。Kafka Manager 提供了一个简洁的 Web 界面,方便管理和监控 Kafka 集群。本文详细介绍了 Kafka Manager 的部署步骤和基本使用方法,包括配置文件的修改、启动命令、API 示例代码等,帮助你快速上手并有效管理 Kafka 集群。
68 0
|
4月前
|
移动开发 JavaScript 数据可视化
|
4月前
|
JavaScript 前端开发 数据安全/隐私保护
组件库实战 | 教你如何设计Web世界中的表单验证
该文章通过实战演练,教授了如何在Web应用中设计和实现表单验证,包括使用Vue.js处理表单输入的验证逻辑、展示错误信息以及通过插槽和组件间通信来增强表单的功能性和用户体验。
组件库实战 | 教你如何设计Web世界中的表单验证
|
6月前
|
Web App开发 前端开发 安全
2024年新一代WebOffice内嵌网页组件,Web网页在线编辑Word/Excel/PPT
WebOffice控件面临兼容性、用户体验和维护难题。随着浏览器更新,依赖插件的技术不再适用,如Chrome不再支持NPAPI和PPAPI。产品普遍不支持多版本Office并存,定制能力弱,升级复杂。猿大师办公助手提供了解决方案,它兼容多种浏览器,包括最新版和国产浏览器,不依赖插件,支持文档对比,具有丰富的功能和接口,兼容多种Office版本,允许源码级定制,提供终身技术支持,并实现静默在线升级。适用于多种行业和操作系统。
404 16
|
5月前
|
开发者 UED
Axure“Web高端交互元件库”:产品与设计的得力助手
这套“Web高端交互元件库”精心构建了四大板块内容,分别是登陆首页集合、Web框架集合、表单元件集合以及主流后台组件。每一板块都包含了大量实用且美观的交互元件,设计师与开发者可以根据具体项目需求,快速找到并应用这些元件,从而大大提升工作效率。
|
6月前
|
开发框架 缓存 NoSQL
基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用
基于SqlSugar的数据库访问处理的封装,在.net6框架的Web API上开发应用