返回顶部
首页 > 资讯 > 精选 >CSS中如何优化@font-face性能
  • 756
分享到

CSS中如何优化@font-face性能

2023-06-08 06:06:57 756人浏览 薄情痞子
摘要

今天就跟大家聊聊有关CSS中如何优化@font-face性能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、 font-face基本用法font-face的基本用法想必大家都是知道

今天就跟大家聊聊有关CSS中如何优化@font-face性能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

一、 font-face基本用法

font-face的基本用法想必大家都是知道的,基本上就是类似这样:

@font-face {font-family: Lato;src: url('font-lato/lato-regular-WEBfont.woff2') fORMat('woff2'), url('font-lato/lato-regular-webfont.woff') format('woff'), url(font-lato/lato-regular-webfont.ttf) format("opentype");}p { font-family: Lato, serif; }

这样就可以使我们的网页用上自定义字体了。 除了font-family 和 src属性之外,还拥有font-style以及font-weight属性。 src可以指定多种字体,会按顺序依次适用,比如上面的示例中会先加载woff2字体,如果失败再加载woff字体,否则加载opentype字体。 src所支持的字体可以有以下类型:

CSS中如何优化@font-face性能

src参数带不带引号都可以,参数的格式不同含义也不尽相同,比如下面:

src: url(fonts/simple.woff);       src: url(/fonts/simple.woff);      src: url(fonts/coll.otC#foo);      src: url(fonts/coll.woff2#foo);    src: url(fonts.svg#simple);        

src中加载的字体地址受跨域的约束,如果想跨域加载字体,需要设置CORS。

这就是font-face的最基础的用法。 接下来我们会进一步分析font-face的用法,并尽可能的找出优化策略。

二、 什么时候会下载字体?

上面讲了字体的基本知识,那你有没有想过,字体是在什么时候下载的呢?当我们仅仅在CSS中定义如下样式的时候, 页面加载,字体会自动下载吗?

@font-face {font-family: Lato;src: url('font-lato/lato-regular-webfont.woff2') format('woff2'), url('font-lato/lato-regular-webfont.woff') format('woff'), url(font-lato/lato-regular-webfont.ttf) format("opentype");}

很遗憾,字体并不会下载。 通常情况 下,只有当我们的页面元素用到了font-face中定义的字体的情况下,才会下载对应的字体。

注意: 这里我们说了是通常情况,这是因为,IE8在只要是定义了font-face,即使页面元素没有使用对应的字体,也会下载。

在其它浏览器中也不尽相同,

比如在 FirefoxIE 9+ 中,遇到如下情况也会下载字体:

html

<div id="test"></div>

css

#test {font-family: Lato;}

有什么特别之处呢? 你可能注意到了,这个元素虽然使用到了font-family: Lato样式,但是这个元素并没有任何文本啊!!!。 按照我们的理想情况,应该是,只有有文字内容才会去下载字体嘛。 而这就是Chrome, Safari (WebKit/Blink 等)浏览器的行为。

Chrome, Safari (WebKit/Blink 等)浏览器只有在如下类似情况才会去下载字体:

html

<div id="test">这里是有文本的哦</div>

css

#test {font-family: Lato;}

所以总结一下,不同浏览器下载字体的策略:

  • IE8 只要定义了font-face,就会去下载字体,不论实际有没有应用该字体。

  • Firefox, IE 9+ 只有定义了font-face 并且页面有元素应用了该字体,就会去下载,不论该元素是否有文本内容。

  • Chrome, Safari 只有定义了font-face 并且页面有元素应用了该字体,并且该元素有文本内容,才会去下载字体。

那你可能会问了,如果我们的DOM元素是通过动态插入的呢?比如:

var el = document.createElement('div');el.style.fontFamily = 'open_sansregular';document.body.appendChild(el);el.innerHTML = 'Content.';

答案是一样的,它的下载策略如下:

var el = document.createElement('div');el.style.fontFamily = 'open_sansregular';document.body.appendChild(el);el.innerHTML = 'Content.';

三、 FOIT(Flash of Invisible Text)

FOIT是浏览器在加载字体的时候的默认表现形式,也就是在字体加载过程中,页面是看不到文本内容的。在现代浏览器中,FOIT会导致这种现象出现至多3秒。FOIT会导致很差的用户体验,这是我们需要尽量去避免的。

四、 FOUT(Flash of Unstyled Text) 与 font-display属性

FOUT意思是在字体加载过程中使用默认的系统字体,字体加载完后显示加载的字体,如果超过了FOIT(3s)字体还没加载,则继续使用默认的系统字体。

IE浏览器和Edge不会等待FOIT超时才显示默认字体,会立即显示默认字体。FOUT比FOIT好,但是需要注意它引起的reflow.

那么要想使浏览器有FOUT行为,我们需要在设置@font-face的时候给它加一个属性:font-display。 font-display默认是auto, 可选属性与含义如下:

  • auto. The font display policy is user-agent-defined.

  • block. Gives the font face a short block period (3s is recommended in most cases) and an infinite swap period.

  • swap. Gives the font face an extremely small block period (100ms or less is recommended in most cases) and an infinite swap period.

  • fallback. Gives the font face an extremely small block period (100ms or less is recommended in most cases) and a short swap period (3s is recommended in most cases).

  • optional. Gives the font face an extremely small block period (100ms or less is recommended in most cases) and a 0s swap period.

一般设置成fallback和optional即可。

五、 preload

在页面加入下面这个代码以便更快的加载字体:

<link rel="preload" href="font.woff2" as="font" type="font/woff2" crossorigin>

通常和最基本的字体用法配合使用

六、 字体转 BASE64URI

这种方法就是将@font-face中定义字体时的路径直接改为字体的base64编码。

优点: 这种做法的优点是不会产生FOIT和FOUT。所以也不会有reflow和repaint. 缺点: 字体转成base64也会很大,会影响页面首次加载速度。不支持逗号分隔的形式加载多种格式的字体,只能加载一种格式字体。这导致你为了尽可能保证所有浏览器都可以兼容,通常会指定为woff格式,因为woff格式兼容性好,但是却没法使用更小体积的woff2格式,因为woff2格式兼容性差点。

七、异步加载BASE64格式URI字体

这种方法就是通过异步的方式插入带有BASE64格式URI字体的CSS链接。

八、使用Font Load API + FOUT + class切换

这种方式是期初并不使用用到@font-face的class,然后用Font Load api加载我们想用的字体,然后切换相应的CSS即可。Font Load API是原生的API:

document.fonts.load('1em open_sansregular').then(function() {var docEl = document.documentElement;docEl.className += ' open-sans-loaded';});.open-sans-loaded h2 {font-family: open_sansregular;}

当然这种方法需要考虑浏览器兼容性的问题。

九、 FOFT(Flash of Faux Text)

FOFT会把字体的加载分成多个部分,首先加载罗马网络字体,然后会在加载真实的粗体和斜体的时候立即使用font-synthesis属性渲染粗体和斜体的变体。

这种方法是基于[ 使用Font Load API + FOUT + class切换 ]这种方式的,非常适合加载同一种字体但是不同粗细,字形的场景,比如罗马、粗体、斜体、粗斜体等。我们将这些字体分成2阶段: 第一阶段是罗马字体,然后立即渲染人造粗体和斜体,最后(第二阶段)用真实字体替代。这里面还可以使用sessionStorage优化访问重复视图的场景。

十、CRITICAL FOFT

CRITICAL FOFT和标准的FOFI的唯一区别就在于第一阶段罗马字体的加载,CRITICAL FOFT不会加载罗马字体的全集,只会加载它的一个子集(比如A-Za-z0-9),全集会在第二阶段加载。

十一、CRITICAL FOFT WITH DATA URI

这个和CRITICAL FOFT的唯一区别就是罗马子集字体的加载方式,前面是用Font Load API完成了,这里会将马子集字体硬编码成BASE64 URI的形式加载。

看完上述内容,你们对CSS中如何优化@font-face性能有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: CSS中如何优化@font-face性能

本文链接: https://lsjlt.com/news/252512.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • CSS中如何优化@font-face性能
    今天就跟大家聊聊有关CSS中如何优化@font-face性能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、 font-face基本用法font-face的基本用法想必大家都是知道...
    99+
    2023-06-08
  • css中的@font-face属性怎么用
    小编给大家分享一下css中的@font-face属性怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!   css@font-face属性   指定名为"myFirstFo...
    99+
    2024-04-02
  • 如何使用CSS3@font-face属性
    本篇内容介绍了“如何使用CSS3@font-face属性”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!代码...
    99+
    2024-04-02
  • CSS 粗体属性优化技巧:font-weight 和 font-style
    在使用 CSS 进行网页设计时,我们经常会用到字体的粗体效果来突出显示重要的文字内容。这种效果可以通过 CSS 中的 font-weight 属性来实现。另外,使用 font-style 属性还可以为文字添加斜体效果。在本文中,我们将探讨一...
    99+
    2023-10-21
    CSS 优化技巧 粗体属性
  • 如何通过CSS的@font-face属性实现在网页中嵌入任意字体
    本文小编为大家详细介绍“如何通过CSS的@font-face属性实现在网页中嵌入任意字体”,内容详细,步骤清晰,细节处理妥当,希望这篇“如何通过CSS的@font-face属性实现在网页中嵌入任意字体”文章能帮助大家解决疑惑,下面跟着小编的...
    99+
    2023-06-26
  • CSS如何在项目里引入自定义字体@font-face
    这篇文章将为大家详细讲解有关CSS如何在项目里引入自定义字体@font-face,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 添加自定义字体:  ①:首先需要下载所...
    99+
    2024-04-02
  • CSS中如何使用font-size属性
    CSS中如何使用font-size属性,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。CSS属性font-size详解CSS的字体样式设置相...
    99+
    2024-04-02
  • css中如何使用font-style属性
    这篇文章给大家分享的是有关css中如何使用font-style属性的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 font-style 属性最经常使用于划定规矩斜体文本。 该...
    99+
    2024-04-02
  • css如何优化并提高性能
    小编给大家分享一下css如何优化并提高性能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!方法:1、压缩css,减少文件体积;2、使用link引入css文件;3、合理设计CSS布局,注意复用样式,减少渲染上花的时间;4、少用...
    99+
    2023-06-14
  • CSS3中如何使用@Font-Face实现定制字体
    这篇文章给大家分享的是有关CSS3中如何使用@Font-Face实现定制字体的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。使用 @Font-Face 实现定制字体  Web 设计...
    99+
    2024-04-02
  • 如何在css3中使用font-face自定义字体
    今天就跟大家聊聊有关如何在css3中使用font-face自定义字体,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。代码如下:@font-face { font-f...
    99+
    2023-06-09
  • CSS3中如何引入多种自定义字体font-face
    这篇文章主要介绍了CSS3中如何引入多种自定义字体font-face,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。今天在HTML中发现了一个问题,提供给我们默认的字体有很多,...
    99+
    2023-06-08
  • Java 中如何优化 load 性能?
    在 Java 程序中,我们经常需要从磁盘或网络中读取数据。在这种情况下,load 操作的性能是非常关键的,因为它直接影响了整个程序的运行效率。本文将介绍一些优化 load 性能的技巧,帮助你提高程序的性能表现。 使用缓存 缓存是提高 ...
    99+
    2023-10-15
    load spring 编程算法
  • Golang 技术性能优化中如何整合性能优化工具?
    Golang 技术性能优化中整合性能优化工具 在 Golang 应用中,性能优化至关重要,而借助性能优化工具可以极大地提升此过程的效率。本文将指导您逐步整合流行的性能优化工具,以帮助您...
    99+
    2024-05-12
    golang 性能优化 git
  • css中如何解决引入指定字体@font-face兼容各浏览器的问题
    这篇文章将为大家详细讲解有关css中如何解决引入指定字体@font-face兼容各浏览器的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。网页制作中,如果想使用特定的字体可以通过 @font-face ...
    99+
    2023-06-08
  • 如何优化MYSQL性能
    本篇文章给大家分享的是有关如何优化MYSQL性能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  1. MySQL性能优化简介  在Web应用...
    99+
    2024-04-02
  • mpvue如何优化性能
    这篇文章主要介绍了mpvue如何优化性能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先上个优化前后的图:可以看到打包后的代码量从813KB...
    99+
    2024-04-02
  • MySQL如何优化性能
    本文小编为大家详细介绍“MySQL如何优化性能”,内容详细,步骤清晰,细节处理妥当,希望这篇“MySQL如何优化性能”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。- MySQL服...
    99+
    2024-04-02
  • 如何优化Hibernate性能
    这篇文章主要介绍“如何优化Hibernate性能”,在日常操作中,相信很多人在如何优化Hibernate性能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何优化Hibernate性能”的疑惑有所帮助!接下来...
    99+
    2023-06-17
  • win101909性能如何优化
    这篇文章主要介绍了win101909性能如何优化的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇win101909性能如何优化文章都会有所收获,下面我们一起来看看吧。一、加速开机速度 【Win】+【R】打开【运行...
    99+
    2023-07-01
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作