谷歌网络字体在Windows上的Chrome浏览器中呈现出不流畅的情况

52

我在我的网站上使用Google Webfonts服务并且非常依赖它。大多数浏览器都可以正常渲染,但在Windows上的Chrome中渲染效果尤其差。非常不流畅和像素化。

目前我所了解到的是,Chrome要求先加载.svg格式的字体。然而我正在使用的字体叫做Asap,只有.woff格式。我使用了一个免费的在线转换工具将它转换为.svg格式,但当我将其添加到我的样式表中(放在.woff文件之前),它并没有改变任何东西。

我还尝试过:

-webkit-font-smoothing: antialiased;
text-shadow: 0px 0px 0px;
希望其中任意一种方法能让文本渲染更加平滑。目前我已经想不出其他办法了,也不想改变字体。请问有没有人有办法解决这个问题?因为我只有一台苹果电脑,所以一直在使用Adobe Browserlab来测试渲染效果。该网站的链接是:www.symvoli.nl/about。提前谢谢!2013年4月11日编辑:Chrome 35 Beta似乎终于解决了这个问题:enter image description here

5
哦,哇,谢谢你提出这个问题,我以前从未注意到。我的网站上谷歌网络字体看起来也很不流畅。 - Cody Bonney
这个问题只出现在Google webfonts上吗?还是所有的@font-face字体都有这个问题? - Simon East
2
我写了一篇详细的博客文章,包括修复方法:如何解决Google Chrome中丑陋的字体渲染问题,这个问题也在这里被问到过:https://dev59.com/EWgu5IYBdhLWcg3wOUkk。 - Sliq
什么是Chrome 35?现在是2014年4月4日,我还有最新的34版本。我很困惑。 - vsync
Chrome 35 Beta已经发布。该版本增加了开发者控制触摸输入和新的JavaScript API功能。 - Joey
12个回答

66

2014年8月更新

谷歌最终在Chrome 37中本地修复了此问题!但由于历史原因,我不会删除这个答案。

问题

该问题的产生是因为Chrome实际上无法正确抗锯齿渲染TrueType字体。但是,Chrome仍然可以很好地渲染SVG文件。如果您在语法中将对SVG文件的调用命令放在woff文件之前,Chrome将下载SVG并使用它而不是woff文件。您提出的一些技巧确实有效,但仅适用于特定的字体大小。

但是,Chrome开发团队非常熟悉这个错误,并且从2012年7月以来一直在修复中。请参见官方错误报告线程:https://code.google.com/p/chromium/issues/detail?id=137692

2013年10月更新(感谢@Catch22)

显然,一些网站在呈现SVG时可能会遇到断断续续的间距问题。因此,有一个更好的方法来解决它。如果您使用Chrome特定的媒体查询调用SVG,则间距问题将消失:

@media screen and (-webkit-min-device-pixel-ratio:0) {
  @font-face {
      font-family: 'MyWebFont';
      src: url('webfont.svg#svgFontName') format('svg');
  }
}

第一种解决方案:

将Fontspring的弹性语法修改为首先呈现svg:

@font-face {
    font-family: 'MyWebFont';
    src: url('webfont.eot'); 
    src: url('webfont.eot?#iefix') format('embedded-opentype'),
         url('webfont.svg#svgFontName') format('svg'),
         url('webfont.woff') format('woff'),
         url('webfont.ttf')  format('truetype');
}

更多阅读:


6
很遗憾这仍然是一个问题(最后更新于2013年4月24日)https://code.google.com/p/chromium/issues/detail?id=137692#c104 - Jedidja
1
为什么当你从谷歌的 CDN(这是更快和更好的做法)调用时,他们会先发送 True Type 字体而不是 SVG 呢?糟糕的谷歌。 - user1752532
2
Fontspring博客文章已更新,建议使用Chrome特定的媒体查询来避免在使用SVG时出现一些间距问题 - http://www.fontspring.com/blog/smoother-rendering-in-chrome-update - Catch22
这个答案应该被删除,因为Chrome不再支持SVG字体! - sidonaldson
@sidonaldson:我更新了答案,但是即使问题已经解决,也没有理由删除答案。 - Tomas Ramirez Sarduy
显示剩余4条评论

18
-webkit-text-stroke: 0.5px;

只在大文本上使用它,因为它会影响页面性能。


在非 Windows Chrome 上看起来怎么样? - iono

8

4
我尝试了很多解决方案,最终找到可用于新版Chrome的一种方法,而且不需要改变文件顺序:
基本上,我将TTF文件移动到Mozilla特定的部分。
@font-face {
    font-family: 'MyWebFont';
    src: url('webfont.eot'); 
    src: url('webfont.eot?#iefix') format('embedded-opentype'),
         url('webfont.svg#svgFontName') format('svg'),
         url('webfont.woff') format('woff');
}
@-moz-font-face {
    font-family: 'MyWebFont';    
    src: url('webfont.ttf')  format('truetype');
}

2

Tom和font-spring的回答对我来说没有用,不知道为什么。但是Sam Goddard的修复方法有效:

经过自己的试验,我偶然发现了一个看起来相当简单的解决这个问题的方法。似乎Chrome使用@font-face kit中的.svg文件,并且不喜欢被最后调用。以下是使用CSS调用@font-face的标准方法:

// font-face inclusion
@font-face {
  font-family: 'font-name';
                src: url('path-to-font/font-name.eot');
                src: url('path-to-font/font-name.eot?#iefix') format('eot'),
                url('path-to-font/font-name.woff') format('woff'),
                url('path-to-font/font-name.ttf') format('truetype'),
                url('path-to-font/font-name.svg') format('svg');
  font-weight: normal;
  font-style: normal;
}

如上例所示,.svg 文件在调用的 URL 列表中排在最后。如果我们修改代码以针对 WebKit 浏览器,并告诉它们仅使用 .svg 文件。
// Usage
@media screen and (-webkit-min-device-pixel-ratio:0) {
  @font-face {
    font-family: ‘font-name';
    src: url(‘path-to-font/font-name.svg’) format(‘svg’);
    }
}

3
最好提供相关的例子或信息,而不仅仅是提供链接。如果链接失效,你就会得到一个没有实质内容的答案。 - Paul Richter

1

这可能只是你使用的字体在某些大小下无法很好地呈现。我将你的h1标签从3.5em更改为50px,看起来好了一些。这可能不是完美的解决方案,但我注意到许多谷歌网络字体可能是不可预测的。


1
但不幸的是,这并不能解释为什么它在基于OS X的浏览器中完美呈现,而且出乎我的意料,在Internet Explorer中也是如此。但如果有什么问题,我一定会研究这个解决方案,至少试图使其更加平滑。 - Joey
2
Google Chrome使用抗锯齿技术,但是文本看起来比其他浏览器更像素化,因为它只支持水平抗锯齿。 - Keith

0

我在Firefox中进行开发。我的经验是,FF可以很好地显示ttf字体,无需任何额外的规则(除了@font-face调用字体文件的url)。然而,Chrome则不同。即使使用-webkit-font-smoothing: antialiased;规则,它仍然会将任何字体显示得相当粗糙。Safari似乎没有这个问题,所以它并不是Webkit本身不能清晰地呈现字体,而是Chrome的问题。

我还没有尝试添加-webkit-text-stroke: 0.5px;规则,但会尝试。

在上面的答案中,我真的很喜欢Tom Sarduy的答案。除了对问题的良好描述外,他还提供了一个很棒的@font-face堆栈,可用于覆盖所有主要浏览器。


0

0

看起来谷歌可能会根据浏览器和操作系统提供不同的woff文件。

我发现如果我从IE下载字体,与从Mac上的Safari下载相比,它会大约多出10k。对于特定的字体来说,43k对比33k。此外,IE版本在Mac上看起来很好,但是Mac版本在PC上似乎无法正常工作。在PC上,Mac版本在Mozilla Firefox中看起来最糟糕。

试试这个: http://fonts.googleapis.com/css?family=Source+Sans+Pro:400,600,400italic,600italic

SourceSansPro-Regular.woff PC版本27k

SourceSansPro-Regular.woff Apple版本24k


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接