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

如何重定义CSS的@font-face属性?替换TTF为WOFF字体无效

解决@font-face重定义不生效的问题

问题背景

当前项目通过import 'outside-library/styles/main.css';引入外部库样式,其中main.css包含以下字体定义:

@font-face {
    font-family: 'Noto Sans';
    font-weight: 800;
    src: url('../assets/NotoSans-ExtraBold.ttf');
} 

为减小字体体积,新建CSS文件重定义该字体为WOFF格式:

@font-face {
    font-family: 'Noto Sans';
    font-weight: 800;
    src: url('../assets/NotoSans-ExtraBold.woff');
}

但无论新文件引入在main.css之前还是之后,浏览器仍加载原TTF字体。

可行解决方案

1. 新增属性提升规则优先级

浏览器会优先选择属性更完整的@font-face规则,在自定义规则中添加额外属性(如font-display),让浏览器优先识别你的定义:

@font-face {
    font-family: 'Noto Sans';
    font-weight: 800;
    src: url('../assets/NotoSans-ExtraBold.woff');
    font-display: swap; /* 新增属性提升规则优先级 */
}

2. 构建工具层面重定向资源路径

如果使用Webpack、Vite等构建工具,可通过路径别名将原TTF文件的请求指向WOFF文件。以Vite为例,在vite.config.js中配置:

export default {
  resolve: {
    alias: {
      'outside-library/assets/NotoSans-ExtraBold.ttf': '/src/assets/NotoSans-ExtraBold.woff'
    }
  }
}

3. 利用CSS @layer分层控制优先级

通过@layer将自定义样式放在更高优先级的层中,覆盖外部库的未分层样式:

@layer custom;

@layer custom {
    @font-face {
        font-family: 'Noto Sans';
        font-weight: 800;
        src: url('../assets/NotoSans-ExtraBold.woff');
    }
}

应急场景下也可使用!important强制覆盖(不推荐长期使用):

@font-face {
    font-family: 'Noto Sans' !important;
    font-weight: 800 !important;
    src: url('../assets/NotoSans-ExtraBold.woff') !important;
}

4. 直接修改外部库样式(维护性差,谨慎使用)

如果外部库是本地依赖,可直接找到outside-library/styles/main.css,将其中的TTF路径替换为WOFF路径。注意:后续库版本更新会丢失该修改。


内容的提问来源于stack exchange,提问作者Александр Кос

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:27:14