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

devtools/2024/12/22 20:31:49/

文章目录

      • 官方文档
      • 下载字体包
      • 引入方案
        • 限制
        • 方案对比
        • 方案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/devtools/96235.html

相关文章

打卡学习Python爬虫第一天|python爬虫环境搭建

Python3 下载 Python3 最新源码,二进制文档,新闻资讯等可以在 Python 的官网查看到: Python 官网:Welcome to Python.orgThe official home of the Python Programming Languagehttps://www.python.org/ 可以在以下链接中下载 …

华三超融合服务器硬件监控指标解读

随着信息技术的快速发展,超融合服务器因其高效、灵活的特点,在企业IT架构中扮演着越来越重要的a角色。华三(H3C)作为业界知名的网络设备供应商,其超融合服务器产品在市场上广受欢迎。 为了确保这些服务器的稳定运行&am…

日期类代码实现-C++

一、目标 通过前面对类和对象的介绍我们可以自己通过C代码初步实现一个简单的日期类。 实现的主要操作有: 1.日期类的构造函数 2.日期类的拷贝构造函数(在头文件中实现) 3.日期类的比较运算符重载 4.日期类的计算运算符重载 5.流插入运…

Linux--C语言之指针

文章目录 一、指针的引入二、指针概述三、指针变量(一)指针变量的定义语法:举例:注意: (二)指针变量的使用1. 指针变量的赋值2. 操作指针变量的值3. 操作指针变量指向的值4. 两个有关运算符的使…

CSS的:placeholder-shown伪类:精确控制输入框占位符样式

CSS(层叠样式表)是控制网页元素样式的强大工具。随着Web开发技术的进步,CSS不断引入新的选择器和伪类,以增强开发者对页面元素的控制能力。:placeholder-shown伪类是CSS中一个相对较新的特性,它允许开发者针对输入字段…

【python】OpenCV—Optical Flow

文章目录 1、光流2、Opencv 中光流的实现3、稀疏光流4、密集光流4.1、farneback4.2、lucaskanade_dense4.3、rlof 5、涉及到的库5.1、cv2.goodFeaturesToTrack5.2、cv2.calcOpticalFlowPyrLK5.3、cv2.optflow.calcOpticalFlowSparseToDense5.4、cv2.calcOpticalFlowFarneback5.…

十一、OpenCVSharp 中的图像的特征提取

文章目录 简介一、角点检测1. Harris 角点检测算法2. Shi-Tomasi 角点检测算法3. 角点响应函数的计算和阈值选择4. 角点检测在图像配准和目标跟踪中的应用二、边缘特征1. Canny 边缘检测后的边缘描述子(如链码、Freeman 链码)2. 边缘的长度、方向和曲率计算3. 基于边缘特征的…

Linux运维_Bash脚本_源码安装Go-1.21.11

Linux运维_Bash脚本_源码安装Go-1.21.11 Bash (Bourne Again Shell) 是一个解释器,负责处理 Unix 系统命令行上的命令。它是由 Brian Fox 编写的免费软件,并于 1989 年发布的免费软件,作为 Sh (Bourne Shell) 的替代品。 您可以在 Linux 和…