工做中我相信你们都遇到过设计要求使用一些奇奇怪怪字体的需求,而后由于字体文件太大,选择切图。css
我这个需求就厉害了,用户发的文章能够选择字体。这文章中能够出现的字就太多了,显然上个方案就不合适了,那咱们是这么作的呢?html
废话很少说,先上 demo,别问我 demo 是谁。前端
问题只有一个,那就是字体文件太大了(10MB)。先不说流量贵不,这么大个文件垃圾网时,我文章都看完你字体还没回来。git
固然是把字体文件缩小,那么有两种方案github
英文的话比较简单,好比只提供 26 个字母。npm
可是中国汉字博大精深,太难了,那么咱们能够提供一些经常使用字。gulp
优势:缓存
缺点:微信
这个方案就是把文章中的全部字提出来,而后生成一个字体文件使用。
其实这个方案经常使用于静态页面,跑个脚本分析生成一个字体文件。ide
优势:
缺点:
固然,咱们最后选择了这个动态生成字体文件方案,就了文件小,加载快。
好了上面把方案说了,下面就开始说怎么搞了。
我使用的是 fontmin 库来实现的功能。
npm install --save fontmin
var Fontmin = require('fontmin'); new Fontmin() .src('/static/font/font.ttf') // 载入字体 .use(rename(txtMD5+'.ttf')) // 修改输出的文件名 .use(Fontmin.glyph({text: txt,hinting: false})) //子集化 text 参数就是输出时要的字体 .use(Fontmin.ttf2eot()) // eot 转换插件 .use(Fontmin.ttf2woff()) // woff 转换插件 .use(Fontmin.ttf2svg()) // svg 转换插件 .use(Fontmin.css()) // css 生成插件 .dest('/static/fontmin'); // 设置字体输出路径 .run(function (err, files) { if (err) throw err; console.log('success'); });
var rename = require('gulp-rename'); .use(rename(txtMD5+'.ttf')) // 修改输出的文件名
.use(Fontmin.css( fontFamily: 'MD5' ))