icon-font图标介绍

前言

像素完美(Pixel Perfection)、分辨率无关(Resolution Independent)和多平台体验一致性是设计师们的追求。 可访问性(Accessability)、加载性能和重构灵活性是前端工程师们关心的主题。

当下互联网设备「风起云涌」,显示分辨率「层出不穷」,为 Web 创建者们带来越来越多的难题。

  • 需要为高PPI(aka Retina)显示设备准备@1.5x、@2x、@3x的图片素材;
  • 需要针对不同显示屏分辨率来调整优化排版;
  • 需要考虑多个分辨率版本的图片的加载性能问题;
  • 设备版本碎片化(Version Segmentation)带来的语义和可访问性的问题;
  • ……

响应式设计

相关厂商内容

如何通过使用 AWS对IT资源实现高级别管控,并大规模实现更高级别的安全性?

崔宝秋、池建强、周爱民担任ArchSummit联席主席

Uber首席系统架构师Matt Ranney谈Uber的分布式系统容错设计

容器云最佳实践:Docker、微服务、Kubernetes

8.29容器技术培训专场,实战分析,限额免费!

响应式设计(Responsive Design)作为「救世主」的身份,已经在 Web 界布道了好几年,丝毫不亚于当年的「Ajax」先生。其核心就是:针对不同设备和应用场景,作出合理性的适应。狭义地看,就是 Web page 在不同分辨率下借助 media qurey 来调整页面布局和内容显示,三个关键词是:Fluid grids, Flexible images, Media queries.

其中 Flexible images 是最为棘手的地方。因为前面提到,现在的设备多样化,不同分辨率和不同 PPI 给图片自适应带来了空前复杂度。目前还没有一套完美的解决方案来应对,W3C那边还在拟定 Responsive ImagesPicture Element 的相关标准。但在这之前你需要采取多管齐下的方式,针对媒体元素不同的使用场景,制定不同的自适应策略。目前主要有三种主流方式:

  1. max-width: 100% 来自适应容器
    同一张图片,在不同容器里,自动适应到容器的大小。存在的问题是,大尺寸图片在小尺寸屏幕下的带宽浪费和加载速度慢。
  2. 多版本图片更换
    • 针对写在CSS里的background-image,可以借助 media query 来适应显示 @1x 或 @2x 的版本。
    • 针对 HTML 里的图片可以利用 Piturefill.js 来做自适应。
  3. 使用矢量化图形,包括
    • icon fonts
    • SVG

这一期我们主要来讲讲 icon fonts 的应用。

什么是 icon fonts?

利用字体工具把我们平时 Web 上用的图形图标(icons)转换成 web fonts,就成了 icon fonts,它可以借助 CSS 的
@font-face 嵌入到网页里,用以显示
icons。因为字体是矢量化图形,它天生具有「分辨率无关」的特性,在任何分辨率和PPI下面,都可以做到完美缩放,不会像传统位图,
如:png,jpeg,放大后有锯齿或模糊现象。

注:上图是 Apple 纪念 Mac 发布30周年网站截图,网页内大量运用了 icon fonts 来塑造不同年代发布的产品,这类 iOS 7 引入的线条风格图标,使用 icon fonts 来表现最合适不过了。

为什么要用 icon fonts?

除了「分辨率无关」这个最大的优点之外,icon fonts 还具有:

  • 文件小:相比图片几十几百KB的容量,icon fonts 几乎是羽翼级轻量。
  • 加载性能好:因为图标都被打包进一套字体内,http request 减少。这如同我们常用的 css sprites 技术。
  • 支持CSS样式:和普通字体一样,你可以利用CSS来定义大小、颜色、阴影、hover状态、透明度、渐变等等…
  • 兼容性好:web fonts 起源很早,别说主流浏览器,连IE6/7都能良好支持。除了一些老的移动端浏览器,如Android 2.1以下的初代浏览器,Opera mini 这类自限型浏览器。

当然 icon fonts 也有它的不足:

  • 样式单一,无法针对不同分辨率来调整icon 的细节,比如降低大尺寸icon 的线条粗细。
  • 颜色单一,CSS 无法方便的去定义彩色的 icon,倒是有通过叠加组合的方式来达到彩色图标的目的。
  • 移动端浏览器兼容性还不够完善,像Opera mini、Windows phone 7.0-7.8 都不能正常显示icon fonts。
  • 有少量的移动设备有可能会和 icon fonts 的字符编码冲突,导致icon 显示不正常(我们自己风车Android 版本就碰到了这个问题)。

所以 icon fonts 也并不是一套完美的响应式图片的解决方案,当它适宜你的应用场景时,比如:

  • 你的网站是扁平化或简约风格,图标样式单一,颜色为纯色。
  • 你的目标用户使用桌面浏览器为主,或者,
  • 你愿意为非兼容设备做兼容hack。

那么 icon fonts 是一个令设计师和前端工程师都心花怒放的方案。

如何制作 icon fonts?

icon fonts 的制作主要有两条思路:

  1. 利用字体工具手动制作
  2. 利用在线工具自动生成

手动制作

在icon fonts 自动生成器没有诞生之初,大家只能依靠字体编辑软件来完成icon fonts 的制作,简单介绍一下手动制作的流程。

  1. 在 illustrator 或 Sketch 这类矢量图形软件里创建你的 icon。
  2. 然后把 icon 一个一个导入到字体编辑工具,转换成 glyphs 进行编辑,设置对应的 unicode 编码。常用字体工具有:
  3. 完成glyphs 编辑后,从字体工具导出 OTF 字体文件,然后利用 Font Squirrel 生成器来生成 web fonts 支持的格式。

手动制作 icon fonts 需要具备一定字体设计的知识,如有兴趣可作尝试。而自动生成工具用起来就傻瓜和省心多了。

自动生成

我们「风车」去年底进行了一次改版,其中一项就是把原来位图图标全部转换成 icon fonts,当时采用的是阿里巴巴提供的免费在线工具 iconfont.cn

Iconfont.cn是由阿里巴巴UX部门推出的矢量图标管理网站,也是国内首家推广Webfont形式图标的平台。网站涵盖了1000多个常用
图标并还在持续更新中,Iconfont平台为用户提供在线图标搜索、图标分捡下载、在线储存、矢量格式转换、个人图标库管理及项目图标管理等基础功能。

「风车」应用内的图标有两个来源: 一些从开源图标库拿来,一些是设计师自己制作。接下来详细介绍一下,我们是如何利用 iconfont.cn 这个在线工具生成了这 56 个图标的 icon fonts。

步骤一

参照 iconfont.cn 提供的图标制作模版,在Illustrator 画布的16x16网格内,参考基线、上升部、下降部来调整图标大小和位置。

调整矢量图标需要注意几点:

  1. 图形需要闭合,不要用stroke,否则会显示不出来
  2. 图形合并并扩展
  3. 用单色
  4. 在16x16画布中进行排版,这样制作好的icon fonts 16px 大小的时候和其它字体保持一致。

步骤二

然后从Illustrator 保存为SVG文件,使用默认的SVG设置即可。

步骤三

你可以拖动一个或多个SVG图标到iconfont.cn 的上传表单,完成上传后会提示设置名称和tag,点击「完成上传」开始生成icon fonts 。生成完成后,你可以点击要下载的图标加入购物车,然后「下载至本地」。

(点击图像放大)

步骤四

解压刚下载的文件包,除了EOT、SVG、TTF、WOFF四种 web fonts 字体外,还有个 demo.html 展示所有 icons
及其对应的字体编码。之所以有4种字体格式,是考虑到不同浏览器不同平台对字体格式的支持不一样,具体看下面 CSS 里的注解。

复制4个字体文件到 assets 或 fonts 目录下,然后在 CSS 文件加入 @font-face 声明(注意更改字体所在的文件路径)。

@font-face {font-family: ‘iconfont‘;
    src: url(‘iconfont.eot‘); /* IE9*/
    src: url(‘iconfont.eot?#iefix‘) format(‘embedded-opentype‘), /* IE6-IE8 */
    url(‘iconfont.woff‘) format(‘woff‘), /* chrome、firefox */
    url(‘iconfont.ttf‘) format(‘truetype‘), /* chrome、firefox、opera、Safari, Android, iOS 4.2+*/
    url(‘iconfont.svg#uxiconfont‘) format(‘svg‘); /* iOS 4.1- */
}

再定义一个 icon-* 通配我们所有图标的共有 CSS 样式,

[class^="icon-"], [class*=" icon-"] {
  display: inline-block;
  speak: none
  font-family: "iconfont";
  font-size: 16px;
  line-height: 1;
  font-style: normal;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

最后是利用 :before 来注入每个 icon 对应的字体编码

.icon-bell:before {
  content: "\003432";
}
.icon-search:before {
  content: "\003433";
}

现在你可以这样显示一个铃铛图标:

<i class="icon-bell"></i>

下图就是我们「风车」应用 icon fonts 的实例。

(点击图像放大)

icon fonts 移动端应用

前面提到, icon fonts 在移动端的兼容性稍微差一点,有几个问题:

  1. 浏览器根本不支持

    举例 Opera mini,在移动设备和带宽比较落后的地方,用户量还是很大的,如果你的网站访问数据里这类浏览器流量不可忽视,那么你就需要额外处理 icon fonts 的向下兼容,比如 js 嗅探后用雪碧图(CSS spirtes)替代。

    各平台 icon fonts 的兼容情况,参见这张网友测试汇集的表格

  2. unicode 冲突问题

    一般情况下,icon fonts 生成器会使用 PUA(Private Unicode Area)这个安全区域的字符编码(code point)。PUA 是专门预留「私用」的 unicode 区间, 一般会用 U+E000..U+F8FF 这个 BMP 区间里预留的 PUA code point.

    比如:? 这个Apple 平台特有的字符,就是用 U+F8FF 这个code point 来对应的,在其它平台就看不到那个字符。

    阿里巴巴的 iconfont.cn 没有遵循这个最佳实践,用得的是 CJK 编码区间(U+3432),所以当你浏览器加载字体出问题时,会还原成一些奇怪的中文文字,这对读屏软件也非常不友好。好在它的管理后台,可以手动的编辑这个 code point。

    另外,如果发现有 icon 显示不出来,或被替换成了其它字符,那么更换一下 code point 可能可以快速的解决。

关于如何应用 icon fonts 到原生的 iOS/Android App 中去,iconfont.cn 上面有具体的教程,可以查看一下。

其它 icon fonts 工具

类似 iconfont.cn 这类在线生成工具有很多,就不再一一详细介绍,最著名的还有:

这些工具基本功能类似,但有少许功能差别,像 icomoon 还支持字体的连字(Ligatures)功能。通过设置 「bell」为铃铛图标的连字,当你在文本中写 「bell」时自动转换成铃铛图标。像 fontfello 是开源软件,意味着更加灵活和定制的可能性。

如果你对使用英文软件完全没有障碍,我强烈建议使用 icomoon,体验和功能都非常强大。当然作为国内的同行,还是要支持一下 iconfont.cn。

结语

icon fonts 作为 web fonts 的一种「特殊」应用,很好的解决了「响应式设计」中图形无损自适应的难题。设计师不再需要维护不同大小、不同颜色的多版本素材,图形矢量化之后,交给那些 在线生成器就可以了。对于前端工程师,利用 HTML+CSS 就可以灵活的使用成百上千种图标,无需担心切图、定位、优化等传统位图要应付的情况。而用户,简洁、清晰的图标带给他们赏心悦目的感觉之外,浏览网站的速 度体验也将大大提升。

时间: 2024-10-16 13:41:43

icon-font图标介绍的相关文章

icon font字体图标字库汇总

最近在研究icon font图标字库,找了一些比较好的在线字库.大都是开源的,而且各有特色! 阿里icon font字库 http://www.iconfont.cn/ 这个是阿里妈妈M2UX的一个icon font字体图标字库,包含了淘宝图标库和阿里妈妈图标库. fontello http://fontello.com/ 在线定制你自己的icon font字体图标字库,也可以直接从GitHub下载整个图标集,该项目也是开源的. icomoon http://icomoon.io/app/#/s

最新的超棒免费图标字体(icon font)收集

今天我们收集了18套非常有特色的免费图标字体给大家,如果能够将它们应用到你的用户界面设计上,绝对是完美之极! 到底什么才是图标字体? 图标字体是字体文件,用符号和字形的轮廓(像箭头.文件夹.放大镜等) 代替标准的文字数字式字符.图标字体就像Dingbat fonts,是专门为用户界面设计,就像其它网站字体一样,使用[email protected]在web浏览器里展示.处理方式类似网站字体: 拥有跨浏览器支持(甚至是IE6,例如,使用@font-face渲染网页字体) 如果使用者调整他们的浏览器

在iOS中使用icon font

在开发阿里数据iOS版客户端的时候,由于项目进度很紧,项目里的所有图标都是用最平常的背景图片方案来实现.而为了要兼容普通屏与Retina屏的设备,苹果要求每个背景图都要以两种尺寸存(a.png和[email protected]),这让设计师们增加了成本,因为他们每次都得出两份背景图标. 现在在web开发上,icon font技术的应用很广泛,它不仅在解决多分辨率显示问题上很有成效,而且在使用它的时候还能降低不少设计和开发成本. 那么它能不能应用到ios开发上来呢?带着这个疑问,我在github

阿里UX矢量图标库–最强大的矢量图标库(Icon font制作力荐工具)

继前面介绍过ICON-FONT的制作后,找了几个ICON库都是国外的今天偶然发现阿里巴巴的图标矢量库,www.iconfont.cn用了之后感觉很强大,丰富的图标库(集合阿里妈妈&淘宝的图标库),还支持自己上传,关键还能生成你项目专用的CDN,速度不言而喻,支持国产.下面引用介绍 转载请注明来源:Web前端(W3Cways.com) - Web前端学习之路 » 阿里UX矢量图标库–最强大的矢量图标库(Icon font制作力荐工具) 使用SVG来代替Web Iconfont(图形字体化) 从最开

字体图标 Icon font

Icon font Icon font 指的是用字体文件取代图片文件,来展示图标.特殊字体等元素的方法. 应用场景: Icon Font的优缺点 大小可以自由地变化 颜色可以自由地修改 添加阴影效果 *IE6也可以支持 支持一些CSS3对文字的效果 字体文件比图片文件小很多 由于是字体,所以只可以显示纯色图片,不支持多种颜色的图片(缺点) 资源: 阿里icon font字库 这个是阿里妈妈M2UX的一个icon font字体图标字库,包含了淘宝图标库和阿里妈妈图标库. fontello 在线定制

CSS Sprites+CSS3 Icon Font

CSS Sprites+CSS3 Icon Font 先马上等有空一定看看转载于http://www.cnblogs.com/jingwhale/p/4280073.html CSS Sprites在国内很多人叫CSS精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了.根据具体图标在大图上的位置,给背景定位. CSS Sprites加速的关键,不是降低质量,而是减少个数. 做成

Web 设计新趋势: 使用 SVG 代替 Web Icon Font

如果你还在使用 Icon Font 作为网页中显示图标的实现方案,那么你可能有点 Out 了. 由于使用 Icon Font 显示图标存在一些缺陷,开发者们一直在致力于探索使用 SVG 作为替代的方法. 这篇文章列举了目前 SVG 比较常见的使用方法. 关于使用 Icon Font 的缺陷,这篇来自 CSS Trick 的 <Inline SVG vs Icon Font> 可谓是总结的相当全面了.在我看来,Icon Font 的主要缺陷有以下几条: 浏览器将其视为文字进行抗锯齿优化,有时得到

Icon Font浅谈

这周继续在弄hybird app 的 UI框架的重构,进行到了编写换肤功能的阶段,而在做换肤之前,我想应该先弄一套框架内置的图标. 而图标无非就是两种做法: 1.图片 使用图片很正常,但是有缺陷的. 1.众多的图标导致了增加了许多HTTP请求 PS:有人会说我把它们弄成一张大图不久行了,可是这样弄了之后,你连大小都无法改变.所以肯定还是一批小图片. 2.放大缩小失真 3.同张图片如果需要不同颜色,又得弄多一套出来. 2.字体 也就是这篇要说得Icon Font.做法就是讲你的图标做成字符,然后用

解决firefox和IE9对icon font字体的跨域访问问题

何为跨域访问,为什么会有跨域限制?一切还得从浏览器的同源策略说起. 同源策略:是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能会受到影响,可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现. 浏览器的同源策略:限制了来自不同源的“document”或脚本,对当前“document”读取或设置某些属性.同源策略的存在,限制了“源”自A的脚本只能操作“同源”页面的DOM,“跨源”操作来源于B的页面将会被拒绝. 何为同源呢?“img.company.

在网页中画Icon小图标

在网页中画Icon小图标. 现代网页中,绝大部分都采用了Icon小图标的方式.其积分大致分为三类,CSS Sprite,font+HTML,font+CSS. CSS Sprite:又称为CSS雪碧,把网页中零星背景图片整合在一张图片文件夹中,再利用CSS的背景图片技术定位到要显示的位置.优点:减少文本体积和服务器请求次数,从而提高效率. 知识点:background-image background-position(向下向右取的是负值). 特点:1,相对单个图标,节省文本体积和服务器请求次数