强制Chrome在CSS中使用外部字体

Dom*_*mon 6 css fonts google-chrome google-webfonts

我花了很长时间才弄明白,Chrome总是喜欢本地安装的字体,而不是在css中链接的同名字体(另请参阅/sf/answers/1939307611/).我的问题是如何弄清楚,迫使Chrome不这样做.

在我的页面https://www.amon.cc/我使用来自Google字体的"Roboto Light"(https://fonts.google.com/specimen/Roboto),如下所示:

<link href="//fonts.googleapis.com/css?family=Roboto:300" rel="stylesheet" type="text/css" />
Run Code Online (Sandbox Code Playgroud)

在我的CSS文件中,字体声明如下:

body{
  ...
  font-family:Roboto,...;
  font-weight:300;
 ....
}
Run Code Online (Sandbox Code Playgroud)

在FF,IE,Edge中完美无缺:

FF,IE,Edge中的字体

但Chrome中的字体总是更厚:

Chrome中的字体,带有本地安装的字体

原因:在我的私人Windows 10和商业计算机上,Windows上预先安装了"Roboto"字体:Robot Regular,Robot Condensed.但是没有Roboto Thin或Robot Light,所以Chrome似乎对Roboto Regular有所回落.

从Windows中删除Robot字体集时,Chrome使用声明的Web字体并以我想要的方式显示它.我无法弄清楚,如何"强制"Chrome不使用本地安装,而是使用CDN上的.

但是,Chrome 可以https://fonts.google.com/specimen/Roboto网站上显示所有不同版本的Roboto字体(即使使用我本地安装的Robot字体).我无法找到如何做到这一点的技巧.

Al *_* ѫ 6

您可以在 CSS 中重命名字体并仍然使用远处的 woff 文件。例如:

@font-face {
  font-family: 'RobotoBis';
  font-style: normal;
  font-weight: 300;
  src: local('Roboto Light'), local('Roboto-Light'), url(http://fonts.gstatic.com/s/roboto/v15/Pru33qjShpZSmG3z6VYwnRJtnKITppOI_IvcXXDNrsc.woff2) format('woff2');
  unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF;
}


@font-face {
  font-family: 'RobotoBis';
  font-style: normal;
  font-weight: 300;
  src: local('Roboto Light'), local('Roboto-Light'), url(http://fonts.gstatic.com/s/roboto/v15/Hgo13k-tfSpn0qi1SFdUfVtXRa8TVwTICgirnJhmVJw.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000;
}
h1 {
  font-family: RobotoBis;
}
Run Code Online (Sandbox Code Playgroud)
<h1>Hello world !</h1>
Run Code Online (Sandbox Code Playgroud)

但这种方法的阴暗面是 Google 可以在未来更改字体 URL(这主要是可能的)。因此,托管您自己的字体文件以避免此问题。

当然,它只能应用于您拥有的网站以及您可以自定义 CSS 的网站...

  • 有趣的做法!感谢您指出 Google 可能更改 url 的问题。在我的情况下,“Roboto”在 Apache 许可下,所以我可以自己进行托管(我可能会这样做)并且根本不会使用谷歌网络字体。我检查了它为什么在 Google Web Fonts 页面上工作。字体名称不是“Roboto”,而是“Roboto script=all rev=1”(字体系列:“Roboto script=all rev=1”、“Adobe Blank”)。我想它可以像在本地重命名字体一样完成。 (3认同)