【问题标题】:Concat query string to font-face url将查询字符串连接到字体 url
【发布时间】:2017-06-04 05:18:44
【问题描述】:

为了避免浏览器的缓存,我想将版本查询字符串连接到我的@font-face 的网址。有很多网址。如何以正确的方式做到这一点?

@font-face {
   font-family: 'fontawesome';
   src: url('/styles/fonts/fontawesome/fontawesome.eot?6840zz');
   src: url('/styles/fonts/fontawesome/fontawesome.eot?6840zz#iefix') format('embedded-opentype'),
        url('/styles/fonts/fontawesome/fontawesome.ttf?6840zz') format('truetype'),
        url('/styles/fonts/fontawesome/fontawesome.woff?6840zz') format('woff'),
        url('/styles/fonts/fontawesome/fontawesome.svg?6840zz#icomoon') format('svg');
   font-weight: normal;
   font-style: normal;
}

【问题讨论】:

  • 我想问的两件事:你想要 fontawesome.eot?6840zz 它应该像 fontawesome.eot?v=1.1.0 一些版本。其次,您有多少文件以及您使用的是哪个 IDE?
  • @NaveedRamzan 查询字符串中的68400zz 是什么?也许这背后有一个逻辑。 IDE 如何与所有这些相关联?
  • 我在想你是否可以找到并替换选项并将版本添加到所有这些类型的链接中。不是这样吗?
  • 谢谢。但我不想更换。我只想了解这些幻数(68400z)和哈希(#iefix)背后的逻辑,它们与 url 的关系以及如何添加版本。有什么想法吗?
  • 嗯,好吧。好吧,那些版本号或代码 6840z 或任何东西都提到了内部版本号。在版本号的情况下,我们添加 ver=1 或 1.1 或 1.1.1 意味着我们正在处理内部版本号 1 并进行小修复。当我们将在下一个 sprint 上工作或构建它的版本时,将从 ver=2 开始。关于代码,它是从该版本号生成的随机数,只是为了分开。

标签: css font-face font-family


【解决方案1】:

Font Awesome 的大多数实现都会将版本化查询字符串附加到 @font-face 字体路径。当字体更新到新版本时,这些版本化的查询字符串将破坏缓存。也就是说,当您更新字体时,版本化查询字符串将从 ?v=4.7.0 更改为 ?v=4.7.1

在大多数情况下,您不需要做任何额外的事情,因为大多数实现都会为您处理这个问题。请记住,许多其他@font-face 生成器和包也将附加版本参数。举几个例子:

  1. 下载 Font Awesome 套件

    如果您从 http://fontawesome.io/ 下载 Font Awesome 工具包,则包含的 font-awesome.css 文件将在路径上附加版本化查询字符串。前任。

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

    ?v=4.7.0 是版本化查询字符串。如果您下载新版本的 Font Awesome,此版本号将会更改。

  2. Font Awesome CDN

    如果你使用 CDN 实现,你会得到一个 <script> 来包含,比如

    这将导入以下 CSS:

    @font-face {
      font-family: 'FontAwesome';
      src: url('//use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.eot');
      src: url('//use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),
        url('//use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.woff2') format('woff2'),
        url('//use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.woff') format('woff'),
        url('//use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.ttf') format('truetype'),
        url('//use.fontawesome.com/releases/v4.7.0/fonts/fontawesome-webfont.svg#fontawesomeregular') format('svg');
      font-weight: normal;
      font-style: normal;
    }
    

    Font Awesome CDN 的 URL 包含版本号,更新时会更改,从而破坏缓存并消除附加版本化查询参数的需要。

  3. 使用 Sass 或更少

    如果您使用的是 Less/Sass 文件,则会添加版本化查询字符串。例如。

    @font-face {
      font-family: 'FontAwesome';
      src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
      src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
        url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'),
        url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
        url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
        url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
      // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
      font-weight: normal;
      font-style: normal;
    }
    

    @{fa-version} 将追加当前版本(当前为4.7.0 到字体路径。此版本号将在字体更新时更新。从这个意义上说,您可以通过更改 @ 一次更新所有版本查询参数987654335@变量。

#iefix

关于#iefix 哈希,这是在单个src 中定义多种字体格式时修复IE8 及更低版本中的问题的方法。如果您需要您的字体在 IE8 及以下版本中工作,您需要添加#iefix(或任何哈希`),这样这些浏览器就不会抛出错误。更多信息请参见SO question

其他 @font-face 字体和实现

如果您使用的是 Font Awesome 以外的字体或其他实现,您可以将哈希附加到字体路径以创建您自己的 cache-bust。附加日期字符串是很常见的,例如01302017,可以在需要时手动更新或通过构建脚本更新。

【讨论】:

  • 我可以添加什么来增加获得那张难以捉摸的绿色支票的机会吗? ;)
  • 当然,我刚刚忘记了;)
  • 嗨,当我们使用带有字体url的预加载时,是否需要这个查询字符串? ???
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-15
  • 2023-03-30
  • 2023-03-05
  • 1970-01-01
相关资源
最近更新 更多