Css 加载字体:url 中的 # 是什么意思以及如何添加 GET 参数?

Css loading font: What does the # in a url mean and how to add a GET-parameter?

我在 css/scss 中使用 fontawesome。字体嵌入到 scss 中是这样的:

src: url('#{$fa-font-path}/fa-regular-400.eot');
src: url('#{$fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'),
url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'),
url('#{$fa-font-path}/fa-regular-400.woff') format('woff'),
url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'),
url('#{$fa-font-path}/fa-regular-400.svg#fontawesome') format('svg');

为了在我们的服务器上正确地进行预加载 运行,我需要添加一个 GET 参数(这是由于会话的原因),所以我需要更改

fa-regular-400.woff2 

fa-regular-400.woff2?preload

但是 # 有什么作用?在网页上的“正常”URL 中,它将是锚点,但在字体文件中?如何正确地将预加载参数添加到:

fa-regular-400.eot?#iefix
fa-regular-400.svg#fontawesome

是吗:

fa-regular-400.eot?#iefix&preload
fa-regular-400.svg#fontawesome?preload

fa-regular-400.eot?preload#iefix
fa-regular-400.svg?preload#fontawesome

??

fa-regular-400.eot?preload#iefix
fa-regular-400.svg?preload#fontawesome

这是正确的方法。 #part 只是一个片段,在解析 HTTP 请求时通常会被完全忽略。我什至怀疑大多数浏览器甚至不将它发送到服务器。

你可能想仔细检查旧 IE 版本(IE11 之前)的 fa-regular-400.eot?preload#iefix,首先它的全部原因是它们的 CSS 解析器忽略了 ? 我们滥用它来忽略其他字体格式。

对于 SVG 字体,#id 只是告诉浏览器将文件中的哪个 svg 元素用作字体。

如果字体是 OpenType 集合,片段会指示要加载集合中的哪种字体。

如果未指定或无法识别,则从集合中加载第一个字体 (ref)

如果不是 OpenType 集合,则会被忽略。