<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>字体 on JiangYM's Blog</title><link>https://jiangym.top/tags/%E5%AD%97%E4%BD%93/</link><description>Recent content from JiangYM's Blog</description><generator>Hugo</generator><language>zh-cn</language><managingEditor>xxx@example.com (JiangYM)</managingEditor><webMaster>xxx@example.com (JiangYM)</webMaster><copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright><lastBuildDate>Mon, 14 Sep 2026 16:30:00 +0800</lastBuildDate><atom:link href="https://jiangym.top/tags/%E5%AD%97%E4%BD%93/index.xml" rel="self" type="application/rss+xml"/><item><title>为了一个字体折腾了三天，最后发现默认的才是最好的</title><link>https://jiangym.top/post/hugo-font-css-tinkering/</link><pubDate>Mon, 14 Sep 2026 16:30:00 +0800</pubDate><author>xxx@example.com (JiangYM)</author><guid>https://jiangym.top/post/hugo-font-css-tinkering/</guid><description>
<![CDATA[<h1>为了一个字体折腾了三天，最后发现默认的才是最好的</h1><p>作者：JiangYM（xxx@example.com）</p>
        
          <p>先说结论：折腾了三天，最后还是用回了系统默认字体栈。</p>
<p>真是浪费时间，但又觉得不亏——这种矛盾的心情大概就是折腾型技术宅的宿命吧。</p>
<h2 id="起因">
<a class="header-anchor" href="#%e8%b5%b7%e5%9b%a0"></a>
起因
</h2><p>上周末发完文章之后，随手打开博客看了一眼，突然觉得正文的字体越看越不顺眼。Reimu 主题默认用的是一套日文字体栈，英文和标点看着还行，但中文的显示效果怎么说呢——就是那种说不上丑但总觉得哪里不太对的感觉。可能是我自己看多了，审美疲劳。</p>
<p>于是乎，一个本来只是打算「花十分钟换个字体」的小项目，变成了持续三天的 CSS 调优马拉松。</p>
<h2 id="尝试路线">
<a class="header-anchor" href="#%e5%b0%9d%e8%af%95%e8%b7%af%e7%ba%bf"></a>
尝试路线
</h2><h3 id="第一天google-fonts--noto-sans-sc">
<a class="header-anchor" href="#%e7%ac%ac%e4%b8%80%e5%a4%a9google-fonts--noto-sans-sc"></a>
第一天：Google Fonts + Noto Sans SC
</h3><p>第一反应是上 Google Fonts 找「最好看的中文字体」。选了 Noto Sans SC，毕竟 Google 出品、字重多、有开源许可，理论上是最稳妥的选择。</p>
<p>步骤很简单：在主题的 <code>head.html</code> 里加一行 Google Fonts 的 link，然后在 custom CSS 里覆盖 <code>body</code> 的 <code>font-family</code>。</p>
<p>结果加载完一刷新页面，好家伙，首页白屏了大概一秒多才渲染出来——字体文件的加载阻塞了首屏渲染。虽然我服务器在美西，但 Google Fonts 的 CDN 在国内加载速度很玄学，快的时候还行，慢的时候能卡好几秒。</p>
<p>这不行，博客本来就没什么流量，首屏再慢，仅有的几个访客直接跑了。</p>
<p>于是研究了一下 <code>font-display: swap</code> 和 preconnect。加上之后白屏问题解决了，但出现了 FOUT（Flash of Unstyled Text）——字体加载前先显示 fallback 字体，加载完突然闪一下变成 Noto Sans。虽然只有几十毫秒的闪烁，但我这种强迫症看着贼难受。</p>
<h3 id="第二天自托管字体">
<a class="header-anchor" href="#%e7%ac%ac%e4%ba%8c%e5%a4%a9%e8%87%aa%e6%89%98%e7%ae%a1%e5%ad%97%e4%bd%93"></a>
第二天：自托管字体
</h3><p>既然 CDN 有问题，那就自己托管。从 Google Fonts 下载了 Noto Sans SC 的几个字重（300、400、700），用 <code>woff2</code> 格式放到 <code>static/fonts/</code> 目录下。</p>
        
        <hr><p>本文2026-09-14首发于<a href='https://jiangym.top/'>JiangYM's Blog</a>，最后修改于2026-09-14</p>]]></description><category>技术</category></item></channel></rss>