微信小程序加载第三方字体
一、加载本地字体
做小程序项目时,有时为了提升页面展示效果,会引入一些第三方字体,引入方式如下代码片段
/*直接在app.css引入 */
@font-face {
font-family: "alifont"; // 是你封装的名字
src: url('./static/css/subset-AlibabaPuHuiTiR.ttf') format('truetype'); // 你字体包的位置
}
而常规字体文件比较大(例如以上阿里巴巴普惠字体--Alibaba-PuHuiTi-Regular.otf,字体文件大小6.9M),小程序的包大小又有2M的限制,引入本地字体会超包。
二、加载外部字体
@font-face {
font-family:'alifont';
src:url('https://www.jiandatech.com/test/vape/Alibaba-PuHuiTi-Regular.otf') format('opentype');
}
或者
wx.loadFontFace({
family: 'alifont',
source: 'url("https://www.jiandatech.com/test/vape/Alibaba-PuHuiTi-Regular.otf")',
success: function (e) {
console.log(e, '动态加载字体成功')
},
fail: function (e) {
console.log(e, '动态加载字体失败')
}
})
缺点:加载会很慢,会有明显的默认字体切换到外部字体的过程,体验较差,特别是字体文件越大,加载的速度越慢,有些小程序页面甚至无法加载成功。
三、简化字体文件后再本地引入
针对1和2的问题,我们可以对字体进行抽取,抽出页面中需要用到的字,文字抽取工具Transfonter,如下图所示操作
抽取后字体文件就从原来的6.9M变成了9k,然后就可以采用本地文件引入的方式加载第三方字体,有比较好的交互体验。
附:
@font-face的format属性
format :字体的格式,主要用于浏览器识别,一般有以下几种——truetype,opentype,truetype-aat,embedded-opentype,avg等。
对于@font-face而言,兼容性问题就是各浏览器所能识别的字体格式不尽相同。
- TrueType格式(.ttf)
Windows和Mac上常见的字体格式,是一种原始格式,因此它并没有为网页进行优化处理。
浏览器支持:IE9+,FireFox3.5+,Chrome4.0+,Safari3+,Opera10+,IOS Mobile Safari4.2+
- OpenType格式(.otf)
以TrueType为基础,也是一种原始格式,但提供更多的功能。
浏览器支持:FireFox3.5+,Chrome4.0+,Safari3.1+,Opera10.0+,IOS Mobile Safari4.2+
- Web Open Font格式(.woff)
针对网页进行特殊优化,因此是Web字体中最佳格式,它是一个开放的TrueType/OpenType的压缩版,同时支持元数据包的分离。
浏览器支持:IE9+, FireFox3.5+, Chrome6+, Safari3.6+,Opera11.1+
- Embedded Open Type格式(.eot)
IE专用字体格式,可以从TrueType格式创建此格式字体。
浏览器支持:IE4+
- SVG格式(.svg)
基于SVG字体渲染的格式。
浏览器支持:Chrome4+, Safari3.1+, Opera10.0+, IOS Mobile Safari3.2+
为解决兼容性问题,一般引入字体如下代码片段所示:
@font-face {
font-family: 'YourWebFontName';
src: url('YourWebFontName.eot'); /* IE9 Compat Modes */
src: url('YourWebFontName.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */
url('YourWebFontName.woff') format('woff'), /* Modern Browsers */
url('YourWebFontName.ttf') format('truetype'), /* Safari, Android, iOS */
url('YourWebFontName.svg#YourWebFontName') format('svg'); /* Legacy iOS */
}