字体文件在控制台上显示为未找到,并且在页面加载时未立即呈现

Posted

技术标签:

【中文标题】字体文件在控制台上显示为未找到,并且在页面加载时未立即呈现【英文标题】:Font files showing as not found on console and not rendering immediately on page load 【发布时间】:2021-04-01 06:23:48 【问题描述】:

我有一个字体文件夹,其中包含字体文件到字体lemonmilk:

我现在有两个问题:

    在检查控制台时,我收到以下 404 错误:/fonts/lemonmilk-medium.woff net::ERR_ABORTED 404 (Not Found) 加载页面时,字体系列不会立即加载,页面加载后会更改为正确的字体。

为了解决问题 2,我尝试添加 font-displayunicode-range,但仍然看到相同的结果。

这是我定义font-face的方式:

$font-families: (
  'lemonmilk-regular': 'lemonmilk-regular',
  'lemonmilk-light': 'lemonmilk-light',
  'lemonmilk-medium': 'lemonmilk-medium',
  'lemonmilk-bold': 'lemonmilk-bold',
);

@each $key, $val in $font-families 
  @font-face 
    font-family: #$key;
    src: url('../fonts/#$val.eot');
    src:  url('../fonts/#$val.eot?#iefix') format('embedded-opentype'),
          url('../fonts/#$val.woff') format('woff'),
          url('../fonts/#$val.woff2') format('woff2'),
          url('../fonts/#$val.ttf') format('truetype'),
          url('../fonts/#$val.svg#sansationregular') format('svg');
    font-style: normal;
    font-display: swap;
    unicode-range: U+00-FF;
  

字体文件存在所以不确定为什么它给我一个 404 错误,我不确定如何进一步优化字体加载速度?

【问题讨论】:

【参考方案1】:

关于 html 文件路径

以下假设基于您的 style.css 文件位于 Wordpress 主题根目录中。

style.css 应该位于主题的根目录而不是 CSS 目录中。 [...]

来源@https://developer.wordpress.org/themes/basics/organizing-theme-files/#theme-folder-and-file-structure

您的问题似乎是因为您要求您的 css 文件在错误的目录中搜索您的字体。

文件路径描述了文件在网站文件夹结构中的位置。

<img src="picture.jpg"> = “picture.jpg”文件与当前页面位于同一文件夹中。 <img src="images/picture.jpg"> = “picture.jpg”文件位于当前文件夹的 images 文件夹中。 <img src="/images/picture.jpg"> = “picture.jpg”文件位于当前网站根目录的 images 文件夹中。 <img src="../picture.jpg"> = “picture.jpg”文件位于当前文件夹的上一级文件夹中。

来源@https://www.w3schools.com/html/html_filepaths.asp

当前您正在尝试在“当前文件夹的上一级文件夹”中查找您的字体文件(第 4 种情况)。您需要在“当前网站的根目录”中查找您的字体(第三种情况)。您可能唯一需要做的就是将双点破折号../ 更改为简单的破折号/

正确的方式 = url('/fonts/#$val.eot');. 错误的方式 = url('../fonts/#$val.eot');.

关于优化网页字体加载和渲染:

1. 浏览器开始解析 HTML 响应并构建 DOM。2. 浏览器发现 CSS、JS 和其他资源并分派请求。 3. 浏览器执行布局并将内容绘制到屏幕上。字体可用后,浏览器会绘制文本像素。(这是正在发生的事情的简明版本)

默认情况下,只有在开始解析 HTML 并找到 css 文件后才会显示字体。我们希望字体与 HTML 同时被解析,为此我们需要将我们的字体加载请求移动到 header.php 中的 <head> 标记中,并要求我们的浏览器使用 <link rel="preload"> 预加载我们的字体。

<link> 元素的 rel 属性的预加载值让您 在 HTML 的<head> 中声明获取请求,指定资源 您的页面将很快需要,您希望尽早开始加载 在页面生命周期中,在浏览器的主要渲染机制启动之前 in. 这确保它们更早可用并且不太可能 阻止页面的渲染,提高性能。

来源@https://developer.mozilla.org/en-US/docs/Web/HTML/Preloading_content

最后,我强烈推荐使用 CDN,也许还可以使用像 Google Fonts 这样的字体库。简而言之,Google Fonts 通过将字体保存在用户的浏览器中,让网站可以在任何和所有使用 Google Fonts 的网站上交叉共享字体(数百万)。

如果用户使用托管在Google Fonts 上的名为font 1 的字体访问名为website 1 的网站,该用户将自动下载并存储它。使用 Google 字体中的 font 1 访问 website 2 后,字体加载将是即时的。

【讨论】:

以上是关于字体文件在控制台上显示为未找到,并且在页面加载时未立即呈现的主要内容,如果未能解决你的问题,请参考以下文章

java运行结果是一个list,打印在控制台上,怎么把它显示在一个jsp页面

“[仅报告] 拒绝加载字体...”控制台上的错误消息

Unicode / UTF-8文本文件:Windows控制台上的乱码(试图显示希伯来语)

从云存储桶加载数据时未找到数据集错误

PDF uiwebview 加载时未显示活动指示器

在 AWS Amplify 控制台上部署为 SPA 后,Nuxtjs 动态路由在页面重新加载时不起作用