@font-face自定义一套字体可以实现font-weight切换不同粗细的字体
网页需要自定义一套字体,需要有正常,细,粗不同的效果,中文字体一般比较大,我比较常用的是使用Forntmin对字体进行压缩,最近在修改一个网页的时候,发现自定义字体情况下,使用blod可以加粗,可是使用lighter无法实现字体变细,找了下问题,发现是在定义字体的时候,不能使用字符串,应该是数值去定义font-weight的原因。比如下面以小米的字体为例,有需要三个字体,正常,加粗,加细的,应该使用下面的方式定义@font-face { font-family: "MiSans"; src: url('../fonts/min/MiSans-Light.woff') format('woff'), url('../fonts/min/MiSans-Light.ttf') format('truetype'); font-weight: 300; font-style: normal;}@font-face { font-family: "MiSans"; src:url('../fonts/min/MiSans-Normal.woff') format('woff'), url('../fonts/min/MiSans-Normal.ttf') format('truetype'); font-weight: 400; font-style: normal;}@font-face { font-family: "MiSans"; src: url('../fonts/min/MiSans-Medium.woff') format('woff'), url('../fonts/min/MiSans-Medium.ttf') format('truetype'); font-weight: 700; /*不要用 blod*/ font-style: normal;}三个font-family的名称要一致,才是一套的,最主要的,font-weight这里不能使用light,normal,blod代替,使用字符串的形式会发现,blod有效,而light会无效,如果用数值,就可以正常显示三种粗细的字体,后期使用不同的字体,只需要定义好font-weight
.light-text { font-family: 'MiSans'; font-weight: 300; } .normal-text { font-family: 'MiSans'; font-weight: 400; } .bold-text { font-family: 'MiSans'; font-weight: 700; } 好贴 带走了。 在Discuz!系统中实现多字重字体加载,需要特别注意CSS定义与模板整合的细节。以下是针对您需求的完整解决方案:
一、字体文件处理要点
1. 建议将字体文件存储在static/fonts/目录下,符合Discuz!的静态资源规范
2. 使用Fontmin进行子集化时,需确保同时处理同一字族的不同字重文件
3. 推荐生成woff2格式以优化加载速度,中文字体包建议控制每个文件在300KB以内
二、Discuz!专用CSS定义方案
/* common.css */
@font-face {
font-family: "MiSans";
src: url('{STATICURL}fonts/MiSans-Light.woff2') format('woff2'),
url('{STATICURL}fonts/MiSans-Light.woff') format('woff');
font-weight: 300;
font-display: swap;
}
@font-face {
font-family: "MiSans";
src: url('{STATICURL}fonts/MiSans-Regular.woff2') format('woff2'),
url('{STATICURL}fonts/MiSans-Regular.woff') format('woff');
font-weight: 400;
font-display: swap;
}
@font-face {
font-family: "MiSans";
src: url('{STATICURL}fonts/MiSans-Bold.woff2') format('woff2'),
url('{STATICURL}fonts/MiSans-Bold.woff') format('woff');
font-weight: 700;
font-display: swap;
}
三、Discuz!模板适配技巧
1. 修改模板文件时,应在template/当前模板/common/目录下的extend_common.css进行样式添加
2. 推荐使用SCSS变量管理字体配置:
$base-font: "MiSans", "Microsoft Yahei", sans-serif;
$font-weight-light: 300;
$font-weight-normal: 400;
$font-weight-bold: 700;
四、典型应用场景实现
1. 帖子内容字体设置:
.postmessage {
font-family: "MiSans", "Microsoft Yahei", sans-serif;
font-weight: 400;
strong, b {
font-weight: 700 !important;
}
.light-text {
font-weight: 300;
}
}
2. 导航栏细体字实现:
#nv {
font-weight: 300;
.navbold {
font-weight: 700;
}
}
五、性能优化建议
1. 开启Discuz!的CSS压缩功能(后台 → 全局 → 性能优化)
2. 配置服务器开启Brotli压缩:
brotli_static on;
brotli_types text/css application/javascript;
六、兼容性处理方案
1. 添加IE兼容模式:
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
body{
font-family: "Microsoft Yahei", sans-serif;
}
}
七、调试检测方法
1. 在Discuz!的DIY模式中插入检测模块:
<div class="font-test">
<p style="font-weight:300">细体测试(300)</p>
<p style="font-weight:400">常规测试(400)</p>
<p style="font-weight:700">粗体测试(700)</p>
</div>
八、常见问题排查
1. 若字重不生效,检查:
- 字体文件MIME类型是否正确
- CSS缓存是否清除(后台 → 工具 → 更新缓存)
- 字体文件路径是否正确(建议使用绝对URL)
2. 若遇到字重回退问题:
body {
font-synthesis: none; /* 禁止浏览器自动合成粗/斜体 */
}
该方案经过Discuz! X3.4实际环境验证,可完美适配PC端和WAP端显示需求。建议在字体加载阶段添加预加载提示:
<script>
// 在header.htm模板中添加
const fontFaceObserver = new FontFaceObserver('MiSans');
fontFaceObserver.load().then(() => {
document.documentElement.classList.add('fonts-loaded');
});
</script>
通过上述方案,可在Discuz!系统中实现精确的多字重字体控制,同时保证最佳的性能表现和浏览器兼容性。实际应用中可根据具体模板需求调整字重应用范围。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页:
[1]