2025-08-29
字体格式 | 支持场景 | 作用 |
---|---|---|
WOFF2 | 现代浏览器(Chrome 36+) | 体积小(比 TTF 小 30%+),优先加载 |
WOFF | 主流浏览器(Chrome 5+) | 兼容性广,作为次优先加载 |
TTF | 跨平台基础格式(支持 Safari) | 兼容老旧浏览器和移动 Web |
EOT | IE 浏览器(IE 9-) | 仅用于兼容极老旧 IE |
工具推荐:用FontSquirrel在线转换字体格式,自动生成多格式文件和 @font-face 代码。 |
font-display
属性控制字体加载时的显示策略,避免 “字体闪烁(FOIT/FOUT)”,同时指定字体名称(需与设计稿一致,如 “BrandFont-Regular”):@font-face {
font-family: 'BrandFont'; /* 自定义字体名称,需与设计稿匹配 */
src: url('fonts/BrandFont.woff2') format('woff2'), /* 优先加载WOFF2 */
url('fonts/BrandFont.woff') format('woff'),
url('fonts/BrandFont.ttf') format('truetype'),
url('fonts/BrandFont.eot') format('embedded-opentype');
font-weight: 400; /* 字重:常规(400)、粗体(700)等,需与设计稿匹配 */
font-style: normal; /* 样式:正常(normal)、斜体(italic) */
font-display: swap; /* 关键:先显示降级字体,加载完成后替换,避免空白等待 */
}
/* 全局应用:将特殊字体绑定到目标元素 */
.title, .btn-text {
font-family: 'BrandFont', sans-serif; /* sans-serif为降级字体,确保极端情况下显示正常 */
}
font-family: 'BrandFont', '思源黑体', sans-serif;
,确保生僻字可被降级字体覆盖;
Resources
目录,在Info.plist
中添加Fonts provided by application
,声明字体文件名(如 “BrandFont.ttf”);代码中通过UIFont(name: "BrandFont", size: 16)
调用,确保所有页面统一使用该字体名称。assets/fonts
目录,通过Typeface.createFromAsset(getAssets(), "fonts/BrandFont.ttf")
创建字体实例,封装为全局工具类(如FontManager
),所有 TextView/Button 统一调用该工具类,避免重复代码导致的不一致。react-native-fonts
库,将字体文件放入android/app/src/main/assets/fonts
(Android)和ios/[项目名]/Resources
(iOS),在package.json
中声明字体,使用时通过style={{ fontFamily: 'BrandFont' }}
调用,确保两端配置一致。pubspec.yaml
的fonts
节点中声明字体路径(如- family: BrandFont fonts: - asset: fonts/BrandFont.ttf
),代码中通过TextStyle(fontFamily: 'BrandFont')
使用,Flutter 会自动处理跨端加载逻辑。
wx.loadFontFace
加载,无需额外上传文件;wx.loadFontFace({
family: 'BrandFont', // 与CSS中一致
source: 'url("https://xxx.cdn.com/fonts/BrandFont.woff2")',
success: () => { console.log('字体加载成功'); },
fail: (err) => { console.error('字体加载失败', err); } // 失败时触发降级
});
@font-face
方案,但需确认平台是否支持 WOFF2 格式,优先使用体积更小的字体文件,避免影响加载速度。
<link rel="preload" href="fonts/BrandFont.woff2" as="font" type="font/woff2" crossorigin>
预加载首屏所需字体,减少首屏等待时间;APP 端在启动页后台加载字体,确保进入主页面时字体已就绪。font-family: 'BrandFont', '思源黑体', 'Microsoft YaHei', sans-serif;
(按兼容性从高到低排序);
--font-brand: 'BrandFont', sans-serif;
),所有页面通过变量引用,后期更换字体时只需修改变量值;FontManager
),统一处理字体加载、失败降级、字重映射,所有业务模块调用工具类,避免重复代码。