You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSS变量与@font-face at-rule结合使用问题求助

问题根源与解决方案

这个问题我之前也碰到过——核心原因是浏览器目前不支持在@font-face的font-weight属性中使用CSS变量。

为什么会这样?

CSS变量的解析是在样式计算的后期阶段,而浏览器处理@font-face规则时,需要明确的静态数值来识别字体的权重变体,以此建立字体家族和对应权重的映射关系。当你用变量替代具体数值时,浏览器在初始化@font-face时无法解析变量值,导致字体无法正确注册,最终出现加载异常或权重不生效的问题。

解决方案1:直接使用静态数值(最稳妥)

把@font-face里的变量替换成对应的硬编码数值,保留:root里的变量供其他样式使用:

:root {
  --font-weight-light: 300;
  --font-weight-normal: 400;
  --font-weight-semibold: 600;
}

@font-face {
  font-family: 'Proxima Nova';
  font-display: swap;
  font-style: normal;
  font-weight: 300; /* 替换为具体数值 */
  src: url('/fonts/proximanova-light.woff') format('woff');
}

@font-face {
  font-family: 'Proxima Nova';
  font-display: swap;
  font-style: normal;
  font-weight: 400;
  src: url('/fonts/proximanova-regular.woff') format('woff');
}

@font-face {
  font-family: 'Proxima Nova';
  font-display: swap;
  font-style: normal;
  font-weight: 600;
  src: url('/fonts/proximanova-semibold.woff') format('woff');
}

解决方案2:在使用字体时用变量(兼顾复用性)

保留@font-face的静态数值,在实际应用字体权重的选择器中使用CSS变量,这样既保证字体能正确注册,又能享受变量的复用便利:

/* 保留@font-face的静态配置 */
@font-face {
  font-family: 'Proxima Nova';
  font-display: swap;
  font-style: normal;
  font-weight: 300;
  src: url('/fonts/proximanova-light.woff') format('woff');
}

/* 其他@font-face规则... */

:root {
  --font-weight-light: 300;
  --font-weight-normal: 400;
  --font-weight-semibold: 600;
}

/* 在实际样式中使用变量 */
body {
  font-family: 'Proxima Nova', sans-serif;
  font-weight: var(--font-weight-normal);
}

.text-light {
  font-weight: var(--font-weight-light);
}

.text-semibold {
  font-weight: var(--font-weight-semibold);
}

这样调整后,字体就能正常加载并按预期应用权重了。

内容的提问来源于stack exchange,提问作者user840413

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:17:30