阿里妈妈出品的 iconfont 是一个矢量图标管理、交流平台,支持矢量图、位图等格式下载,并提供便捷的前端项目植入引用方法,是当前Web开发中主流的icon解决方案。

想要在前端页面中引入图标,一个最原始的做法,就是下载图标的PNG图片格式,然后通过标签引入:

1icon.png

当页面中图标数量比较少时,采用这种简单的做法并无不当,但如果项目中图标数量较多,并且应用需求比较复杂的时候,就会暴漏出以下问题:

PNG图片是位图,缩放页面会导致图片模糊。

引入后不方便自由调整图标的大小和颜色,需要在外部编辑修改图片之后重新引入。

一个绝佳的解决方案就是 iconfont,在这个平台上不仅可以找到各种精美小图标,还能方便的集成矢量图标到前端项目中。

官方给出了三种 Web端引入方案:

Unicode

这种方案的思路是将图标变成字体引入,然后通过HTML转义字符来引用图标,特点是:

可以按照调整字体样式的方法来调整图标样式,如设置 font-size 调整尺寸大小,设置 color 属性修改图标颜色等。

因为是字体,所以不支持多色,这里所说的多色,意思是同一个图标里不允许出现多种颜色。

使用方案如下:

每个图标项目都会自动生成一段唯一的Unicode引用代码(CSS样式),在前端项目中将这段代码引入:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17@font-face {

font-family: 'iconfont'; /* project id 964156 */

src: url('//at.alicdn.com/t/font_964156_pr9i6o2kmf.eot');

src: url('//at.alicdn.com/t/font_964156_pr9i6o2kmf.eot?#iefix') format('embedded-opentype'),

url('//at.alicdn.com/t/font_964156_pr9i6o2kmf.woff2') format('woff2'),

url('//at.alicdn.com/t/font_964156_pr9i6o2kmf.woff') format('woff'),

url('//at.alicdn.com/t/font_964156_pr9i6o2kmf.ttf') format('truetype'),

url('//at.alicdn.com/t/font_964156_pr9i6o2kmf.svg#iconfont') format('svg');

}

.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;

}

这里使用 @font-face 定义了一种叫做 iconfont 的字体(名字可以自定义),这个 iconfont 字体就跟微软雅黑、宋体等是一种性质了,为了搞定兼容性问题确保字体引入成功,设置了多种常见格式的字体源引入链接,如 eot、woff、ttf等。

后面这段CSS代码的意思就是,所有类名为 iconfont 的元素字体都强制使用 iconfont 字体族,这样就为HTML转义符转义为“图标”(本质还是字体,只不过长成了图标的样子)做好了铺垫。

然后在需要插入图标的位置插入如下HTML代码,其中的转义符可以在 iconfont 的各个图标中找到:

13

Font Class

从Unicode的引用方案中我们可以看到,HTML转义符都是形如 ***; 的样式,书写不直观,语义不明确,使用和维护都有诸多不便。于是 iconfont 推出一套语义化的方案,这就是 Font Class。使用方案如下:

直接在前端项目的HTML头部外链iconfont的图标项目CSS文件:

1

然后在需要插入图表的位置插入如下HTML代码,其中的元素类名 icon-xxx 可以在iconfont的各个图标中获取:

1

这个方案只是给Unicode重新包装了一翻,变得更方便使用了而已,为什么这么说呢?我们直接在浏览器中打开这个CSS文件来看看名堂(有删减):

http://at.alicdn.com/t/font_964156_pr9i6o2kmf.css1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40@font-face {font-family: "iconfont";

src: url('//at.alicdn.com/t/font_964156_pr9i6o2kmf.eot?t=1548690018080'); /* IE9 */

src: url('//at.alicdn.com/t/font_964156_pr9i6o2kmf.eot?t=1548690018080#iefix') format('embedded-opentype'), /* IE6-IE8 */

url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgAB......TB+KD1yrAQAAAA==') format('woff2'),

url('//at.alicdn.com/t/font_964156_pr9i6o2kmf.woff?t=1548690018080') format('woff'),

url('//at.alicdn.com/t/font_964156_pr9i6o2kmf.ttf?t=1548690018080') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */

url('//at.alicdn.com/t/font_964156_pr9i6o2kmf.svg?t=1548690018080#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;

}

.icon-full-screen:before {

content: "\e616";

}

.icon-love:before {

content: "\e71e";

}

.icon-pause:before {

content: "\e615";

}

.icon-playing:before {

content: "\e643";

}

.icon-ring:before {

content: "\e601";

}

.icon-help:before {

content: "\e609";

}

是不是感觉似曾相识,这里将 Unicode 的引入代码统一封装了起来,只不过下面多了一些伪类的样式,其意义就是让你可以通过语义化的方法引用图标,比如你给一个图标元素添加了 icon-full-screen 类名,这里 .icon-full-screen:before 伪类样式就会帮你在元素中嵌入图标字符。

该方案的本质依旧和Unicode是一致的:图标变字体,再通过HTML转义符插入。所以Unicode方案中提到的无法使用多色图标的问题,这里依然未得到解决。

Symbol

这是一个可以支持多色图标的方案,官方的说法是:

这是一种全新的使用方式,应该说这才是未来的主流,也是平台目前推荐的用法。

没错,这是你没有体验过的船新版本,但是我才不会告诉你,iconfont平台自己用的是unicode和font-class的方案,可能是为了兼容 ie6 ?

这回不是引入CSS文件而是引入JS脚本了,其思路是通过JavaScript把图标项目中所有的SVG矢量图形统一添加到页面中并隐藏起来,后续用到图标的地方直接切图引用即可。

使用方案如下:

首先在前端项目的HTML文件中引入iconfont脚本:

1

在样式文件中添加如下通用样式规则:

1

2

3

4

5

6.icon {

width: 1em; height: 1em;

vertical-align: -0.15em;

fill: currentColor;

overflow: hidden;

}

然后在需要插入图标的位置插入如下HTML代码,其中的图标名 #icon-xxx 可以在iconfont的各个图标中获取:

1

2

3

通过这种方案引入 iconfont 图标,会在页面中发现多了一个SVG标签:

你可以把这个SVG标签理解为一个图标仓库,或者说一个原始画板,其样式被刻意隐藏了起来:

1

2

3

4position: absolute;

width: 0px;

height: 0px;

overflow: hidden;

查看页面中引入的图标元素,会发现 use 标签里多了相应图标的SVG矢量元素:

可以理解为这里从图标仓库中引用了一份SVG代码以显示图标,这就是Symbol方案的关键所在了。

有兴趣的可以在 AntDesign Icon 页面F12控制台中查看元素构成。

参考链接

iconfont怎么引入html,Web页面中引用iconfont图标相关推荐

  1. web.config中namespace的配置(针对页面中引用)

    web.config中namespace的配置(针对页面中引用) 1,在页面中使用强类型时: @model GZUAboutModel @using Nop.Admin.Models//命名空间(注意 ...

  2. php 离线 gis,在 Web 页面中使用离线地图

    1. 所需工具&插件: 1. MapDownloader (提取码: spx6) 2. 操作: 1. 参考:java离线地图web GIS制作 下载好所需地图瓦片,本文以百度地图/深圳为例 2 ...

  3. 轻松实现在web页面中直接播放rtsp视频流

    轻松实现在web页面中直接播放rtsp视频流 写在前面 实现 介绍 如何使用 准备ffmpeg 运行rtsp2web 参数说明(在 `new RTSP2web` 时,可配置的参数如下): 前端代码 参 ...

  4. 在HTML页面中引用Markdown编辑器(Editor.md)

    目录 1.下载Ediotor.md 2.引入Ediotor.md 3.确定Ediotor.md在哪里显示 最近写博客项目,用到了Markdown编辑器,这里介绍一款国内好用的Markdown编辑器:E ...

  5. html右键禁用和web页面中添加加入qq群的方式

    需求: html禁用右键,防止定位csspath和xpath,同时需要在web页面中加入添加加入qq群的图标 实现: html禁用右键:利用oncontextmenu <!doctype htm ...

  6. 从此不再为Web页面中的Tooltip烦恼

    让Web页面中,不能折行或不希望被折行的文字始终显示在一行,是一种严格的UI风格,毕竟自由的折行会使得表格和整体界面变得很难把握.当然在一行显示不完全时配以省略号在结尾,能很好的提示用户表示语句未结束 ...

  7. 如何把python可视化到前端_python数据可视化的效果如何在web页面中展示_北京可视化股票...

    有什么APP可以展示可视化的任务进度 可视化任务进度软件,使用敬业签,具体可视有事项开始时间,进度及人.还有结束时间以及人员处理速等等,更多功能如下: 1.敬业签是一款功能比较全面的桌面便签软件,分为 ...

  8. [置顶] 读取pdf并且在web页面中显示

    读取pdf并且在web页面中显示 if (System.IO.File.Exists(f)) { Response.ContentType = "applicationpdf"; ...

  9. 在html页面中怎么打印区域,javascript打印web页面中指定区域的方法

    要实现打印web页面中的指定区域,要做到: 将需要打印的课程表的table放入div标签中,然后指定出需要打印的区域,最后调用window.print打印指定内容. 核心代码: 复制代码 代码示例: ...

最新文章

  1. google gn构建系统的介绍
  2. UVA1108 Mining Your Own Business(思维、割点)(2011 ICPC - WorldFinal)
  3. mysql 拷贝数据库 表存在却打不开_mysql数据库文件复制后表打不开
  4. 基本拖拽效果,使用 mousedown , mousemove , mouseup实现
  5. 基于python的nlp预备知识
  6. CentOS 初体验四: 阿里云服务器开启8080端口
  7. USACO - 3.1.6 - Stamps
  8. Ubuntu14下安装svn仓库,以及权限配置
  9. 终于可以摆脱 Pipenv 这坑货了
  10. OC语言Block和协议
  11. linux下makefile中cp,make与makefile 的理解
  12. javascript 动态修改css样式
  13. zookeeper 密码_阿里资深JAVA架构带你深度剖析dubbo和zookeeper关系
  14. SQL中STR()函数功能
  15. svg操纵方案 基于 D3 还是 angular?
  16. 单元测试 - mock异常
  17. 阿里音乐流行趋势预测-代码分享
  18. 素数表(Prime number table)
  19. 图片、照片相似度批量对比
  20. 90后男屌丝如何让淘宝客日赚10万滴

热门文章

  1. 去律师面试python_律师事务所---面试篇
  2. 理财001 理财是人人都需要的基础能力
  3. 如何在Windows上创建,解压,更新.tar.gz压缩包
  4. GitHub 上的一个开源项目,可快速生成一款属于自己的手写字体!
  5. 高数 | 多元函数求极限 使用极坐标代换的条件与细节
  6. java观察者模式异步notify_Java进阶篇设计模式之十三 ---- 观察者模式和空对象模式...
  7. 大家知道32寸电视有多大吗
  8. 腾讯云发布云端开发者工具Cloud Studio 帮助开发者实现一站式开发(内含福利)
  9. 微信小程序一个简单聊天室
  10. 西门子S7-1200二轴V80伺服写字案例程序运动控制 写字机自动化机械控制,高速脉冲