之前看过设计师面试一位 Web 前端工程师,其中有一段这样的对话:

“如果设计师希望用图片实现某个字体样式,而从技术的角度来说这样不合理,但设计师非常坚持,这时候你怎么办?”
“我会给设计师讲解工程上面临的问题,争取他理解。例如:如果文本使用图片,以新浪站点的访问量来说,这里会需要消耗大量的服务器资源,至少需要增加多台服务器,增加带宽流量消耗”。

这些年 Web 前端技术在迅猛的发展,这样的问题已经有了解决方案——WebFont,如果遇到这样的问题,现在会给出更好的答案。

WebFont 技术可以让网页使用在线字体,而无需使用图片,从而有机会解决开头设计师提到的问题。它通过 CSS 的 @font-face 语句引入在线字体,使用 CSS 选择器指定运用字体的文本,与此同时专用于 Web 展示的 woff 格式字体也得到各大浏览器厂商支持,进一步减少了字体的体积。在国外,WebFont 已经非常流行了,大量的网站使用了 WebFont 技术,而业界大佬 Google 也顺势推出的免费 WebFont 云托管服务,这一切均带动了国外字体制作行业的高速发展。

一、WebFont 的优势

相对图片,WebFont 有如下优势:

支持选中、复制
支持 Ctrl+F 查找
对搜索引擎友好
支持工具翻译
支持无障碍访问,支持朗读
字体是矢量图形,支持矢量缩放,自动适配高清屏
文本修改方便
字形可以重复利用,节省网络资源

二、中文 WebFont 的困境

既然 WebFont 有如此多优势,为何中文站点依然很少采用?这里主要是三个“中国特色”造成的:

1、中文字体体积

英文只有 26 个字母,一套字体不过几十 KB;而汉字却有数万个,导致字体文件通常有好几 MB 大小,文件体积比英文字体大数百倍,按照中国网络环境的现状,用于实际项目中显然不现实。
2、浏览器类型
国内浏览器市场异常繁荣,从 IE6 到各种壳的浏览器,他们对字体格式的支持也不一样,字体格式转换相当繁琐。
3、操作系统
相当长的时期内,Windows XP 操作系统是国内的主流,而 XP 系统对字体渲染表现差劲,设计师难以接受 WebFont 的表现,而宁愿使用图片。不过随着 XP 系统市场份额急剧下降以及移动设备的崛起,这个问题已经变得不再那么重要了。

总结一下,中文 WebFont 首要解决的问题便是:压缩与转码。

三、现有的中文 WebFont 解决方案

1. 本地制作
通过字体制作工具(例如FontLab)来删除没有使用的字符,即制作精简版字体。
2. 字体云服务
国内目前有两家公司提供中文 WebFont 云托管服务,他们能够压缩与转码字体:
http://www.youziku.com (有字库)
http://cn.justfont.com (就是字)
三、现有方案的问题
在实践中,通过工具制作精简版字体异常繁琐,它需要仔细核对字符,修改非常麻烦,效率低下且容易遗漏字符而导致出错
第三方云服务最大的问题是无法保证稳定性,能否支撑海量用户访问还是个问号,至少目前这两家中文 WebFont 平台中还没有大型商业站点的案例,大多都是一些小型个人或企业网站在使用

四、本地自动化 WebFont 压缩设想

出于性能以及可控性的考虑,我们排除了第三方云服务方案,尝试设计本地自动化方案。和小伙伴讨论的过程中,我们想到了之前有同事做过自动化切图的工具,原理是用脚本操作 Photoshop,那么我们是否同样可以编写脚本让字体工具自动化的操作呢?理论上 OK,值得我们去尝试。

字体压缩关键在于删除不必要的字符,我们可以指定一个配置文件来指定字体以及其所使用的字符,然后操作字体工具精简字体即可。

前面提到,如果手工配置字体所使用的字符可能会遗漏,这里也能否实现自动化的提取?

灵感总是在不经意间出现,我们将目光又朝向了 CSS,因为 CSS 本身就一个完整的配置文件:它的 @font-face 语句记录着字体名称与文件路径,选择器记录着字体使用范围,而 CSS 选择器又与 HTML 文档相对应,HTML 文档又可以使用选择器来查找节点与文本。

五、字蛛(Font-Spider)诞生

为了实现上述设想,我们需要拥有这三个小伙伴:

分析模块:负责收集字体与字体使用的字符
压缩模块:负责删除字体中没有使用的字符实现压缩
转码模块:负责将字体转换成跨浏览器使用的格式
借助开源的力量,工具的 Demo 版本被迅速的实现出来。感谢以下开源项目:

css.js:它能将 CSS 解析成语法树,并且能够较好的容错适应各种 hack 语法
jsdom:它能够在 NodeJS 中实现 W3C DOM API,使得我可以使用 document.querySelectorAll() 方法输入 CSS 选择器来查找 HTML 节点上的文本
font-optimizer:这是一个使用 Perl 编写的字体优化工具,可以高效的删除字体中指定的字符
ttf2eot、ttf2woff、ttf2svg:是它们完成了跨浏览器字体格式转码的工作

成果

字蛛(FontSpider,中文字体压缩器)网页自由引入中文字体相关推荐

  1. html如何调用特殊字体,怎样在页面中引入特殊字体呢?

    让网页自由引入中文字体成为可能,可能有人会说直接引入字体包,在样式中设置font-family:"XXX"不就好了吗?超级简单呢.. 那我们一起看看字体包的大小(该实例中使用:喜鹊 ...

  2. 中文字体压缩器——字蛛

    网站多处使用中文特殊字体,而导入字体文件随便十几M,做成图片又不好维护,介绍一个简单实用的字体压缩工具. 中文字体压缩器--字蛛 css font-face 引入中文字体必备神器 字蛛通过分析本地 C ...

  3. 字体文件压缩——字蛛(FontSpider)

    简介 字蛛(FontSpider) 是一个中文字体压缩器: 字蛛通过分析本地 CSS 与 HTML 文件获取 WebFont 中没有使用的字符,并将这些字符数据从字体中删除以实现压缩,同时生成跨浏览器 ...

  4. vue使用ttf字体包压缩 字蛛 font-spider

    1.可以先建一个文件夹 里面包括 2.1>.css文件夹->index.css     2>.font(里面放的是ttf字体包)  3>.index.html 引入 4> ...

  5. 中文字体压缩器并且转换(推荐阅读)

    字蛛是一个中文字体压缩器 官方网站:http://font-spider.org/index.html 用于解决页面引入的css字体过大的问题 使用方法: npm i -g font-spider 在 ...

  6. 字蛛fontSpider的使用

    字蛛官方文档 http://font-spider.org/index.html 首先安装全局包  npm install font-spider -g 然后下载字体 ,本次需要的是  "造 ...

  7. 网页引入谷歌字体_在网页中使用Google字体

    网页引入谷歌字体 Google Fonts is a service provided for free by Google that allows access to thousands of fo ...

  8. html5字体在线代码,网络字体@font-face 如何处理网页中的特殊字体

    HTML5学堂:随着网页的发展,网页中出现了越来越多的字体种类,网页自带的微软雅黑.宋体.黑体已经越来越难以满足设计的需要,那么,如何在网站中使用比较特殊的字体,又不会下载太大的字体文件,来装饰我们网 ...

  9. Android 字体库的使用。引入外部字体

    原文地址:http://blog.csdn.net/zuiwuyuan/article/details/49454411 开发Android的人大多都知道,Android里面对字体的支持少得可怜,默认 ...

最新文章

  1. php 判断是否有相同的ID,如果有就修改数据库字段,没有就插入数据库字段
  2. 读书笔记:《图解HTTP》第三章 HTTP报文
  3. Nature:Gordon组采用甘露糖苷选择性抑制尿路致病性大肠杆菌
  4. iOS下JS与OC互相调用(六)--WKWebView + WebViewJavascriptBridge
  5. TortoiseGit git push提示fatal: HttpRequestException encountered remote: Invalid username or password.
  6. 用户 'sa' 登录失败。 (Microsoft SQL Server,错误: 18456)
  7. 怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)
  8. Laravel 代码开发最佳实践(持续更新)
  9. 触类旁通:那些关于 TBL$OR$IDX$PART$NUM 的诡异案例和知识
  10. OpenCV图像几何变换——转置,镜像,倒置
  11. 搜狗输入法遗留文件sogouInput删除方法(此方法适合大部分流氓软件)
  12. 第一范式、第二范式、第三范式、BCNF范式详解
  13. html b5纸尺寸,b5纸的大小?
  14. 还在抠图?百万张PNG透明图片免费下载!
  15. html5锥形,Three.js HTML5 3D开发实例 - 彩色圆锥体
  16. 自己动手,组建简单好用的NAS!(上)
  17. 最优化方法一:微分求极值
  18. Javascript清除IE缓存
  19. 解密PDF文件打开密码
  20. java SimpleDateFormat日期格式转换错误

热门文章

  1. 北京15家颜值爆表的餐厅!90%的妹纸来这里都不是为了吃饭
  2. 电视投屏显示设置服务器,Win10怎么投屏到电视?WIN10投屏到液晶电视具体步骤...
  3. cdr轮廓字怎么把轮廓拆出来_用corelDraw怎么把文字做成轮廓?
  4. win10解决redis桌面管理工具RedisDesktopManager右边黑屏问题
  5. Android代号、版本、API版本号
  6. 智多星骗子:骗钱的手段太高超
  7. 2020-08《信息资源管理 02378》真卷(独家文字版),圈定章节考点+统计真题分布
  8. 数据集下载(OTB2015、VOT2018、UAV123、DET、VID、COCO、Youtube-BB、LaSOT、GOT-10k)
  9. 热爱生活的人请过来看看:有没有通过叶子或花来识别植物的软件?
  10. 【Matplotlib】学术论文黑白柱状图绘制