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

server/2024/11/9 16:42:43/

文章目录

      • 官方文档
      • 下载字体包
      • 引入方案
        • 限制
        • 方案对比
        • 方案1:CSS本地加载
        • 方案2:CSS远程加载
        • 方案3:转换为base64,然后通过css引入
        • 方案4:使用uni.loadFontFace()
      • 页面使用
      • 字体包压缩(这里提供2种自用的方案)
        • 提取常用的几千个字
        • 手动指定需要哪些字
      • 遇到的问题
        • 本地的开发者工具可以查看,但是体验版和真机调试不可以
        • 苹果手机可以,但是安卓手机不可以

官方文档

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中引入

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

app.vuestyle中引入

@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也可以)

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

或者

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

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

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

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

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

页面使用

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

.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跨域

    location ~ .*\.(eot|otf|ttf|woff|woff2|svg)$
    {
    add_header Access-Control-Allow-Origin *;
    }
    

http://www.ppmy.cn/server/102159.html

相关文章

新160个crackme -034-fireworx.5

运行分析 应该是要破解Regcode,但是没有验证按钮,只有一个about PE分析 Delphi文件,32位,无壳 静态分析&动态调试 ida搜索字符串,未找到有用字符串 用Delphi分析神器DeDeDark进行分析(要使用windows XP…

大模型学习方法之——大模型技术学习路线

“ 技术学习无非涵盖三个方面,理论,实践和应用**”** 大模型技术爆火至今已经有两年的时间了,而且大模型技术的发展潜力也不言而喻。因此,很多人打算学习大模型,但又不知道该怎么入手,因此今天就来了解一下…

【网络】传输层TCP协议的报头和传输机制

目录 引言 报头和有效载荷 确认应答机制 捎带应答机制 超时重传机制 排序和去重 连接管理机制 个人主页:东洛的克莱斯韦克-CSDN博客 引言 TCP是传输层协议,全称传输控制协议。TCP报头中有丰富的字段以及协议本身会制定完善的策略来保证网络传输的…

Linux装ifort环境

下载完成之后,需要解压文件 t tar zxvf IPSXE2020u4Linux.tgz 解压完成之后进入文件夹,我们使用GUI界面安装。 键入./install_GUI.sh 启动安装程序 收集用户信息,选择同意或者不同意都可以 这一步需要等待十几秒 核验不通过 这是缺少运行程…

掌握Golang的os/exec:执行外部命令的艺术

标题:掌握Golang的os/exec:执行外部命令的艺术 在Go语言(通常被称为Golang)的世界中,os/exec包是一个强大的工具,它允许开发者在Go程序中执行外部命令。无论是调用系统工具,运行脚本&#xff0…

从“混乱”到“一统”:Type-C PD芯片的崛起之路

Type-C PD芯片:从诞生到风靡,一场科技界的“充电革命” 开场白:一场意外的邂逅 想象一下,在一个风和日丽的下午,你正准备为你的手机、平板、笔记本电脑还有新入手的游戏手柄找充电线时,突然发现它们竟然都…

简单了解JVM执行Java程序的基本流程 | 一次编译,到处运行

前言: Java代码怎么做到一次编译,到处运行的呢?靠JVM,那JVM的执行流程是什么呢? 简单来说:通过Javac编译器将Java源代码编译成字节码,JVM通过类加载器将字节码加载到运行时数据区中,…

前端工程师如何快速入门鸿蒙开发?

在当今科技飞速发展的时代,前端工程师们面临着不断拓展技能边界的挑战。随着鸿蒙操作系统的崛起,掌握鸿蒙开发成为了前端工程师们提升自身竞争力的重要途径。那么,前端工程师如何才能快速入门鸿蒙开发呢? 一、了解鸿蒙开发的基础知识 前端工…