Google 字体无法在 Google Chrome 上呈现

Posted

技术标签:

【中文标题】Google 字体无法在 Google Chrome 上呈现【英文标题】:Google Fonts are not rendering on Google Chrome 【发布时间】:2014-03-27 11:53:37 【问题描述】:

我正在构建一个新的 WordPress 主题(不知道这是否相关),这个问题一直困扰着我。

我已经从 Google Webfonts 加载了 Roboto Slab(包括 <head> 部分中的 CSS)。在所有其他浏览器上,字体都呈现正常,除了谷歌浏览器。当我第一次在 Google Chrome 中加载网站时,根本不会显示使用该自定义字体的文本(即使字体堆栈也将格鲁吉亚作为后备 - "Roboto Slab", Georgia, serif;)。在我悬停样式链接后,或在 Inspector 中重新触发任何 CSS 属性 - 文本变得可见。

自从我前段时间开始使用该主题以来,我清楚地记得它之前运行良好。这是最近已知的 Chrome 更新错误吗?

首次加载

在我重新应用任何 CSS 属性后,进入响应式视图或悬停元素

有人有类似的问题吗?我应该如何处理?

谢谢!

【问题讨论】:

您是否检查过页面加载时间线,您的字体是否被正确获取? 你试过缓存刷新吗? (ctrl+f5) 如果您没有在字体链接中添加“http://”,有时也会发生这种情况。 嘿,是的,字体提取正常。 CTRL+F5 没有帮助,因为我在几个不同的桌面上检查过它。现在,我已经设法通过在应该应用此字体的元素上绑定自定义 jQuery redraw() 函数来解决这个问题。它可以工作,但我仍然想知道为什么没有像这样的黑客它就不能工作。 人们还在遇到这个问题吗?我曾经使用过,但似乎 Google 已修复它? 这个问题是否也适用于 android 设备上的 Chrome? 【参考方案1】:

显然是known Chrome bug。有一个纯 CSS 的解决方法可以解决这个问题:

body 
    -webkit-animation-delay: 0.1s;
    -webkit-animation-name: fontfix;
    -webkit-animation-duration: 0.1s;
    -webkit-animation-iteration-count: 1;
    -webkit-animation-timing-function: linear;


@-webkit-keyframes fontfix 
    from  opacity: 1; 
    to    opacity: 1; 

似乎只需要告诉 Chrome 重新绘制文本

【讨论】:

其实这样完美解决了问题!非常感谢! 我最近的网络项目遇到了这个问题,这让我发疯了,非常感谢! 嗯,错误论坛中的其他人能够使用 jquery 使其工作(但我无法): jQuery('body') .delay(500) .queue( function( next) jQuery(this).css('padding-right', '1px'); ); 这一直困扰着我! 这很完美。对我来说,这个 CSS 是 javascript 解决方法的更好替代方案。但是,如果这对您不起作用,请尝试 jQuery(function() jQuery('body').hide().show(); );【参考方案2】:

如果 css 修复对您不起作用

如果first rated post 不起作用,这里有一个解决方案:

删除以下中的“http:”:

<link href='http://fonts.googleapis.com/css?family=Alfa+Slab+One' rel='stylesheet' type='text/css'> 

@import url(http://fonts.googleapis.com/css?family=Alfa+Slab+One);

正如David Bain 所解释的,大多数现代浏览器实际上并不要求您指定协议,它们会根据您调用它的上下文“推断”协议

【讨论】:

这个。所有这些 sill JS 和 CSS hack,你需要做的就是删除“http:” 同样从未有过,仍然是问题。 只有当您的网站运行 https 时,这才是一个有效的答案,因为您试图从浏览器不允许的 http 资源中提取。【参考方案3】:

CSS 修复对我不起作用,而且 0.5 秒延迟脚本似乎很尴尬。

这个 JS sn-p 似乎对我们有用:

<script type="text/javascript">
jQuery(function($) 
    if (/chrom(e|ium)/.test(navigator.userAgent.toLowerCase())) 
        $('body').css('opacity', '1.0') 
    
)
</script>

【讨论】:

这只是间歇性地为我修复它,希望我能收回我的投票。 @KarlGlaser 你可以。再次单击“向上”以恢复为中性。 (点击“down”跳过投票)。 @OJFord 过了宽限期就得编辑【参考方案4】:

单独尝试了上面的css修复,但没有成功。最后通过创建包含以下内容的样式表(chrome.css)解决:

body 
 -webkit-animation-delay: 0.1s;
 -webkit-animation-name: fontfix;
 -webkit-animation-duration: 0.1s;
 -webkit-animation-iteration-count: 1;
 -webkit-animation-timing-function: linear;


@@-webkit-keyframes fontfix 
 from  opacity: 1; 
 to    opacity: 1; 

并在页面底部使用 jquery 加载它:

<script type="text/javascript">
   $(document).ready(function () 
      $('head').append('<link href="/chrome.css" rel="stylesheet" />');
   );
</script>

【讨论】:

尽管它的评分低于公认的答案,但这个解决方案是唯一对我有用的解决方案。 这给出了一个错误:GET https://&lt;insert domain name here&gt;/chrome.css net::ERR_ABORTED 404 Javascript 代码修复了渲染问题!【参考方案5】:

我已经合并了上面的 CSS ...但我还在我的标题中包含了以下 javascript:

(注意,我知道我没有在下面的代码中自定义字体。但无论如何,它似乎仍然有助于强制 Chrome 重新绘制页面上的字体......只要确保你的字体在其他地方被正确引用)

将上面提到的 CSS 与我的...中包含的以下代码结合使用,最坏的情况是,我页面上的所有字体都会在延迟一秒左右后显示出来。

希望这对人们有所帮助。干杯。

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script type="text/javascript" charset="utf-8">

 $(function()  $('body').hide().show(); );
</script>


<script type="text/javascript">

//JavaScript goes here


WebFontConfig = 
  google:  families: ['FontOne', 'FontTwo'] ,
    fontinactive: function (fontFamily, fontDescription) 
   //Something went wrong! Let's load our local fonts.
    WebFontConfig = 
      custom:  families: ['FontOne', 'FontTwo'],
      urls: ['font-one.css', 'font-two.css']
    
  ;
  loadFonts();
  
;

function loadFonts() 
  var wf = document.createElement('script');
  wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
    '://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
  wf.type = 'text/javascript';
  wf.async = 'true';
  var s = document.getElementsByTagName('script')[0];
  s.parentNode.insertBefore(wf, s);


(function () 
  //Once document is ready, load the fonts.
  loadFonts();
  )();

</script>

这是我找到上述内容的地方: https://productforums.google.com/forum/#!topic/chrome/tYHSqc-fqso

【讨论】:

【参考方案6】:

我使用 JS 解决方案修复了它,但还需要使用最新的 google 托管 jquery (1.11) 来修复它。

【讨论】:

【参考方案7】:

我刚刚遇到了同样的问题。我是由于here 所述的 HTTP/S 协议不匹配造成的。

使用 https 版本的 URL。

【讨论】:

【参考方案8】:

查看类似问题Strange Issue while Google Font Rendering。

解决方案是从 Mozilla CDN 而不是 Google CDN 加载所需的字体(我的情况是“Fira Sans”)。

【讨论】:

【参考方案9】:

这不是一个实际的解决方案,但它对我来说比这个线程中的其他所有东西都好。我改变了字体。我有 Fira Sans,现在只是改为 Roboto,它可以开箱即用。

【讨论】:

【参考方案10】:

我刚刚从我的 Windows 字体中删除了roboto字体,现在一切正常。

这可能是因为您的系统上有旧版本的字体。我猜。

【讨论】:

【参考方案11】:

我正在尝试使用 Meg 的答案,但和许多其他人一样,它对我也不起作用。

为了使用谷歌字体,发现了这个技巧[为步骤添加屏幕截图]。

1) 只需从突出显示的 css 或标准链接中获取 url。

2) 在另一个选项卡中打开链接,将整个 css 代码(即字体)复制到您的 css 文件中并运行。

不确定性能,因为添加了许多 http 调用,或者只是尝试复制一种字体。

第 1 步的图片

第 2 步的图片

【讨论】:

【参考方案12】:

元素可能设置了text-rendering: optimizeLegibility,这可能会导致此问题或类似问题。将其更改为 auto 为我解决了这个问题,Foundation 5 项目默认将其设置为 optimizeLegibility

【讨论】:

【参考方案13】:

如果有人仍在努力解决这个问题(2019 年),Google 字体 CSS 生成器脚本中似乎存在错误。

我用以下标签加载了我的字体:

<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:400,300">

文件中的每个@font-face 都包含这样的一行:

src: local('Roboto'), local('Roboto-Regular'), local('sans-serif'), url(https://fonts.gstatic.com/s/roboto/v19/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2) format('woff2');

如您所见,local('sans-serif') 放在远程 URL 之前,这是错误的。这会导致 Chrome 加载默认的无衬线字体而不是请求的字体。

一个简单的解决方法是将 URL 的 font-weight 部分重新排序,从 Roboto:400,300Roboto:300,400。这会导致生成器不包含local('sans-serif') 源。

希望对某人有所帮助。

【讨论】:

【参考方案14】:

我只是分享对我有用的方法。您的结果可能会有所不同。

我有 main.css 和多个字体的 @import,由 |(管道)字符分隔。这一直工作到今天。我将所有谷歌字体导入保存在主 CSS 文件中,因为我没有那么多。今天我添加了一个在 Chrome 或 Firefox 中根本不会呈现的内容。我尝试了不同的字体 - 同样的问题。

最后,我在另一个 CSS 文件中创建了一个单独的 @import,该文件会为网站上的多个页面加载(例如,我们称之为 navbar_pages.css) - 这个 CSS 通过 &lt;link rel="stylesheet" type="text/css" href="/css/navbar_pages.css"&gt; 包含在相关页面中,就像main.css 一样。

出于某种原因,将 @import 放在单独的 CSS 文件中解决了这个问题。

怀疑这是由于在单个@import 调用中可以调用的字体数量受到限制。应该做更多的测试来确定原因,但现在有我的解决方法。如果有人有见解,请发表评论。

【讨论】:

【参考方案15】:

它可能不是灵丹妙药,但可以通过将 fontawesome css 链接移动到我们页面底部以及上面列出的 weblike 修复来解决我们网站上的问题。

【讨论】:

【参考方案16】:

如果在您尝试此处所有出色的解决方案之前人们仍然遇到此问题,请尝试在您的 css 中使用 !important 标记以查看是否可以解决它,就像它对我所做的那样,我不确定该错误是否是与旧的 Chrome 错误相同。

.faultyText "Roboto Slab", Georgia, serif !important

【讨论】:

【参考方案17】:

我制作的结帐插件:https://chrome.google.com/webstore/detail/fontfix/ekgfbmjaehhpbakdbpfmlepngjkaalok

它使用纯 javascript 重新对齐网络,这会强制浏览器重绘整个页面。

【讨论】:

我们希望修复是全球性的,不仅适用于安装自定义插件的用户。

以上是关于Google 字体无法在 Google Chrome 上呈现的主要内容,如果未能解决你的问题,请参考以下文章

chrom浏览器设置不了小于12px的文字大小的解决方法

用于颤振的 Google 字体包无法在发布模式下加载字体

Google 字体无法在 Google Chrome 上呈现

使用 TailwindCSS 时,Google 字体无法在移动设备上呈现

无法使用样式化组件和 Next.js 导入 Google 字体

从 Google 字体导入字体并将其添加到 CreateGlobalStyle 无法正常工作