uniapp加载第三方字体方案对比(附原生微信小程序方案)

文章目录

官方文档

uniapp文档

https://zh.uniapp.dcloud.io/api/ui/font.html#loadfontface

微信小程序文档

https://developers.weixin.qq.com/miniprogram/dev/api/ui/font/wx.loadFontFace.html

下载字体包

我这里使用的是https://www.fonts.net.cn/
需要注意商用授权的问题哦

引入方案

限制
微信小程序限制
uniapp的限制
方案对比
优点 缺点
方案1 方便,下载下来直接能够使用 小程序不支持使用本地文件
方案2 不占文件大小 需要服务器支持,字体文件太大不能用,安卓没有效果
方案3 不需要服务器支持 文件太大不能用,而且不美观
方案4 (推荐!)没有兼容性问题 比较麻烦,需要有https,请求头有限制(但是这个我没有特意处理也是ok的),需要配置开发者后台
方案1:CSS本地加载

(如/static/fonts),然后在app.vuestyle中引入

css 复制代码
@font-face {
    font-family: my-font;
    src: url('~@/static/my-font.ttf');
}
方案2:CSS远程加载

app.vuestyle中引入

css 复制代码
@font-face {
    font-family: my-font;
    src: url('https://XXXXX/font.ttf');
}
方案3:转换为base64,然后通过css引入

用工具将ttf文字文件,转成base64形式,并通过css引入

可以使用这个网站https://www.giftofspeed.com/base64-encoder/

app.vuestyle中引入(或者新建一个css文件,然后app.vue种进行import也可以)

css 复制代码
@font-face {
    font-family: my-font;
	src: url(data:application/font-ttf;charset=utf-8;base64,YOUR BASE64 STRING HERE) format('truetype');
}

或者

js 复制代码
@import '~@/static/font/font-name.css';
方案4:使用uni.loadFontFace()

注意!!!:官网说这个api在app.vueonLoad生命周期中调用

但是我调用之后,根本没效果,success fail complete回调都不触发

最后各种尝试,终于在页面文件中的onLoad调用是生效的

js 复制代码
uni.loadFontFace({
  family: 'my-font',
  source: 'url("https://xxx.ttf")',
  success() {
      console.log('success')
  }
})

页面使用

就像正常字体一样使用即可

css 复制代码
.title {
	font-family: my-font;
}

字体包压缩(这里提供2种自用的方案)

提取常用的几千个字

这种用于原先的字体包就不大的(大概减少40-50%

https://github.com/DeronW/minify-font

比如我压缩了2个字体

  1. 7.09MB => 3.22MB
  2. 1004.46KB => 677.58KB
手动指定需要哪些字

这种适用于用到的文字很少的情况

https://juejin.cn/post/7161359760023879693

遇到的问题

本地的开发者工具可以查看,但是体验版和真机调试不可以

服务器的链接需要是https

苹果手机可以,但是安卓手机不可以

cors跨域问题,可以参见这篇文章 https://blog.csdn.net/weixin_44786530/article/details/134965082

  1. 需要在微信小程序的开发者后台 => 开发管理 => 服务器域名 => downloadFile合法域名添加字体文件所在的服务器域名

  2. 配置nginx跨域

    shell 复制代码
    location ~ .*\.(eot|otf|ttf|woff|woff2|svg)$
    {
    add_header Access-Control-Allow-Origin *;
    }
相关推荐
李宥小哥3 分钟前
微信小程序07-开发进阶
微信小程序·小程序·notepad++
艾小逗1 小时前
uniapp快速入门教程,内容来源于官方文档,仅仅记录快速入门需要了解到的知识点
小程序·uni-app·app·es6
2401_8459375311 小时前
PHP一键约课高效健身智能健身管理系统小程序源码
微信·微信小程序·小程序·微信公众平台·微信开放平台
程序员入门进阶13 小时前
基于微信小程序的科创微应用平台设计与实现+ssm(lw+演示+源码+运行)
微信小程序·小程序
鸭子嘎鹅子呱15 小时前
uniapp使用高德地图设置marker标记点,后续根据接口数据改变某个marker标记点,动态更新
uni-app·map·高德地图
计算机源码社20 小时前
分享一个基于微信小程序的居家养老服务小程序 养老服务预约安卓app uniapp(源码、调试、LW、开题、PPT)
android·微信小程序·uni-app·毕业设计项目·毕业设计源码·计算机课程设计·计算机毕业设计开题
双普拉斯1 天前
微信小程序点赞动画特效实现
nginx·微信小程序·notepad++
程序员阿龙1 天前
【2025】基于微信小程序的网上点餐系统设计与实现、基于微信小程序的智能网上点餐系统、微信小程序点餐系统设计、智能点餐系统开发、微信小程序网上点餐平台设计
微信小程序·小程序·毕业设计·订单管理·在线点餐·订单跟踪·在线支付
Angus-zoe1 天前
uniapp+vue+微信小程序实现侧边导航
vue.js·微信小程序·uni-app
Pluto & Ethereal1 天前
uni-app尺寸单位、flex布局于背景图片
uni-app