问题是怎么出现的
这次最开始暴露出来的问题并不是“字体要不要换”,而是文章正文里的 **粗体** 看起来非常突兀。
表面现象是:
- 加粗之后不只是更黑
- 视觉上像是同时“放大了一号”
- 在中文段落里尤其明显
第一反应很自然会怀疑是 Markdown 样式写坏了,尤其是当前页面正文本身就是通过 .prose 和 .custom-md 这两层样式一起控制的。
第一轮排查:先看是不是 CSS 真把字号改大了
这轮先查了几处:
src/components/misc/Markdown.astrosrc/styles/markdown.csssrc/styles/main.css- Tailwind Typography 编译后的
.prose规则
结果是,strong 在最终编译出来的样式里只拿到了 font-weight,没有拿到更大的 font-size。
也就是说,问题并不是“粗体标签真的被额外设大了”,而是当前正文的字体组合在中文粗体下观感不好。
为什么会有这种“像变大了”的错觉
这个项目原本正文更接近 Roboto + 系统回退 的组合。
英文部分还好,但中文通常不会真的落到 Roboto 上,而是回退到系统里的 CJK 字体。不同系统在合成粗体时,字形膨胀、笔画发黑、占位变紧的程度差别很大,于是就会出现一种“没改字号,但看起来像更大了”的效果。
所以根因更接近:
- 不是 Markdown 语法问题
- 不是 Tailwind Typography 把
strong设大了 - 而是中文正文的字体回退和粗体表现不理想
中间做过一个临时修法
当时先试过一个局部覆盖:
strong,b { font-size: inherit; line-height: inherit; font-weight: 500;}这个方案的目标很直接:
- 强制粗体继承正文的字号和行高
- 把字重收一点
- 先把“突兀感”压下去
在原来的字体组合下,这个办法确实有效。
但它本质上还是一个症状级修复,并没有解决“正文中文字体本身不适合当前博客阅读”的问题。
第二轮处理:直接换正文主字体
既然问题集中出在中文正文观感上,那就不应该一直围着 strong 打补丁,而应该直接换一套更适合博客正文的中文字体。
最后选的是:
LXGW Neo XiHei / 霞鹜新晰黑原因很简单:
- 中文正文识别度高
- 字面干净,不会像某些系统黑体那样过分发闷
- 粗体观感比原来的回退组合自然得多
- 用在博客正文里比单纯靠系统默认字体稳定
最终落地方式
这次没有继续沿用临时的 strong/b 覆盖,而是把全站正文的字体基础改掉。
具体做法是:
- 把字体文件放进项目
public/fonts/LXGWNeoXiHei.ttf-
在
src/layouts/Layout.astro里注册全局@font-face -
在同一个文件里给
html, body指定全局正文字体栈 -
在
tailwind.config.cjs里同步更新fontFamily.sans
这样做的好处是:
- 页面正文直接吃到新字体
- 后续如果组件里用了
font-sans,也会保持一致 - 不需要继续为
strong写额外的特殊规则
为什么后来又把 strong/b 的覆盖删掉了
换成霞鹜新晰黑之后,再保留那段 strong/b 覆盖,反而会带来一个新问题:
- 粗体的字重被压回去了
- 原本字体自己的粗体层次不明显了
- 结果变成“能读,但不够像粗体”
这说明那段样式只适合旧字体阶段做临时止血,不适合在新字体已经正常工作的前提下继续保留。
所以最终状态是:
- 保留字体切换
- 删除
strong/b的额外覆盖 - 让新字体自己负责正常的粗体呈现
这次的结论
这次问题很典型:一开始看起来像样式 bug,最后其实是字体选择问题。
总结下来就是:
- 先检查了 Markdown 和 Typography 样式
- 发现
strong并没有真的被设大 - 临时用
strong/b继承字号的方式缓解了突兀感 - 最终把正文主字体切到
霞鹜新晰黑 - 新字体本身能正常处理中文粗体,所以临时覆盖被撤掉了
当前结果
现在这个博客的正文字体已经改成了霞鹜新晰黑优先,效果上有几个直接变化:
- 中文正文更统一
- Markdown 粗体不再显得像“突然放大”
- 不需要再用局部
strong样式去兜底
这次也重新跑过:
pnpm build构建通过,当前方案已经能稳定工作。