iconfont的三种使用方式详解


Posted in Javascript onAugust 05, 2018

在我们项目中经常要使用到iconfont,在此我们使用阿里巴巴矢量库提供的icon图标,此图标库足够为我们提供大量的图标,我们首先需要的事在阿里巴巴矢量图标库新建一个自己的账号,并且新建一个项目,这个项目包含了你所有要用到的图标。我们需要选中需要的图标放到自己的项目中,并下载下来放到自己项目下的iconfont文件夹之下。(需要更新图标时,下载包也需要重新下载更新)

方式一:使用symbol方式(本质是用svg标签构成的)

第一步:为了代码更好的复用,我们封装一个svg-icon组件,代码如下:

<template>
 <svg :class="svgClass" aria-hidden="true">
  <use :xlink:href="iconName" rel="external nofollow" ></use>
 </svg>
</template>
<script>
export default {
 name: 'svg-icon',
 props: {
  iconClass: {
   type: String,
   required: true
  },
  className: {
   type: String
  }
 },
 computed: {
  iconName() {
   return `#icon-${this.iconClass}` // 注意:因为此处绑定的svgClass名已经包含#icon,所以复制symbol名字事不需要名字的前缀了
  },
  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>

第二步:在main.js中引入

import '@/assets/icons/iconfont.js' //symbol方式的相关文件
import '@/assets/icons/iconfont.css' // Unicode和fontclass方式的样式包
import SvgIcon from '@/components/SvgIcon' // 使用icon组件
Vue.component('svg-icon', SvgIcon) // 引入全局组件,也可以在局部引入

第三步:使用

在自己需要用到的组件中:

<template>
 <div>
 <!--方式一:使用svg-->
 <svg-icon class="h1" icon-class="iconfontzhizuobiaozhunbduan35"></svg-icon>
 <svg-icon class="h1" icon-class="hekriconshebeidengpao"></svg-icon>
 <!--方式二:使用unicode-->
 <i class="iconfont unicode"></i>
 <i class="iconfont unicode"></i>
 <!--方式三:使用iconfontclass-->
 <span class="iconfont icon-baojingliebiao classicon"></span>
 </div>
</template>
<script>
// import '@/assets/icons/iconfont.css'
</script>
<style>
  .h1{
 width:50px;
 height:50px;
 font-size: 100px;
 }
 .unicode{
 font-size: 30px;
 }
 .classicon{
  /* 可以自定义icon的颜色与大小 */
 font-size: 100px; 
 color:red;
 }
</style>

另外两种使用方式是使用unicode和fontclass方式,如上面的代码所示引入与使用

然后我们谈谈这三种方式的优缺点吧

unicode:

优点:

  • 兼容性最好,支持ie6+
  • 支持按字体的方式去动态调整图标大小,颜色等等

缺点:

  • 不支持多色图标
  • 在不同的设备浏览器字体的渲染会略有差别,在不同的浏览器或系统中对文字的渲染不同,其显示的位置和大小可能会受到font-size、line-height、word-spacing等CSS属性的影响,而且这种影响调整起来较为困难
  • 不直观,看unicode码很难分辨什么图标

fontclass:

  • 兼容性良好,支持ie8+
  • 相比于unicode语意明确,书写更直观。可以很容易分辨这个icon是什么。

symbol:

  • 支持多色图标了,不再受单色限制。
  • 支持像字体那样通过font-size,color来调整样式。
  • 支持 ie9+
  • 可利用CSS实现动画。
  • 减少HTTP请求。
  • 矢量,缩放不失真
  • 可以很精细的控制SVG图标的每一部分

综上所述的一些特点,个人比较推荐使用symbol或者fontclass的方式

总结

以上所述是小编给大家介绍的iconfont的三种使用方式,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
Discuz! 6.1_jQuery兼容问题
Sep 23 Javascript
某页码显示的helper 少量调整,另附js版
Sep 12 Javascript
浅析JavaScript事件和方法
Feb 28 Javascript
jQuery实现调整表格单列顺序完整实例
Jun 20 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
Jun 06 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
Jun 12 Javascript
详解开发react应用最好用的脚手架 create-react-app
Apr 24 Javascript
vscode配置vue下的es6规范自动格式化详解
Mar 20 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
Jul 31 Javascript
js单线程的本质 Event Loop解析
Oct 29 Javascript
Vue使用鼠标在Canvas上绘制矩形
Dec 24 Vue.js
js正则表达式简单校验方法
Jan 03 Javascript
vue-content-loader内容加载器的使用方法
Aug 05 #Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
Aug 05 #Javascript
dts文件中删除一个node或属性的操作方法
Aug 05 #Javascript
深入理解JavaScript的async/await
Aug 05 #Javascript
js数据类型检测总结
Aug 05 #Javascript
通过函数作用域和块级作用域看javascript的作用域链
Aug 05 #Javascript
vue实现简单的MVVM框架
Aug 05 #Javascript
You might like
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
2007/02/22 PHP
PHP读取CSV大文件导入数据库的实例
2017/07/24 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
JavaScript 学习笔记(九)call和apply方法
2010/01/11 Javascript
js自定义事件代码说明
2011/01/31 Javascript
javascript中IE浏览器不支持NEW DATE()带参数的解决方法
2012/03/01 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
Node.js开源应用框架HapiJS介绍
2015/01/14 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
Knockoutjs 学习系列(一)ko初体验
2016/06/07 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
es6学习笔记之Async函数的使用示例
2017/05/11 Javascript
值得收藏的vuejs安装教程
2017/11/21 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
2019/04/17 Javascript
通过说明与示例了解js五种设计模式
2019/06/17 Javascript
vue element table中自定义一些input的验证操作
2020/07/18 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
基于Python实现的扫雷游戏实例代码
2014/08/01 Python
对Python中内置异常层次结构详解
2018/10/18 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
解决pyttsx3无法封装的问题
2018/12/24 Python
python日期相关操作实例小结
2019/06/24 Python
Python字典常见操作实例小结【定义、添加、删除、遍历】
2019/10/25 Python
python主线程与子线程的结束顺序实例解析
2019/12/17 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
2020/02/26 Python
python中子类与父类的关系基础知识点
2021/02/02 Python
Tostadora意大利:定制T恤
2019/04/08 全球购物
食品业务员岗位职责
2014/03/18 职场文书
三方协议书
2015/01/27 职场文书
干货:我将这样书写我的演讲稿!
2019/05/09 职场文书
七年级作文之我的梦想
2019/10/16 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python
Python实现简单的猜单词
2021/06/15 Python
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA