包括谷歌字体链接或导入?

Posted

技术标签:

【中文标题】包括谷歌字体链接或导入?【英文标题】:Including Google Fonts link or import? 【发布时间】:2012-09-01 05:49:23 【问题描述】:

在页面上包含 Google 字体的首选方式是什么?

    通过<link> 标签
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link href="https://fonts.googleapis.com/css2?family=Judson:ital,wght@0,400;0,700;1,400&display=swap" rel="stylesheet">
    
    通过样式表中的导入
    @import url('https://fonts.googleapis.com/css2?family=Kameron:wght@400;700&display=swap');
    
    使用Web Font Loader

【问题讨论】:

在使用谷歌字体之前,您可能还想阅读this question。取决于具体的项目——它可能并不总是明智的选择。 @ObmerkKronen 获取链接 为什么我们需要预连接链接?我在没有预连接链接的情况下尝试了这个,效果很好 【参考方案1】:

对于 90% 以上的情况,您可能需要&lt;link&gt; 标签。根据经验,您要避免使用@import 规则,因为它们会延迟加载包含的资源,直到获取文件为止。如果您有一个“扁平化”@import 的构建过程,那么您会产生另一个问题使用网络字体:Google WebFonts 等动态提供程序提供特定于平台的字体版本,因此如果您只是内联内容,那么您最终会在某些平台上使用损坏的字体。

现在,您为什么要使用网络字体加载器?如果您需要完全控制字体的加载方式。大多数浏览器会将内容绘制到屏幕上,直到下载并应用所有 CSS - 这避免了“无样式内容的闪烁”问题。缺点是……在内容可见之前,您可能会有额外的暂停和延迟。使用 JS 加载器,您可以定义字体可见的方式和时间。例如,您甚至可以在将原始内容绘制到屏幕上后淡入它们。

再一次,90% 的情况是 &lt;link&gt; 标签:使用好的 CDN,字体会很快下降,甚至更有可能从缓存中取出。

如需了解更多信息并深入了解 Google 网络字体,请查看GDL video

【讨论】:

“因为他们推迟加载包含的资源,直到获取文件”——这不是使用 @import 的好理由吗?因为通常在字体加载之前你不想看到内容(以避免字体闪烁) Web Fonts API 在使用 html5 Canvas 时非常有用。在使用它绘制文本之前,您不能使用尚未完成加载的字体,当然,一旦加载了字体,它就不会自动更新。相关地,需要 API 来跟踪加载资产的进度,例如在游戏中。 此信息应该在 Google Web Fonts 页面上。它只是向您展示了三个选项 - 并没有提供任何有用的提示来说明使用哪一个以及何时使用。 Google 自己的 'Getting Started' 教程只使用了 &lt;link&gt; 方法,所以我猜这是他们以一种不言而喻的方式推荐的方法 您可能还想将rel="preload" 添加到&lt;link&gt; 标记中,因为这样字体将在文本出现之前加载。见3perf.com/blog/link-rels【参考方案2】:

使用谷歌提供的&lt;link&gt;,因为字体有版本控制,但在它上面使用 HTML5 的预连接功能要求浏览器打开 TCP 连接并提前与 fonts.gstatic.com 协商 SSL。这是一个示例,它显然需要驻留在您的 &lt;head&gt;&lt;/head&gt; 标记中:

<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin>
<link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet">

【讨论】:

预连接与您示例中的样式表链接是完全不同的域是否正确? fonts.gstatic.comfonts.googleapis.com @BadHorsie 这就是重点。 fonts.googleapis.com 上的样式表有一个指向 fonts.gstatic.com 上资源的链接。您是在告诉浏览器启动与后一个主机的连接,以便在它在样式表中找到链接时已经连接或开始连接。【参考方案3】:

如果您关心 SEO(搜索引擎优化)和性能,最好使用 &lt;link&gt; 标签,因为它可以预加载字体。

例子:

<link rel="preconnect" href="https://fonts.gstatic.com/" crossorigin>
<link rel="preload" href="https://fonts.gstatic.com/s/quicksand/v7/6xKtdSZaM9iE8KbpRA_hK1QNYuDyPw.woff2" as="font" crossorigin>
<link rel="preload" href="https://fonts.gstatic.com/s/lato/v14/S6uyw4BMUTPHjx4wXiWtFCc.woff2" as="font" crossorigin>
<style>
@font-face 
 font-family: 'Lato';
 font-style: normal;
 font-weight: 400;
 src: local('Lato Regular'), local('Lato-Regular'), url(https://fonts.gstatic.com/s/lato/v14/S6uyw4BMUTPHjx4wXiWtFCc.woff2) format('woff2');
 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;

@font-face 
 font-family: 'Quicksand';
 font-style: normal;
 font-weight: 400;
 src: local('Quicksand Regular'), local('Quicksand-Regular'), url(https://fonts.gstatic.com/s/quicksand/v7/6xKtdSZaM9iE8KbpRA_hK1QNYuDyPw.woff2) format('woff2');
 unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;

</style>

有关更多信息,请阅读以下内容: https://ashton.codes/preload-google-fonts-using-resource-hints/

【讨论】:

【参考方案4】:

我了解其他答案的建议是在 html 文件中使用 &lt;link&gt;

我最近意识到有一个用例可以让我在 css 文件中使用 @import

原因很简单:我正在为我的业余项目制作静态网站,我更看重便捷方式而不是 SEO 或与稀有平台的兼容性等。

在 css 文件中使用 @import 的好处是,如果我想更改字体,我需要做的就是在 css 文件中修改几行。就这样,故事结束。如果我在html文件中使用&lt;link&gt;,除了更改css文件中的字体外,我还要更新和上传所有html文件,有点不方便。

长话短说:@import 在 css 文件中是自包含的,所以更新方便。它对于测试和尝试不同的字体特别有用。

【讨论】:

以上是关于包括谷歌字体链接或导入?的主要内容,如果未能解决你的问题,请参考以下文章

延迟加载谷歌字体类型

关于谷歌浏览器默认字体12px的解决方案

如何在 Nuxt 中高效加载谷歌字体

css 大首字母,圆角,导入谷歌字体

添加谷歌字体api来选择菜单

扒取网页的mp3资源