前端引用字体@font-face的若干优化方法

news/2024/7/19 16:33:44 标签: css, js

1 前 言

1.1 场 景

我们在页面展示时,为了更好的效果,一般使用了自定义的字体 @fant-face

之前在开发的时候使用了一些自定义字体,这里总结下自己寻找的的一些处理办法。

本文只列出了引入本地字体,网络的字体由于实践不多,这里介绍就少一些。

? 献丑了 ?

2 正 文

2.1 本地字体

2.1.1 版 权

首先一定要注意这个问题

2.1.2 字体定义

一般情况定义如下:

@font-face {
    font-family:"Regular";
    src:url('../font/Regular.otf');
}

在某个我们要使用的该字体的classA上定义:

.classA {
    font-family:"Regular";
}

2.1.3 字体压缩

一般的中文字体都要8-10M,相对于整个工程来说太巨大,这里提供自己实践过的2种压缩方法。

两种都需要列举出你使用过的字。

1 font-spider

官网:http://font-spider.org/

支持 gulp 构建插件

我在使用时,刚开始一直没压缩成功

之后发现是由于自己下载的字体版本有点低

这里列出一个找到的字体下载网址,觉得不错:https://www.fontke.com/font/

2 Fontmin

官网:http://ecomfe.github.io/fontmin/

这个比较方便的是有一个客户端可以操作

2.1.4 字体加载

虽然有压缩的功能,但必须提供出所有使用过的字体,而且我想的是我的项目中就默认一个好看的字体。

这样就遇到一个问题,在第一次加载的时候,浏览器就会用一些时间来加载这个字体文件。

而在加载完成之前,页面就会空白,也就是FOIT(Flash of Invisible Text)

1 FOUT

FOUT(Flash of Unstyled Text)大意就是在字体加载完成前,浏览器会显示font-family的顺序字体

当加载完成后,才会替换成定义的字体,设置如下:

@font-face {
    ...
    font-display: swap;
    ...
}

这样的效果,就是会在页面中看到的一个字体替换的效果?

2 FontFaceObserver

然后我想的是,有没有什么办法可以判断字体加载完成了呢?

安装:

npm i fontfaceobserver

页面中:

// css 中 @font-face 已定义好
import FontFaceObserver from 'fontfaceobserver'

loadfont(){
    console.time("字体加载用时")
    var ooo = new FontFaceObserver('Regular')
    ooo.load().then(() =>{
        document.getElementById('index').style.fontFamily = 'Regular'
        console.timeEnd("字体加载用时")
    })
},

同时可以加上一个loading的动画,这样效果就比较好了?

2.2 网络字体

2.2.1 引入

webfont:https://www.webfont.com/

找到的一个方式,没有实际用过,不知道效果咋样,有兴趣的可以试试。

3 后 记

感谢支持。若不足之处,欢迎大家指出,共勉。

如果觉得不错,记得 点赞,谢谢大家 ?

欢迎关注 我的: 【Github】 【掘 金】 【简 书】

知识共享许可协议
本文章采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

出处为:https://github.com/xrkffgg/Tools


http://www.niftyadmin.cn/n/1732049.html

相关文章

linux用parted给硬盘分区,使用parted给硬盘分区

8种机械键盘轴体对比本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?首先磁盘的分区方式分为MBR和GPT。而二者有何区别?MBR最早的磁盘分区表都是MBR的全称是Master Boot Record(主引导记录),之所以叫“主引导记…

热式气体质量流量计检定规程_DPC高精度质量流量控制器_热式气体质量流量计进口...

DPC高精度质量流量控制器_热式气体质量流量计进口流量计项目不同,流量计产品结构也是有所不同的。一般流量计产品结构有两种:正式生产线计量系统和工厂自动计量系统;负载系统产品又有半成品和成品,应用时标准测量总和应不少于定额…

linux用户界面实验,linux 用户界面与Shell命令 习题.doc

实训5 用户界面与Shell命令一、实验要求1. 掌握图形化用户界面和字符界面下使用Shell命令的方法。2. 掌握ls、cd等Shell命令的功能。3. 掌握重定向、管道、通配符、历史记录等的使用方法。4. 掌握手工启动图形化用户界面的设置。二、实验内容1. 图形化用户界面下的Shell命令操作…

vue全家桶+Echarts+百度地图,搭建数据可视化系统(【续】接口篇)

接上篇 vue全家桶Echarts百度地图,搭建数据可视化系统 1 前 言 1.1 业务场景 实现数据监控的系统。有线图、柱状图、地图,并具有定时刷新的功能。 1.2 业务分析 上一篇分析的步骤大致有: 系统搭建vue-clivuex记录登录信息vue-router路由跳…

Element-ui 简单实现表格滚动(附演示及源码)

1 前 言 1.1 预览图 1.2 介 绍 功能很简单,不确定方法有没有问题,所以写出来让大家来检查检查1.3 使用技术 VueElement-ui 2 实 现 2.1 查看UI 这里是直接使用 UI 里的表格组件,F12 查看 可以明显看出: 表格头 class"…

python中文开发者社区-python怎么声明中文-问答-阿里云开发者社区-阿里云

一、使用中文字符 在python源码中如果使用了中文字符,运行时会有错误,解决的办法是在源码的开头部分加入字符编码的声明,下面是一个例子: !/usr/bin/env python -- coding: cp936 -- Python Tutorial中指出,python的源…

Canvas图片处理之黑白、反向(附演示及源码)

1 前 言 1.1 预览图 2 实 现 本例使用&#xff1a; Vueelement-ui 2.1 画 图 <!--canvas 定义--> <canvas id"canvas01" width"400" height"400"></canvas>// vue 生命周期 mounted(){this.drawCanvas() },drawCanvas()…

linux+arm+gpu加速,Arm DesignStart加速基于Linux的嵌入式设计 扩展架构至Cortex-A5

描述Arm DesignStart使开发者得以不须承担评估的授权费用&#xff0c;就可透过此计划授权进行先期开发&#xff0c;甚至在藉由此计划完成设计后&#xff0c;可透过特殊模式进行小规模量产用的授权&#xff0c;而DesignStart近期又释放利多&#xff0c;针对需要更高效能的用户&a…