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 相关文章推荐
转一个日期输入控件,支持FF
Apr 27 Javascript
写JQuery插件的基本知识
Nov 25 Javascript
JavaScript动态改变表格单元格内容的方法
Mar 30 Javascript
jQuery插件MixItUp实现动画过滤和排序
Apr 12 Javascript
前端框架Vue.js中Directive知识详解
Sep 12 Javascript
JavaScript实现的CRC32函数示例
Nov 23 Javascript
JS操作input标签属性checkbox全选的实现代码
Mar 02 Javascript
BootStrap 表单控件之单选按钮水平排列
May 23 Javascript
jQuery选择器之子元素选择器详解
Sep 18 jQuery
JavaScript学习教程之cookie与webstorage
Jun 23 Javascript
JavaScript实现雪花飘落效果
Dec 27 Javascript
使用react+redux实现计数器功能及遇到问题
Jun 02 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
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
关于UEditor编辑器远程图片上传失败的解决办法
2012/08/31 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
php中static 静态变量和普通变量的区别
2016/12/01 PHP
JavaScript 事件冒泡简介及应用
2010/01/11 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
一个JavaScript变量声明的知识点
2013/10/28 Javascript
jquery与prototype框架的详细对比
2013/11/21 Javascript
javascript的函数作用域
2014/11/12 Javascript
AngularJS内置指令
2015/02/04 Javascript
基于jQuery.Hz2Py.js插件实现的汉字转拼音特效
2015/05/07 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
Angular 2父子组件数据传递之局部变量获取子组件其他成员
2017/07/04 Javascript
react-native使用react-navigation进行页面跳转导航的示例
2017/09/07 Javascript
基于VUE.JS的移动端框架Mint UI的使用
2017/10/11 Javascript
基于bootstrap页面渲染的问题解决方法
2018/08/09 Javascript
微信小程序 云开发模糊查询实现解析
2019/09/02 Javascript
关于JS模块化的知识点分享
2019/10/16 Javascript
Python3 能振兴 Python的原因分析
2014/11/28 Python
python使用PyGame模块播放声音的方法
2015/05/20 Python
Python中for循环控制语句用法实例
2015/06/02 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
python networkx 根据图的权重画图实现
2019/07/10 Python
Python秒算24点实现及原理详解
2019/07/29 Python
Python实现在Windows平台修改文件属性
2020/03/05 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
html5实现多文件的上传示例代码
2014/02/13 HTML / CSS
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
一名女生的自荐信
2013/12/08 职场文书
项目资料员岗位职责
2013/12/10 职场文书
考试退步检讨书
2014/01/15 职场文书
销售冠军获奖感言
2014/02/03 职场文书
故意伤害辩护词
2015/05/21 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书
ssh服务器拒绝了密码 请再试一次已解决(亲测有效)
2022/08/14 Servers
CSS list-style-type属性使用方法
2023/05/21 HTML / CSS