代码之家  ›  专栏  ›  技术社区  ›  dee

如果在Windows 7+10上本地安装了Google web字体“Open Sans”,则该字体的粗细不正确

  •  3
  • dee  · 技术社区  · 8 年前

    我正在使用“Open Sans”,如下所示:

    <script src="https://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js"></script>
    <script>
    WebFont.load({
    google: {
      families: ['Open+Sans:400,400italic,600,600italic,700,700italic:latin']
    }
    });
    </script>
    

    除了我的两台装有最新“Chrome浏览器”的电脑(一台装有“Windows 7”,另一台装有”Windows 10”)之外,所有的浏览器都能正常工作,600和700的宽度没有差别。有了最新的“Edge”和“Firefox”浏览器,一切都很好。

    我发现,两台机器上的“Open Sans”都是本地安装的。我自己在“Windows 7”电脑和“Windows 10”电脑上已经预装了它。卸载两台电脑上的本地字体后,一切都正常。

    这是某种铬臭虫吗? 在网上找不到有关它的任何信息。

    此外,如果其他用户在其“Windows 10”PC上本地预装了“Open Sans”,那么我正在开发的网站将在Chrome浏览器上显示“Open Sans”字体的错误权重。这可以避免吗?

    PS1.在我的css中没有使用任何“src:local(…”声明

    PS2.不通过@font-face导入字体,而是使用webfont。js来处理所有

    这里有一把小提琴:
    https://jsfiddle.net/x75h2624
    正如您在win10/chrome Open Sans 600+700上看到的那样(两者都是普通的,不是斜体的),完全相同。在win10 firefox、win10 edge、iOS chrome等上……一切正常!

    PS3.刚刚找到这个
    https://bugs.chromium.org/p/chromium/issues/detail?id=335050
    也张贴在那里 自2014年以来,它是否会相关而不固定?

    PS4.由于这个问题很老,我提交了一份新的错误报告:
    https://bugs.chromium.org/p/chromium/issues/detail?id=617419
    也发现这个博客描述了同样的问题: http://timschreiber.com/2015/01/20/local-web-font-conflict-in-chrome/

    2 回复  |  直到 8 年前
        1
  •  2
  •   dee    8 年前

    我在想,为了避免这个Chrome错误,人们必须能够用自定义名称指定“Open Sans”字体系列,以便Chrome不会混淆,所以通过仔细阅读标题为“custom”的WebFontLoader规范( https://github.com/typekit/webfontloader#custom )我很幸运,这实际上是可能的!

    我所做的是首先下载所需的 字体+CSS 从…起 http://www.localfont.com/

    在上传字体到我的服务器后,我将下载的CSS声明添加到我自己的CSS文件中。 当心: 删除所有 本地(“…”) 声明并重命名的所有实例 font-family:'Open Sans'; 按照惯例,我选择了 字体系列:'CustomOpenSans'; .

    之后,我的案例中的css如下所示:

    @font-face {
      font-family: 'CustomOpenSans';
      font-weight: 400;
      font-style: normal;
      src: url('../assets/fonts/Open-Sans-regular/Open-Sans-regular.eot');
      src: url('../assets/fonts/Open-Sans-regular/Open-Sans-regular.eot?#iefix') format('embedded-opentype'),
           url('../assets/fonts/Open-Sans-regular/Open-Sans-regular.woff2') format('woff2'),
           url('../assets/fonts/Open-Sans-regular/Open-Sans-regular.woff') format('woff'),
           url('../assets/fonts/Open-Sans-regular/Open-Sans-regular.ttf') format('truetype'),
           url('../assets/fonts/Open-Sans-regular/Open-Sans-regular.svg#OpenSans') format('svg');
    }
    
    @font-face {
      font-family: 'CustomOpenSans';
      font-weight: 600;
      font-style: normal;
      src: url('../assets/fonts/Open-Sans-600/Open-Sans-600.eot');
      src: url('../assets/fonts/Open-Sans-600/Open-Sans-600.eot?#iefix') format('embedded-opentype'),
           url('../assets/fonts/Open-Sans-600/Open-Sans-600.woff2') format('woff2'),
           url('../assets/fonts/Open-Sans-600/Open-Sans-600.woff') format('woff'),
           url('../assets/fonts/Open-Sans-600/Open-Sans-600.ttf') format('truetype'),
           url('../assets/fonts/Open-Sans-600/Open-Sans-600.svg#OpenSans') format('svg');
    }
    
    @font-face {
      font-family: 'CustomOpenSans';
      font-weight: 700;
      font-style: normal;
      src: url('../assets/fonts/Open-Sans-700/Open-Sans-700.eot');
      src: url('../assets/fonts/Open-Sans-700/Open-Sans-700.eot?#iefix') format('embedded-opentype'),
           url('../assets/fonts/Open-Sans-700/Open-Sans-700.woff2') format('woff2'),
           url('../assets/fonts/Open-Sans-700/Open-Sans-700.woff') format('woff'),
           url('../assets/fonts/Open-Sans-700/Open-Sans-700.ttf') format('truetype'),
           url('../assets/fonts/Open-Sans-700/Open-Sans-700.svg#OpenSans') format('svg');
    }
    
    @font-face {
      font-family: 'CustomOpenSans';
      font-weight: 400;
      font-style: italic;
      src: url('../assets/fonts/Open-Sans-italic/Open-Sans-italic.eot');
      src: url('../assets/fonts/Open-Sans-italic/Open-Sans-italic.eot?#iefix') format('embedded-opentype'),
           url('../assets/fonts/Open-Sans-italic/Open-Sans-italic.woff2') format('woff2'),
           url('../assets/fonts/Open-Sans-italic/Open-Sans-italic.woff') format('woff'),
           url('../assets/fonts/Open-Sans-italic/Open-Sans-italic.ttf') format('truetype'),
           url('../assets/fonts/Open-Sans-italic/Open-Sans-italic.svg#OpenSans') format('svg');
    }
    
    @font-face {
      font-family: 'CustomOpenSans';
      font-weight: 600;
      font-style: italic;
      src: url('../assets/fonts/Open-Sans-600italic/Open-Sans-600italic.eot');
      src: url('../assets/fonts/Open-Sans-600italic/Open-Sans-600italic.eot?#iefix') format('embedded-opentype'),
           url('../assets/fonts/Open-Sans-600italic/Open-Sans-600italic.woff2') format('woff2'),
           url('../assets/fonts/Open-Sans-600italic/Open-Sans-600italic.woff') format('woff'),
           url('../assets/fonts/Open-Sans-600italic/Open-Sans-600italic.ttf') format('truetype'),
           url('../assets/fonts/Open-Sans-600italic/Open-Sans-600italic.svg#OpenSans') format('svg');
    }
    
    @font-face {
      font-family: 'CustomOpenSans';
      font-weight: 700;
      font-style: italic;
      src: url('../assets/fonts/Open-Sans-700italic/Open-Sans-700italic.eot');
      src: url('../assets/fonts/Open-Sans-700italic/Open-Sans-700italic.eot?#iefix') format('embedded-opentype'),
           url('../assets/fonts/Open-Sans-700italic/Open-Sans-700italic.woff2') format('woff2'),
           url('../assets/fonts/Open-Sans-700italic/Open-Sans-700italic.woff') format('woff'),
           url('../assets/fonts/Open-Sans-700italic/Open-Sans-700italic.ttf') format('truetype'),
           url('../assets/fonts/Open-Sans-700italic/Open-Sans-700italic.svg#OpenSans') format('svg');
    }
    

    和webfont。js代码如下:

    <script src="https://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js"></script>
    <script type="text/javascript">
    WebFontConfig = {
        custom: { families: [ 'CustomOpenSans' ] }
    }; 
    </script>
    

    线路 风俗 使用自定义的族命名就做到了。

    我还需要更改 字体系列 CSS中的值 '自定义OpenSans' 如此:

    body
    {
        font-family: 'CustomOpenSans', sans-serif;
    }
    

    我希望Chromium的人能尽快解决这个问题。。。

        2
  •  0
  •   T04435    8 年前

    我认为你应该按照谷歌字体网站的说明使用字体,我还将包括HTML、CSS以及 webfont.js网站

    HTML格式

    <link href='https://fonts.googleapis.com/css?family=Open+Sans:400,600,700' rel='stylesheet' type='text/css'> 
    

    CSS公司

    @import url(https://fonts.googleapis.com/css?family=Open+Sans:400,600,700);
    

    JS公司

    <script type="text/javascript">
      WebFontConfig = {
        google: { families: [ 'Open+Sans:400,600,700:latin' ] }
      };
      (function() {
        var wf = document.createElement('script');
        wf.src = 'https://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);
    })();  
    </script>
    

    谢谢T04435。