12

我正在尝试使用 CSS 变量来生成动态路径。

示例

:root {
  --fonts-path: "/path/to/font";
}

@font-face {
  font-family: "FontName";
  src: url(var(--fonts-path) + "/FontName-Light.woff") format('woff');
  font-weight: 100;
}

html {
  font-family: 'Metric', Arial, sans-serif;
}

这是由于未找到模块而失败'var(--hpe-fonts-path',这是 webpack 日志:

ERROR in ./~/css-loader?sourceMap&modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]!./~/postcss-loader!./src/theme/fonts.css
Module not found: Error: Cannot resolve module 'var(--fonts-path' in /Users/project-sample/src/theme
 @ ./~/css-loader?sourceMap&modules&importLoaders=1&localIdentName=[name]__[local]___[hash:base64:5]!./~/postcss-loader!./src/theme/fonts.css 6:83-114 6:234-265 6:403-434 6:576-607

任何指针?

4

4 回答 4

6

我发现您的方法存在一些问题:

  • @font-face规则不继承设置在:root.

  • 您不能+用来连接 CSS 字符串。请参阅css 中的字符串连接

  • 并非所有实现都支持var()内部url()

于 2016-07-12T18:46:01.283 回答
2

A similar issue is described in this post:

CSS native variables not working in media queries

where the user tries to use a variable inside a @font-face rule.

As described in the accepted answer (https://stackoverflow.com/a/40723269/4879632) you cannot use variables inside of rules, because the variables are inherited by :root (html) child elements. @ Rules (font faces, media queries, etc) are not elements, so they do not inherit from the root. Thus, you cannot reference a variable from there.

于 2017-12-13T14:04:33.307 回答
1

您不能在 CSS 中连接变量(请参阅此处):

由于您不能在 CSS 中连接(除了 content 属性),因此不能连接 CSS 变量。这意味着,例如,您不能将作为数字的 CSS 变量与单位相结合。

// No version of this will work 
div {
  --height: 100;
  height: var(--height) + 'px';
}
于 2022-01-04T07:16:47.020 回答
1

尝试将 url 包含在变量中,这在后台上下文中有效,但不确定它是否在 font-face 中有效

:root { 
--url:url("https://picsum.photos/id/1/200/300"); 
}

.box { 
background:var(--url); 
}
于 2021-12-09T23:40:04.753 回答