当前位置: 首页 > news >正文

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

文章目录

      • 官方文档
        • uniapp文档
        • 微信小程序文档
      • 下载字体包
      • 引入方案
        • 限制
          • 微信小程序限制
          • uniapp的限制
        • 方案对比
        • 方案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 *;
    }
    

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 中国编辑期刊
  • Qt+OpenCV配置和测试
  • ARM 处理器异常处理机制详解
  • MYSQL----表的创建
  • 海量数据的处理方法
  • 【C语言初阶】C语言指针全攻略:解锁C语言深层奥秘的钥匙
  • Springboot集成Mybatis在不同文件夹下出现同名文件时启动报错
  • Java实现pdf/word文字识别,调用OCR提取图片文字聚合
  • 厦门商家微信小程序、抖音、支付宝小程序同步上线
  • C语言宏中“#”和“##”的用法
  • 优先级队列的实现
  • 【uniapp】vue3+vite配置tailwindcss
  • 力扣热题100_链表_234_回文链表
  • ubuntu设置共享文件夹,非虚拟机,服务器版
  • XSS DOM漏洞复现 与DOM 破坏
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • 时间复杂度分析经典问题——最大子序列和
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • codis proxy处理流程
  • java中的hashCode
  • Laravel 中的一个后期静态绑定
  • MySQL主从复制读写分离及奇怪的问题
  • Netty 4.1 源代码学习:线程模型
  • vue-loader 源码解析系列之 selector
  • 机器学习中为什么要做归一化normalization
  • 马上搞懂 GeoJSON
  • 微信开源mars源码分析1—上层samples分析
  • 我有几个粽子,和一个故事
  • 找一份好的前端工作,起点很重要
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ###C语言程序设计-----C语言学习(6)#
  • #1014 : Trie树
  • #include
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (1)(1.13) SiK无线电高级配置(五)
  • (C++17) std算法之执行策略 execution
  • (Git) gitignore基础使用
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (回溯) LeetCode 78. 子集
  • (转)EOS中账户、钱包和密钥的关系
  • .net 7 上传文件踩坑
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET 动态调用WebService + WSE + UsernameToken
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .net遍历html中全部的中文,ASP.NET中遍历页面的所有button控件
  • .Net各种迷惑命名解释
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET文档生成工具ADB使用图文教程
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • .Net中wcf服务生成及调用
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复