关于iconfont:聊一聊-iconfont

聊一聊 iconfont 简述 iconfont把图标用字体的形式出现把大量的图标变成了一个字体文件,缩小了申请数,而且无效减小申请体积。当一个网页有本人的图标字体库之后,能够复用在很多中央,缩小很多二次开发老本 为什么应用iconfont?1.兼容性最好,反对ie6+2.矢量图形,可伸缩 应用形式1.登录:http://www.iconfont.cn/ 2.找到图标治理->我的我的项目->新建我的项目点击新建我的项目,用于保留本人罕用的图标 3.我的项目新建实现后,往我的项目里增加咱们想应用的图标,搜寻想要的图标,而后增加到购物车 4.增加到购物车实现后,点击右上角的购物车图标,抉择增加至我的项目,抉择刚刚创立的我的项目,确定 5.将打包好的字体文件下载到本地增加到你的我的项目中,在我的项目中援用文件中的iconfont.css文件 6.把下载的文件都放在一个文件夹内,而后放在我的项目目录中,再在我的项目中引入iconfont.css文件,或将iconfont.css文件里的内容复制粘贴到你以后我的项目的css内容里 7.创立一个i标签或span标签,增加两个类名,一个固定的是iconfont,另一个是你想要的那个图标对应的类名 // 批改大小可通过 style <i class="iconfont icon-xxx">

March 2, 2022 · 1 min · jiezi

VUE-引入iconfont图标

VUE 使用svg选图标在Iconfont-阿里巴巴矢量图标库上把需要的图标添加至项目,并下载至本地。将下载的iconfont.js文件导入至自己的项目。定义Icon组件// src/common/Icon-svg.vue<template> <svg class="svg-icon" aria-hidden="true"> <use :xlink:href="iconName"></use> </svg></template><script>export default { name: 'icon-svg', props: { iconClass: { type: String, required: true } }, computed: { iconName() { return `#icon-${this.iconClass}` } }}</script><style>.svg-icon { width: 1em; height: 1em; vertical-align: -0.15em; fill: currentColor; overflow: hidden;}</style>全局引入// main.js全局引入iconfont.js和自定义的IconSvg组件import "./assets/icon/iconfont.js";import IconSvg from './common/Icon-svg.vue';Vue.component('icon-svg', IconSvg);使用直接使用icon-class填iconfont上的后缀名,如图标名为icon-download,则填download <icon-svg icon-class="download" />

September 7, 2019 · 1 min · jiezi

iconfont-在线预览工具及其解析

工具在线链接功能简介iconfont web 在线预览工具,无需安装,打开即用。可预览本地 ttf 文件中定义的所有 icon。也支持预览 阿里iconfont 中的三种模式,unicode,Font class,Symbol。根据在线字体链接即可解析预览其定义的所有icon。需求背景本工具用于解决以下问题 接手二手项目时,不清楚项目中定义了哪些 icon。 接手二手项目,有时由于交接不到位,只能找到引用的 css。但不清楚该 icon 库具体包含哪些 icon。导致二次开发时,不能很好地复用之前的 icon,若引入新icon,可能还会重复定义。导致前后 icon 风格不统一。使用外部样式库,成套的后台管理系统框架时。找到其 icon 的定义列表比较麻烦。 需要先找到对应的官网,再找到其对 icon 定义。整个过程较为繁琐。而且还不一定有介绍。故笔者开发了这个 iconfont 在线预览工具,无需安装,打开web页面即可预览 icon 库。使用教程使用本地文件点击按钮选择 ttf 后缀文件解析成功点击具体图标,可复制该 icon 代码解析在线文件(针对阿里图标库)复制在线资源链接 针对 unicode 模式,复制在线 ttf 文件链接针对 Font class 模式,复制在线 css 文件链接针对 Symbol 模式,复制在线 js 文件链接点击解析解析成功,点击具体图标,可复制该 icon 代码iconfont相关知识之前一直只知道怎么用 iconfont ,但并没有深入了解相关知识,最新学习了一下,在这里跟大家分享。 阿里图标三种模式unicode 模式 它本身和引用外部自定义字体没有区别。只是一个表现出来是图形,另一个是文字。对系统来说,没有区别。引用 iconfont 和引用自定义字体,使用的代码是一样 定义字体族 @font-face { font-family: 'iconfont'; /* 自定义字体族名,可以是任意名, */ src: url('//at.alicdn.com/t/font_1357308_kygursq6jw.eot'); /* 字体描述文件链接 */ src: url('//at.alicdn.com/t/font_1357308_kygursq6jw.eot?#iefix') format('embedded-opentype'), /* 兼容 IE9 */ url('//at.alicdn.com/t/font_1357308_kygursq6jw.woff2') format('woff2'), /* 兼容 IE6-IE8 */ url('//at.alicdn.com/t/font_1357308_kygursq6jw.woff') format('woff'), /* 兼容 chrome, firefox, opera, Safari, Android, iOS 4.2+ */ url('//at.alicdn.com/t/font_1357308_kygursq6jw.ttf') format('truetype'), /* 兼容 chrome, firefox, opera, Safari, Android, iOS 4.2+ */ url('//at.alicdn.com/t/font_1357308_kygursq6jw.svg#iconfont') format('svg'); /* 兼容 iOS 4.1及以上 */}使用字体族(无论是文本还是icon) ...

August 20, 2019 · 2 min · jiezi

vue项目中引入iconfont

背景对于前端而言,图标的发展可谓日新月异。从img标签,到雪碧图,再到字体图标,svg,甚至svg也有了类似于雪碧图的方案svg-sprite-loader。雪碧图没有什么好讲的了,只是简单地利用了background-position来做图标定位。今天咱们先聊聊怎么使用字体图标和svg图标。其实字体图标也不陌生了,bootstrap,font-awesome,element-ui等UI库都基本标配了字体图标。 简单说下原理unicode预留了E000-F8FF范围作为私有保留区域,这个区间的unicode码非常适合做字体图标,前端根据unicode码就能显示对应的图标。 vue项目引入iconfont1. 在iconfont新建项目 注:这里修正一下,前缀应该是test-icon-。 2. 添加图标至项目 3. 使用iconfontUnicode方式(不推荐)在线使用index.scss中引入在线字体@font-face { font-family: 'iconfont'; /* project id 1254715 */ src: url('//at.alicdn.com/t/font_1254715_s1khj1whikd.eot'); src: url('//at.alicdn.com/t/font_1254715_s1khj1whikd.eot?#iefix') format('embedded-opentype'), url('//at.alicdn.com/t/font_1254715_s1khj1whikd.woff2') format('woff2'), url('//at.alicdn.com/t/font_1254715_s1khj1whikd.woff') format('woff'), url('//at.alicdn.com/t/font_1254715_s1khj1whikd.ttf') format('truetype'), url('//at.alicdn.com/t/font_1254715_s1khj1whikd.svg#iconfont') format('svg');}页面中使用使用时很不友好,使用的是unicode码表示,使用图标还必须去iconfont项目去查询下unicode码。 <template> <div> <i class="iconfont">&#xe7ee;</i> <i class="iconfont">&#xe7ed;</i> <i class="iconfont">&#xe7ec;</i> <i class="iconfont">&#xe7eb;</i> </div></template>效果图如下: 本地使用有时候网络不是那么给力的,或者是内网环境,那么就不要考虑用在线引用的方式了。 本地使用需要先将字体库下载并放到项目中。 在全局样式文件中定义如下代码 @font-face { font-family: "iconfont"; src: url('../fonts/iconfont.eot'); /* IE9*/ src: url('../fonts/iconfont.eot#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('../fonts/iconfont.woff') format('woff'), /* chrome, firefox */ url('../fonts/iconfont.woff2') format('woff2'), /* chrome, firefox */ url('../fonts/iconfont.ttf') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ url('../assets/fonts/iconfont.svg#iconfont') format('svg'); /* iOS 4.1- */}.iconfont { font-family: "iconfont" !important; font-size: 16px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;} ...

July 10, 2019 · 1 min · jiezi

在vue项目中本地使用iconfont字体图标的三种方式

使用前的准备和三种使用方式介绍,参考这里 开始使用: 点击下载到本地 在了路径 src/assets 下新建文件夹 iconfont ,用来存放字体图标的本地文件解压下载到本地的字体图标文件,放到 iconfont 文件夹下如过项目中没有下载 css-loader 依赖包,就进行下载,否则会报错 npm install css-loader -D然后在 main.js 中全局引入样式并使用即可。 <template> <div> <p><i class="iconfont">&#xe633;</i> Unicode </p> <p><i class="iconfont icon-fanhuidingbu"></i> Font class </p> <p><svg class="icon" aria-hidden="true"> <use xlink:href="#icon-fanhuidingbu"></use> </svg> Symbol </p> </div></template> <script> // Font classimport "../assets/iconfont/iconfont.css"; // Symbol import "../assets/iconfont/iconfont.js";export default { data() { return {}; }};</script><style scoped>* { font-size: 24px; } /* 下面的样式可以单独写,然后直接引入 */ @font-face { /* Unicode */ font-family: "iconfont"; src: url("../assets/iconfont/iconfont.eot"); src: url("../assets/iconfont/iconfont.eot?#iefix") format("embedded-opentype"), url("../assets/iconfont/iconfont.woff2") format("woff2"), url("../assets/iconfont/iconfont.woff") format("woff"), url("../assets/iconfont/iconfont.ttf") format("truetype"), url("../assets/iconfont/iconfont.svg#iconfont") format("svg"); } .iconfont { font-family: "iconfont" !important; font-size: 1em; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } .icon { width: 2em; height: 2em; vertical-align: -0.15em; fill: currentColor; overflow: hidden; } </style>

May 6, 2019 · 1 min · jiezi

在线使用iconfont字体图标

使用阿里巴巴矢量图标库在线使用案例三种使用方式介绍使用准备进入 阿里巴巴矢量图标库 ,登陆以后,搜索需要的图标,然后点击添加入库 进入“我的图标库”(右上角购物车),点击添加至项目 点击 + 图标创建一个新项目,然后把新图标加入到新项目中。(也可以按需添加到已有项目) 进入我的项目,即可看到如下界面 三种使用方式介绍unicode引用unicode是字体在网页端最原始的应用方式,特点是: 兼容性最好,支持ie6+,及所有现代浏览器。支持按字体的方式去动态调整图标大小,颜色等等。但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。注意:新版iconfont支持多色图标,这些多色图标在unicode模式下将不能使用,如果有需求建议使用symbol的引用方式unicode使用步骤如下: 拷贝项目下面生成的font-face@font-face {font-family: 'iconfont'; src: url('iconfont.eot'); src: url('iconfont.eot?#iefix') format('embedded-opentype'), url('iconfont.woff') format('woff'), url('iconfont.ttf') format('truetype'), url('iconfont.svg#iconfont') format('svg');}定义使用iconfont的样式.iconfont{ font-family:"iconfont" !important; font-size:16px;font-style:normal; -webkit-font-smoothing: antialiased; -webkit-text-stroke-width: 0.2px; -moz-osx-font-smoothing: grayscale;}挑选相应图标并获取字体编码,应用于页面<i class="iconfont">&#x33;</i>font-class引用font-class是unicode使用方式的一种变种,主要是解决unicode书写不直观,语意不明确的问题。 与unicode使用方式相比,具有如下特点: 兼容性良好,支持ie8+,及所有现代浏览器。相比于unicode语意明确,书写更直观。可以很容易分辨这个icon是什么。因为使用class来定义图标,所以当要替换图标时,只需要修改class里面的unicode引用。不过因为本质上还是使用的字体,所以多色图标还是不支持的。使用步骤如下: 拷贝项目下面生成的fontclass代码://at.alicdn.com/t/font_8d5l8fzk5b87iudi.css挑选相应图标并获取类名,应用于页面:<i class="iconfont icon-xxx"></i>symbol引用这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。这种用法其实是做了一个svg的集合,与上面两种相比具有如下特点: 支持多色图标了,不再受单色限制。通过一些技巧,支持像字体那样,通过font-size,color来调整样式。兼容性较差,支持 ie9+,及现代浏览器。浏览器渲染svg的性能一般,还不如png。使用步骤如下: 拷贝项目下面生成的symbol代码://at.alicdn.com/t/font_8d5l8fzk5b87iudi.js加入通用css代码(引入一次就行):<style type="text/css"> .icon { width: 1em; height: 1em; vertical-align: -0.15em; fill: currentColor; overflow: hidden; }</style>挑选相应图标并获取类名,应用于页面:<svg class="icon" aria-hidden="true"> <use xlink:href="#icon-xxx"></use></svg>在线使用点击生成代码 完整使用代码 <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>iconfont使用</title> <!-- fontclass --> <link rel="stylesheet" type="text/css" href="http://at.alicdn.com/t/font_1170286_tfb5h7u1t9.css"> <style type="text/css"> /* unicode */ @font-face { font-family: 'iconfont'; /* project id 1170286 */ src: url('//at.alicdn.com/t/font_1170286_tfb5h7u1t9.eot'); src: url('//at.alicdn.com/t/font_1170286_tfb5h7u1t9.eot?#iefix') format('embedded-opentype'), url('//at.alicdn.com/t/font_1170286_tfb5h7u1t9.woff2') format('woff2'), url('//at.alicdn.com/t/font_1170286_tfb5h7u1t9.woff') format('woff'), url('//at.alicdn.com/t/font_1170286_tfb5h7u1t9.ttf') format('truetype'), url('//at.alicdn.com/t/font_1170286_tfb5h7u1t9.svg#iconfont') format('svg'); }/* unicode字体样式 */ .iconfont { font-family: "iconfont" !important; font-size: 16px; font-style: normal; -webkit-font-smoothing: antialiased; -webkit-text-stroke-width: 0.2px; -moz-osx-font-smoothing: grayscale; }/* symbol字体样式 */ .icon { width: 1em; height: 1em; vertical-align: -0.15em; fill: currentColor; overflow: hidden; } p { color: #fff; } p:last-child{ font-size: 2em; } </style> <!-- Symbol --> <script type="text/javascript" src="http://at.alicdn.com/t/font_1170286_tfb5h7u1t9.js"></script></head><body> <div style="width: 100%;text-align: center;background: #333;padding: 20px;"> <p><i class="iconfont">&#xe633;</i> Unicode</p> <p><i class="iconfont icon-fanhuidingbu"></i> Font class</p> <p> <svg class="icon" aria-hidden="true"> <use xlink:href="#icon-fanhuidingbu"></use> </svg> Symbol </p> </div></body></html>使用效果如下: ...

April 30, 2019 · 1 min · jiezi

小程序中引用iconfont图标

1.在阿里图标库中找到需要的图标并加入项目2.把项目下载项目到本地3.在本地打开下载的目录将 iconfont.css文件改为iconfont.wxss复制到项目中4.在app.wxss中引入iconfont.wxss5.在阿里图标库我的项目中 点击复制代码6.将复制的@font-face替换掉iconfont.wxss中的@font-face7.在项目中引用详细教程点击传送门

April 9, 2019 · 1 min · jiezi

在Element-UI中引入Iconfont图标

最近在使用在Element-UI的时候发现其图标太少了,连常用的reset,people之类的图标都没有,于是想引入第三方的图标库进行使用。在网上查找了资料后成功引入,下面就是我的引入流程:这里我选择的是阿里巴巴的Iconfont,打开https://www.iconfont.cn/,创建账号,然后选择你要引入的图标(加入购物车)点击添加至项目,然后新建一个项目点击跟多操作修改项目前缀,不能为 el-icon- ,因为这个可能会和Element-UI自带的图标重合点击生成在线CSS代码,复制代码链接,在项目的APP.vue中引入,这时我们就可以通过 class=“iconfont el-icon-mo-xxx” 的方式在项目中使用引入的第三方图标了,如果想要去掉 iconfont 这个类直接用 el-icon-mo-xxx 来使用图标的话我们还需要多一步操作:<template> <div id=“app”> <router-view/> </div></template><script>export default { name: ‘App’}</script><style> @import “//at.alicdn.com/t/font_1075796_5kpx2vwkmq3.css”; [class^=“el-icon-mo”], [class^=" el-icon-mo"] { font-family: “iconfont”, serif !important; font-size: 16px; font-style: normal; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }</style>PS每次新增或删除,特别是新增如果要引入新增的图标,要重新生成CSS文件,这时候需要把新生成的CSS文件链接重新在 App.vue 中引入,替换掉原来的链接。

March 7, 2019 · 1 min · jiezi

三招让你成为程序猿中优秀的射鸡湿

这篇文章总结一下之前项目中一些 前端 工具及技巧,主要包括 Iconfont的正确使用姿势 、 如何使用酷炫漂亮的动画(Lottie) 、 如何加入页面滚动入场离场动效。个人博客欢迎访问 https://lishaoy.netIconfont的正确使用姿势Iconfont 是阿里巴巴打造的矢量图标库,图标丰富多彩(单色和彩色),使用方便快捷(可筛选图片创建自己项目图标库),支持在线使用,摆脱了传统的图片的繁琐和css字体图标库引入的冗余。下面介绍下如何使用 Iconfont搜索选择图标点击 Iconfont 打开页面如图,可以搜索 ???? 关键字,找到想要的图标例如,搜索 ‘image’ 关键字,如图鼠标放到图标上会出现 添加入库 、 收藏 、 下载图标 选项,一般我会选择 添加入库 ,之后统一添加到项目,生成在线地址引入项目(后面会介绍到)右边的蓝色皇冠按钮可以进行 精选 、 全部 的筛选,红色的按钮可以进行 单色 、 多色 、 全部 的筛选点击 下载 会弹出下载页面,可以进行图标的编辑和不同格式的下载,如图添加入库生成在线连接选择 添加入库 的图标,会在右上角的购物车显示数量,点击购物车图标,会弹出右侧栏,如图可以批量下载和添加到项目,点击 添加至项目 如图给项目取一个名字,点击确定,如图可以看到有三种图标引入的方式,默认选中的是 Font class 的方式,也推荐使用这种方式Unicode : 是以字体的方式引入,如下@font-face { font-family: ‘iconfont’; /* project id 1066942 / src: url(’//at.alicdn.com/t/font_1066942_yvi703p2pv.eot’); src: url(’//at.alicdn.com/t/font_1066942_yvi703p2pv.eot?#iefix’) format(’embedded-opentype’), url(’//at.alicdn.com/t/font_1066942_yvi703p2pv.woff2’) format(‘woff2’), url(’//at.alicdn.com/t/font_1066942_yvi703p2pv.woff’) format(‘woff’), url(’//at.alicdn.com/t/font_1066942_yvi703p2pv.ttf’) format(’truetype’), url(’//at.alicdn.com/t/font_1066942_yvi703p2pv.svg#iconfont’) format(‘svg’);}Font class : 是以Css的方式引入,如下//at.alicdn.com/t/font_1066942_yvi703p2pv.cssSymbol : 是以js的方式引入,如下//at.alicdn.com/t/font_1066942_yvi703p2pv.js如想了解3中方式具体用法,可点击 官方文档,这里我主要介绍 Font class 的方式引入项目使用首先,把生成的链接引入到页面中,如下<link rel=“stylesheet” href="//at.alicdn.com/t/font_1066942_yvi703p2pv.css">其次,用 <i class=“iconfont icon-Userselect”></i> 在页面中使用,大小颜色都可以用 css 调整阿里在代码的复制、图标的搜索、编辑、下载、筛选等一些操作上做的很到位,使用起来方便快捷我在之前的项目里也使用过,还是很漂亮的 https://a.lishaoy.net ,如图是我在项目里使用的一些图标,每个图标是不是都做的很精致Lottie开源动画库Lottie 是Airbnb开源的一个面向 iOS、Android、React Native 的动画库,能够直接把 AE 导出的动画文件(json),引入到页面使用,以下是官方给出的效果图Lottie 支持 iOS、Android、React Native 、Web ,这里主要介绍 lottie-Web 是如何使用,更多使用方法可以参考 http://airbnb.io/lottie/首先,在页面中引入 CDN 上的文件,如下<script src=“https://cdnjs.cloudflare.com/ajax/libs/bodymovin/5.4.2/lottie.min.js" type=“text/javascript”></script>其次,使用 AE 制作动画(UI提供或者自己制作)导出的 json,或者可以在 Lottie Files 下载 (Lottie Files 是一个拥有高质量 Lottie 文件格式动画的网站,不仅设计师可以在上面陈列他们的动画而且还提供免费下载)以下是我在项目里使用的效果图(上传图片中会加重动画,上传成功动画停止),具体效果可以去我的项目上传图片体验 上传图片动画效果具体的代码如下,在页面中创建需要加重动画的容器(HTML 代码)<div class=“image-load d-flex justify-content-center align-items-center”> <div class=“box”> <div class=“lottie”></div> <div class=“text text-muted text-center”>The picture is being uploaded …</div> </div></div>然后,用 js 初始化动画,如下 let anim = lottie.loadAnimation({ container: $(’.image-load .lottie’)[0], //动画容器的元素 renderer: ‘svg’, //支持 svg 和 canvas loop: true, //是否循环 autoplay: false, // 是否自动播放 path: ‘/EmojiReaction.json’ //动画json文件的位置 }) anim.addEventListener(’loopComplete’, () => { // 监听 loopComplete 事件,每次播放完成执行 anim.pause() //停止播放 $(’.image-load’).removeClass(’loading’) //隐藏容器 $(’.image-load .box .text’).text(‘The picture is being uploaded…’).removeClass(’text-success’).addClass(’text-muted’) //改变说明文字状态及颜色 })更多的参数和事件可查阅官方文档 Lottie-Web如何加入页面滚动入场离场动效首先,让我们来先看看效果,如图(效果来源我的博客 https://lishaoy.net)以上动效就是用的 AOS 这个库,具体的使用方法也很简单在页面上引入 css 和 js 文件<link rel=“stylesheet” href=“https://unpkg.com/aos@next/dist/aos.css"/><script src=“https://unpkg.com/aos@next/dist/aos.js"></script>然后,用 AOS.init() 初始化,这样初始化,使用的是默认设置,具体有很多参数可以调整,详情可查阅 项目文档,如AOS.init({ // Global settings: disable: false, // accepts following values: ‘phone’, ’tablet’, ‘mobile’, boolean, expression or function startEvent: ‘DOMContentLoaded’, // name of the event dispatched on the document, that AOS should initialize on initClassName: ‘aos-init’, // class applied after initialization animatedClassName: ‘aos-animate’, // class applied on animation useClassNames: false, // if true, will add content of data-aos as classes on scroll disableMutationObserver: false, // disables automatic mutations’ detections (advanced) debounceDelay: 50, // the delay on debounce used while resizing window (advanced) throttleDelay: 99, // the delay on throttle used while scrolling the page (advanced) // Settings that can be overridden on per-element basis, by data-aos-* attributes: offset: 120, // offset (in px) from the original trigger point delay: 0, // values from 0 to 3000, with step 50ms duration: 400, // values from 0 to 3000, with step 50ms easing: ’ease’, // default easing for AOS animations once: false, // whether animation should happen only once - while scrolling down mirror: false, // whether elements should animate out while scrolling past them anchorPlacement: ’top-bottom’, // defines which position of the element regarding to window should trigger the animation});最后,在页面上使用即可,如<div data-aos=“fade-in”></div>或者,也可以单独给元素设置参数,使用 data-aos- ,如<div data-aos=“fade-in” data-aos-offset=“200” data-aos-delay=“50” data-aos-duration=“1000” data-aos-easing=“ease-in-out”></div>更多的载入效果可以参考官方给出的 示例如在您做的页面或应用中使用了这三招,精致小图标 、 炫酷的动画 、 页面滚动载入动效 ,那么瞬间让您的页面或应用高大上且生动活泼起来。 ...

March 5, 2019 · 2 min · jiezi

Flutter尝鲜1——3步骤使用自定义Icon

官方IconFlutter本身自带了MaterialDesign的图标集,在pubspec.yaml中有如下配置…flutter: users-material-design: true…通过以上配置,就可以在代码中引用任何MD的官方图标(需翻墙)。这些图片都定义在了IconDatas中。Icon(Icons.favorite)第三方Icon第三方图标库和MD的图片库在使用上没有区别,但需要手动引入和配置路径。为了方便复用,我们可以把图标制作为一个第三方库来调用。例如:…import ‘package:my_icon/my_icon.dart’;…Icon icon = Icon(MyIcon.zhihu); # 知乎LOGO制作Icon库1.制作ttf文件一般我们会在iconfont.cn上去寻找合适的图标集或自行绘制,完成后打包下载,压缩包里有制作好的ttf文件。2.编写配置文件作为示例,在/lib目录下创建一个名为my_font的文件夹,文件夹中的pubspec.yaml内容如下:name: my_fontdescription: The font for my applicationauthor: Lynx <lynx86@126.com>homepage: http://www.a-lightyear.com/version: 1.0.0environment: sdk: “>=2.0.0-dev.28.0 <3.0.0"dependencies: flutter: sdk: flutterdev_dependencies: recase: “^2.0.0+1"flutter: fonts: - family: MyIcon fonts: - asset: lib/fonts/iconfont.ttf weight: 400从配置文件看出,iconfont下载的ttf文件放在/lib/my_font/lib/fonts/下面,该路径可以自行设置。3.编写库文件library font_social_flutter; import ‘package:flutter/widgets.dart’;class MyIcon { static const IconData zhihu = const _MyIconData(0xe6a2); static const IconData wechat = const _MyIconData(0xe697); static const IconData alipay = const _MyIconData(0xe698); static const IconData weibo = const _MyIconData(0xe6ab); static const IconData wechat_friends = const _MyIconData(0xe6ae); static const IconData qq = const _MyIconData(0xe6ac);}class _MyIconData extends IconData { const _MyIconData(int codePoint) : super( codePoint, fontFamily: ‘MyIcon’, fontPackage: ‘my_icon’, );}这里的0xe6a2即为每个Icon的unicode字符。在iconfont下载包里有一个html文件,打开后可以看到每个图片的unicode值。使用Icon引入Icon库在使用之前,需要把该库引入到当前flutter工程中。编辑flutter项目的pubspec.yaml,添加如下内容:…dependencies: flutter: sdk: flutter … my_icon: path: lib/my_icon/ # 在这里引入第三方icon库 ……使用Icon如开篇所述,在做好以上准备工作后,即可以如MD图标一般方便的引入自制的图标集。…import ‘package:my_icon/my_icon.dart’;…Icon icon = Icon(MyIcon.zhihu); # 知乎LOGO ...

January 22, 2019 · 1 min · jiezi

webpack自动用svg生成iconfont字体图标,支持热重载

之前生成iconfont字体图标,是用的https://icomoon.io/app/ 或者是阿里的https://www.iconfont.cn/ ,将UI给的svg图导入来生成。但是一直有个问题,假如需要再次加入几个图标时,又需要重新搞一遍,很麻烦。而使用svg-sprite-loader的方式,也不是很方便,而且在body下插入一个超大的svg标签,影响性能不说,看着这么乱的代码真是挺难受。。而且有些UI库比使用字体图标会比较便利。另外字体文件特别是woff也比svg要小很多。于是最近抽时间参考开源代码搞了个webpack插件,自动用svg生成iconfont字体图标,支持热更新。使用这个插件后,开发时在src/iconfont/svgs目录下,修改或添加、删除svg文件时,就可以自动生成字体图标(支持ttf,woff2,woff,eot,svg)及配套从css样式、html预览了;同时热更新立即可以看到效果。Byebye了我滴icomoon们!源码在这:https://github.com/hzsrc/webp…感兴趣的小伙伴可以试试~下载源码安装后直接跑npm run dev就可看效果了

December 22, 2018 · 1 min · jiezi

SVG vs Image, SVG vs Iconfont

这可能是个别人写过很多次的话题,但貌似由于兼容性的原因?图标的显示还是用着 Iconfont 或者 CSS Sprite 的形式?希望通过自己新瓶装旧酒的方式能重新引导一下问题。SVG vs Image比方说现在要做下图这样的视觉效果:分析:可能需要三张图片鼠标移入时的背景图渐变色前景图鼠标移入时白色前景图独立图像现在对比一下背景图使用图片与使用 SVG 格式的体积大小(做图的时候拿错颜色了,其他都一样,能说明道理就行,见谅见谅)可以看出,在肉眼感觉差异不大的情况下,WebP 格式体积最小,其次是 SVG,而 PNG 的体积过大。 这个 SVG 是在 Sketch 设计稿中导出来的,源码包含了很多冗余无效的代码,实际上是可以优化的,如下。内部源码优化后优化后大约可以减去 1K 个字符。当然这个需要内联使用(Inline SVG)CSS Sprite使用 CSS Sprite 的方式可以减少 HTTP 请求,貌似还可以减少总体图片体积。这里用前景图来对比一下,实际上背景图和前景图都可以合成一张 sprite。可以看出,CSS Sprite 的体积比 Inline SVG + CSS 的方式大很多。SVG vs Image 结论绿色部分表示 SVG 比 Image 略胜一筹的地方,黄色部分表示有所欠缺的地方,灰绿色表示差不多。1、如今已接近 2019 年了,对于 IE9 (2011年) 这种古老的浏览器都支持 SVG,所以再过多强调更低的兼容性也没有什么意思。2、Inline SVG 在浏览器应该是被渲染成 DOM 节点,所以关于 DOM 节点的性能优化都有必要注意;一个 SVG 图像可能就会有很多路径,即 DOM 节点,太多的 DOM 节点必然会影响浏览器的渲染性能及内存占用,而纯位图的渲染方式应该是没有这方面的顾虑。(DOM 数量影响参考:Google WEB 开发者文档)综上结论:除开复杂图像,选择 Inline SVG 或者 <img/> 标签的方式引入 SVG,会比使用 独立图像 或 组合图像 (CSS sprite) 的方式更好。SVG vs Iconfont书写对比首先看下 Iconfont 与 SVG 图标的使用方式,来源 阿里 Iconfont 平台很明显 SVG Sprite 使用起来没有 Iconfont 方便,需要写 3 行代码, 而后者只需要写 1 行。当然上面的不是重点,重点是下面的换色与多色支持换色与多色支持换色1、Iconfont 通过 CSS color 可以轻松更换图标颜色。2、而 SVG Sprite 比较麻烦,SVG Sprite 的代码原理如下。// 定义 symbol<svg> <symbol id=“icon-arrow-left” viewBox=“0 0 1024 1024”> <path d=“M694 … 44.576-45.952”></path> </symbol> <symbol id=“icon-arrow-right” viewBox=“0 0 1024 1024”> <path d=“M693 … 0-0.48-46.4”></path> </symbol></svg>// 使用<svg><use xlink:href="#icon-arrow-left"/></svg><svg><use xlink:href="#icon-arrow-right"/></svg>渲染出来的 DOM 结构是这样的:渲染在了 Shadow DOM 中(关于 Shadow DOM 的知识可以阅读下这篇文章或这篇),这样的 DOM 元素样式就具有了作用域,外面的 CSS 对 shadow-root 内的元素不会生效,如果想要更换元素的颜色,需要使用 /deep/ 来穿透添加样式,如下。svg /deep/ path { fill: red;}当然,实际上在只需要在父级元素上添加 fill: red 这样的 CSS 也能起到同样的效果,里面的元素会继承父级的样式。PS: /deep/ 是 shadow DOM v0 的写法,v1 已经把这样的写法抛弃了,实际上支持 v1 的 shadow DOM, 父级的样式可以直接作用在 shadow-root 里面的元素。多色支持1、Iconfont 是不支持多色图标的。2、而 SVG Sprite 可以利用 CSS 变量或 shadow DOM 的方式支持多色图标,shadow DOM 的方式上面已经说明,下面借用他人的文章解释 CSS 变量实现多色,如下。不过使用 CSS 变量或 shadow DOM 的方式兼容性都不好,CSS 变量:Edge15+shadow DOM:更差。兼容性列表3、Inline SVG 可以良好地支持多色及多色变化。渐变色支持Iconfont 与 SVG Sprite 不支持渐变色。Inline SVG 支持渐变色,并且兼容性良好。渲染无抖动使用 Iconfont,因为字体文件是异步加载的,所以在字体文件还没有加载完毕之前,图标位会留空,加载完毕后才会显示出来,这个过程就会出现向下图(来自 GitHub blog)这样的抖动,而 SVG Sprite 或 Inline SVG 内联加载则不会出现这样的抖动。当然,Iconfont 也可以内联加载,不过需要转换成 base64 同样式表一起加载,转换后的文件体积则会变为原来的 1.3 倍左右这是由 base64 编码决定的(编码知识链接)。字体转换成 base64 的一个在线工具:https://transfonter.org/体积较大这个是 SVG 对比于 Iconfont 的一个不足之处,如下图。Inline SVG 与 SVG Sprite 体积差不多。开发成本三者的开发成本都差不多,不过 SVG 的两种方式都需要前期做些配置,后期开发就会顺手很多(单页应用)。以 vue + vue cli 为例说明 Inline SVG 便捷使用。1、 配置 Webpack loader:{ // 排除需要转换成 Inline SVG 的目录 exclude: [resolve(‘src/svgicons’)], test: /.(png|jpe?g|gif|svg)(?.*)?$/, loader: ‘url-loader’, options: { limit: 1, name: utils.assetsPath(‘img/[name].[hash:7].[ext]’) }},{ // 指定特定的目录用于 Inline SVG include: [resolve(‘src/svgicons’)], test: /.svg$/, use: [ // 读取 SVG 源代码 { loader: ‘raw-loader’ }, // 精简优化 SVG 源代码 { loader: ‘svgo-loader’, options: { plugins: [ { removeTitle: true }, { removeViewBox: false }, { removeDimensions: true }, // …其他参数 ] } } ]}2、 创建 SvgIcon.vue 组件:<template> <div class=“svg-icon”> <div class=“svg-icon-wrapper” v-html=“icon”></div> </div></template><script>export default { name: ‘SvgIcon’, props: { name: { type: String, required: true, }, }, data () { return { icon: this.getIcon(), } }, watch: { name () { this.icon = this.getIcon() }, }, methods: { getIcon () { return require(@/svgicons/${this.name}.svg) }, },}</script><style lang=“stylus” scoped>.svg-icon { overflow hidden display inline-block width 1em height 1em &-wrapper { display flex align-items center >>> svg { width 100% height 100% fill currentColor } }}</style>3、使用:<SvgIcon name=“arrow-right” />SVG vs Iconfont 结论应该是 Inline SVG vs SVG Sprite vs Iconfont 的结论,如下图。综上结论选择 Inline SVG 或许是一个不错地选择去替代 Iconfont 的使用方式。扩展阅读GitHub 网站很早之前已经将图标的展示方式由 Iconfont 转成了 Inline SVG, 这一篇文章是他们的描述:https://blog.github.com/2016-…很早的一篇文章关于两者的对比:https://css-tricks.com/icon-f…最后欢迎各抒己见谈论一下对 SVG 和 Iconfont 的看法,优缺点,欢迎留言。然后,本文同步发表于【凹凸实验室博客】或微信公众号,欢迎关注我们,么么哒。 ...

November 23, 2018 · 2 min · jiezi

在 React Native 使用阿里 iconfont 图标

熟悉前端开发的大家都一定知道 iconfont.cn,在网站下载图标集,会自带教程告诉你如何在网页使用 iconfont。但是在 React Native 中,跟网页使用的步骤就不同了。我最开始百度出来的文章,不少都推荐借用 react-native-vector-icons,但是我觉得这一步还是增加了不少无用代码。其实使用 iconfont,本质上就是使用一种“图标形状的字体”,所以解决问题只需要三步:安装字体找到图标对应的 unicode,直接放到 <Text> 标签中在该标签应用你的“图标字体”安装字体这是一个把配置都交给 react-native 的一个简单方法:首先在 package.json 添加代码"rnpm": { “assets”: [ “./assets/fonts/” ]},然后运行react-native link你就可以在 plist 文件(iOS)或 android/app/src/main/assets/fonts(安卓)中看到对应配置安装后需要重启 react-native添加图标打开在 iconfont 下载的图标集会有这个文件里面可以看到对应图标的 unicode把你使用的图标放到标签中 <Text>{’\ue936’}</Text>应用字体<Text style={{ fontFamily: “iconfont”, fontSize: FONTSIZE, marginRight: 9}}>{’\ue936’}</Text>有一点需要注意,写在 fontFamily 的字体名称要使用全名(而不是文件名)不过 iconfont 三个名字都一样就是了参考文章:https://medium.com/react-nati…http://www.ruanyifeng.com/blo…

November 3, 2018 · 1 min · jiezi

如何更好使用 ng-zorro-antd 图标

自 ng-zorro-antd 1.7.x 以后图标发生破坏性变更,虽然带了诸多优势,同时也带来几个劣势:若采用动态加载会产生额外的HTTP请求若静态加载需要逐一注册图标st 组件的 format 参数无法直接指定图标ng-alain 默认使用静态加载的做法,毕竟后端使用图标相对于比较有限,即使将 svg 都打包进脚本相比较之前整个 styles 体积上是所有减少,但比较并不多。而针对以上问题,ng-alain 提供几种方案。使用icon插件(推荐)尽可能从项目中分析并生成静态 Icon,插件会自动在 src 目录下生成两个文件:src/style-icons.ts 自定义部分无法解析(例如:远程菜单图标)src/style-icons-auto.ts 命令自动生成文件自动排除 ng-zorro-antd 和 @delon 已经加载的图标。ng g ng-alain:plugin icon同时,需要手动在 startup.service.ts 中导入:import { ICONS_AUTO } from ‘../../../style-icons-auto’;import { ICONS } from ‘../../../style-icons’;@Injectable()export class StartupService { constructor(iconSrv: NzIconService) { iconSrv.addIcon(…ICONS_AUTO, …ICONS); }}有效语法<i class=“anticon anticon-user”></i><i class=“anticon anticon-question-circle-o”></i><i class=“anticon anticon-spin anticon-loading”></i><i nz-icon class=“anticon anticon-user”></i><i nz-icon type=“align-{{type ? ’left’ : ‘right’}}"></i><i nz-icon [type]=“type ? ‘menu-fold’ : ‘menu-unfold’” [theme]=“theme ? ‘outline’ : ‘fill’"></i><i nz-icon [type]=“type ? ‘fullscreen’ : ‘fullscreen-exit’"></i><i nz-icon type=”{{ type ? ‘arrow-left’ : ‘arrow-right’ }}"></i><i nz-icon type=“filter” theme=“outline”></i><nz-input-group [nzAddOnBeforeIcon]=“focus ? ‘anticon anticon-arrow-down’ : ‘anticon anticon-search’"></nz-input-group>动态加载动态加载,这是为了减少包体积而提供的方式。当 NG-ZORRO 检测用户想要渲染的图标还没有静态引入时,会发起 HTTP 请求动态引入。你只需要配置 angular.json 文件:{ “assets”: [ { “glob”: “**/*”, “input”: “./node_modules/@ant-design/icons-angular/src/inline-svg/”, “output”: “/assets/” } ]}动态使用不管是静态或动态加载,依然无法解决原始方法 class=“anticon anticon-” 的便利性,毕竟字符串就是字符串并非 Angular 模板无法被解析,而针对这个问题,提供两种解决办法。类样式事实上所有 Antd 图标都可以在 iconfont 找得到,可以点选自己需要的图标并生成相应的 css 文件或 cdn,最后在项目中可以直接使用 1.7.0 之前的写法。注意: 在项目编辑里加上 anticon anticon- 前缀才能同之前的类名保持一致。// angular.json"styles”: [ “src/iconfont.css”],如果非cnd还需要将相应的 icon 图标文件复制到 assets 目录下,同时修改 iconfont.css 中 @font-face 对应的 url 路径。@angular/elements动态加载的另一种方式是使用 @angular/elements,只需要 nz-icon 指令重新封装成组件。import { Component, Input } from ‘@angular/core’;@Component({ selector: ’nz-icon’, template: &lt;i nz-icon [type]="type"&gt;&lt;/i&gt;,})export class IconComponent { @Input() type: string;}同时在根模块里注册它。import { createCustomElement } from ‘@angular/elements’;@NgModule({ declarations: [], entryComponents: []})export class AppModule { constructor(injector: Injector) { customElements.define(’nz-icon’, createCustomElement(IconComponent, { injector })); }}最后。@Component({ selector: ‘app-demo’, template: &lt;div [innerHTML]="value"&gt;&lt;/div&gt; ,})export class DemoComponent { constructor(private san: DomSanitizer) { } value = this.san.bypassSecurityTrustHtml( icon: &lt;nz-icon type="bell"&gt;&lt;/nz-icon&gt;, );}结论本文只是针对这一次 ng-zorro-antd 图标上的变更做一个总结,就我个人而言还是比较推荐静态加载的方式,这无关乎包体大小的问题,而是更加明确我需要什么所以我应加载什么。 ...

October 26, 2018 · 1 min · jiezi

像打字一样插入图标-iconfont

简介- iconfont是什么?就像名字一样,iconfont就是图标字体,像雅黑字体,思源字体一样,这种字体就是由图标构成~- 有何优势?1、轻量性:一个图标字体比一系列的图像(特别是在Retina屏中使用双倍图像)要小。一旦图标字体加载了,图标就会马上渲染出来,不需要下载一个图像。可以减少HTTP请求,还可以配合HTML5离线存储做性能优化。2、灵活性:图标字体可以用过font-size属性设置其任何大小,还可以加各种文字效果,包括颜色、Hover状态、透明度、阴影和翻转等效果。可以在任何背景下显示。使用位图的话,必须得为每个不同大小和不同效果的图像输出一个不同文件。3、兼容性:网页字体支持所有现代浏览器,包括IE低版本。详细兼容性可以点击这里。- 有何劣势?1、图标字体只能被渲染成单色或者CSS3的渐变色。(问题很小,不要慌)2、使用版权上有限制,有好多字体是收费的。当然也有很多免费开源的精美字体图标供下载使用。(问题很小)3、创作自已的字体图标很费时间,重构人员后期维护的成本偏高。(问题很小)基于上面的分析,可以看出iconfont基本没有劣势(滑稽)。那么这么好的东西,哪里才能买到呢?使用方法此文使用阿里妈妈的图标库。步骤1:进入网站。点击桌面上的浏览器,输入 http://www.iconfont.cn/ ,吧唧一声敲下回车步骤2:选择自己喜欢的图标,点击购物车的按钮。步骤3:选择完毕后,点击右上角的购物车按钮。步骤4:点击添加到项目,如果没有项目则新建一个项目(“加入项目”按钮右边有一个浅灰色按钮),点击确定步骤5:点击下载到本地。步骤6:点开下载到的文件,点击demo。步骤7:查看上面的教程即可~嘿嘿嘿三种不同引用的区别和注意事项!unicode引用特点:-兼容性最好,支持ie6+,及所有现代浏览器。-支持按字体的方式去动态调整图标大小,颜色等等。-但是因为是字体,所以不支持多色。只能使用平台里单色的图标,就算项目里有多色图标也会自动去色。注意:这里src中需要填写对应路径,你下载到的文件(上一步骤叫你下载的)中名为iconfont的eot,woff,ttf,svg类型的文件都要扔进vue项目中font-class引用与unicode使用方式相比,具有如下特点:-兼容性良好,支持ie8+,及所有现代浏览器。-相比于unicode语意明确,书写更直观。可以很容易分辨这个icon是什么。-因为使用class来定义图标,所以当要替换图标时,只需要修改class里面的unicode引用。-不过因为本质上还是使用的字体,所以多色图标还是不支持的。注意:使用这种引用只需要将下载到的文件中名为iconfont类型为css,svg,ttf,eot的文件扔进vue项目中即可symbol引用这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。这种用法其实是做了一个svg的集合,与另外两种相比具有如下特点:-支持多色图标了,不再受单色限制。-通过一些技巧,支持像字体那样,通过font-size,color来调整样式。-兼容性较差,支持 ie9+,及现代浏览器。-浏览器渲染svg的性能一般,还不如png。注意:-使用这种引用只需要将下载到的文件中名为iconfont.js文件扔进vue项目中即可-当从阿里图库中图标被添加至项目,如果编辑过项目图标的颜色或者图标本身是有颜色的,那么在通过symbol获取图标时会在svg的path中增加fill属性,导致无法更改颜色,如果需要动态修改颜色,需要这样操作css操作图标经过我们上面一些步骤的操作呢 我相信 你已经能看到这条咸鱼了。.icon-xia{ font-size: 40px; // fontsize多大 宽高就多大 vertical-align: middle; //这个行内垂直居中简直不要太舒服 color: red;//改变颜色 opacity:.6;//改变透明度 …//没错,操作起来就像字体一样,纵享丝滑}最后谢谢大家,有问题请在评论区指出

October 16, 2018 · 1 min · jiezi