【问题标题】:Overriding @font-face src URL?覆盖@font-face src URL?
【发布时间】:2013-05-29 21:14:18
【问题描述】:

我们在 Bootstrap 中使用 FontAwesome。但是,当我们尝试将 FA 与自定义缩小器一起使用时,它会尝试从相对路径加载字体,这会返回 404,这是由于设置了缩小 URL 结构的方式。

因此我们认为解决此问题的最佳方法是在我们的缩小列表中添加一个额外的 CSS 文件,该文件将覆盖 FontAwesome 字体使用的 @font-face src URL。我们基本上只是从 FontAwesome 复制了@font-face 定义,并指定了绝对 URL 位置。

但是,现在发生的情况是我们正确的 URL 加载了字体,并且尝试了 FontAwesome CSS 中最初指定的 URL(导致与之前相同的 404 错误)。

是我们做错了什么,还是真的没有办法覆盖@font-face src URL,从而完全忽略“上游”定义?

【问题讨论】:

  • 你能贴一些代码吗?
  • 网页是否加载并使用了正确的字体?
  • 我发现了这个问题,并将其作为单独的答案发布......最终这是一个错字!感谢您的反馈,因为发布代码(正如@DavidStarkey 所要求的)最终导致我发现了问题!
  • 我收回了它,即使使用了@font-face 的固定定义,它也不能正常工作。
  • @rvidal 为了回答您的问题,网页正确加载,并且 Font Awesome 字形正确显示。所以唯一的问题是浏览器正在发出 3 个不需要发出的额外请求,每个请求都会导致 404,因为它们不存在于它试图命中的位置。

标签: css font-awesome


【解决方案1】:

简单覆盖基本 CSS 类的字体系列:

.fa {
  font-family: 'FontAwesome2' !important;
}

然后,粘贴/包含并编辑字体定义:

@font-face {
  font-family: 'FontAwesome2';
  src: url('//host.domain/yourpath/fontawesome-webfont.eot?v=3.1.0');
  ...
  font-style: normal;
}

【讨论】:

    【解决方案2】:

    更新:下面的“解决方案”实际上并没有奏效......我们确实有一个错字,但在随后的测试中,这仍然不是根本原因,我们仍然面临这个问题。

    解决方案是在覆盖@font-face 时非常小心,确保提供与原始@font-face 中使用的所有相同格式。否则,浏览器会将其视为不同的定义,并会尝试下载两者中引用的文件,而不是覆盖它。

    所以这里是FontAwesome的CSS中的定义,先引用。

    @font-face {
      font-family: 'FontAwesome';
      src: url('../font/fontawesome-webfont.eot?v=3.1.0');
      src: url('../font/fontawesome-webfont.eot?#iefix&v=3.1.0') format('embedded-opentype'), 
        url('../font/fontawesome-webfont.woff?v=3.1.0') format('woff'), 
        url('../font/fontawesome-webfont.ttf?v=3.1.0') format('truetype'), 
        url('../font/fontawesome-webfont.svg#fontawesomeregular?v=3.1.0') format('svg');
      font-weight: normal;
      font-style: normal;
    }
    

    当我们试图覆盖时,我们不小心丢弃了“format('svg')”定义:

    @font-face {
      font-family: 'FontAwesome';
      src: url('//ourdomain.com/includes/font-awesome-3.1.x/font/fontawesome-webfont.eot?v=3.0.1');
      src: url('//ourdomain.com/includes/font-awesome-3.1.x/font/fontawesome-webfont.eot?#iefix&v=3.0.1') format('embedded-opentype'),
        url('//ourdomain.com/includes/font-awesome-3.1.x/font/fontawesome-webfont.woff?v=3.0.1') format('woff'),
        url('//ourdomain.com/includes/font-awesome-3.1.x/font/fontawesome-webfont.ttf?v=3.0.1') format('truetype');
      font-weight: normal;
      font-style: normal;
    }
    

    添加 format('truetype') 定义后,我们不再遇到导致 404 的额外点击。

    【讨论】:

    • 这是一个有趣的实验,因为我在 CSS 规范中找不到任何关于覆盖行为的具体内容。您是否发现它在不同浏览器中保持一致?
    • @rvidal 我们没有通过 Chrome 的测试,至于这个特定的项目,它是使用中最主要的浏览器。我想我们会尝试让它在那里工作,然后进一步测试,但到目前为止还没有运气。我们现在已经采取了将 FontAwesome CSS 移到正常缩小之外的方法,这意味着页面加载时需要额外的 HTTP 请求,但迄今为止唯一的解决方法。
    • @MasonG.Zhwiti 我在这里也有同样的问题。我的图标没有显示,我确定src: url 指向正确的文件夹。我知道这一点,因为如果我做了www.example.com/fonts/fontawesome-webfont.eot,文件就会下载。你是怎么解决你的问题的?
    • 我尝试在 scss 文件中执行此操作以更改字体 url,因为 webpack 无法编译库提供的字体 url,但解决方案对我不起作用
    猜你喜欢
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-16
    • 2015-11-26
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多