字体修改记录:中文、英文、代码和一个 H
这次字体设置分成正文、代码、手写欢迎语和首访 H。重点不是选最特别的字体,而是让大多数用户都能正常看到。
字体调整看起来是视觉问题,实际先是兼容问题。
个人网站可以有一点性格,但不能要求每个访客都装同一套字体。所以这次没有只写一个字体名,而是给不同用途写了字体栈。
现在的全局字体
字体都在 globals.css 的 Tailwind theme 里:
--font-serif:
"Times New Roman", Times, "STZhongsong", "华文中宋", "Songti SC", SimSun,
"Noto Serif CJK SC", "Noto Serif SC", serif;
--font-sans:
"Times New Roman", Times, "STZhongsong", "华文中宋", "Songti SC", SimSun,
"Noto Serif CJK SC", "Noto Serif SC", serif;这次站点没有继续走常见 sans-serif。中文希望更接近“华文中宋”的气质,英文用 Times New Roman。所以正文和标题都先走这个 serif 栈。
如果用户系统里没有华文中宋,就继续找 Songti SC、宋体、Noto Serif。最后还有通用的 serif。
代码字体不追求新
代码字体用的是另一条栈:
--font-code:
ui-monospace, "Cascadia Mono", "Cascadia Code", "SFMono-Regular", Menlo,
Monaco, Consolas, "Liberation Mono", "Courier New", monospace;这里没有把 JetBrains Mono 或 Nerd Font 放在前面。原因很现实:它们很好看,但不是大多数系统默认安装的字体。
ui-monospace、Cascadia、SFMono、Menlo、Consolas、Liberation Mono 的覆盖面更广。最后落到 monospace,至少能保证代码仍然等宽。
代码区要的是稳定可读,不是一定要看起来像某个编辑器主题。
欢迎语和 H 是特殊字体
首页第一屏的 Welcome 用 --font-roundhand:
--font-roundhand:
"Pinyon Script", "Bickham Script Pro", "Snell Roundhand",
"Edwardian Script ITC", "Segoe Script", cursive;首访加载的 H 用 --font-gothic:
--font-gothic:
"Manufacturing Consent", "UnifrakturCook", "Old London",
"Old English Text MT", "Cloister Black", "Lucida Blackletter",
"Engravers Old English", Georgia, "Times New Roman", serif;这里的主字体是 Google Fonts 里的 Manufacturing Consent。它比 UnifrakturCook 更接近想要的黑体字母感觉,装饰更收一点。
Google Fonts 是否要求本地有字体
不要求。
CSS 里有一行:
@import url("https://fonts.googleapis.com/css2?family=Manufacturing+Consent&family=Pinyon+Script&family=UnifrakturCook:wght@700&display=swap");浏览器能访问 Google Fonts 时,会下载对应 web font。用户本机不需要提前安装。
如果网络拦住了 Google Fonts,浏览器就会继续看后面的本地字体名。都没有,再落到 Georgia、Times New Roman 或通用 serif。这样效果会变普通,但页面不会坏。
New York Times 的 N 不是直接调用字体
我之前想找接近 New York Times logo 的哥特体。后来确认了一点:那种标志字母通常不是直接打一行字体就结束,而是为 logo 单独设计或深度修过。
所以这里不能指望某个 Google Font 完全复刻它。更合理的目标是找一个气质接近、可公开调用、加载稳定的字体。
Manufacturing Consent 目前是这个位置的首选。如果以后要更稳,可以把字体文件自托管到站点里。这样就不依赖 Google Fonts 的访问情况。
小结
这次字体设置有两个原则:
第一,常用内容优先稳定。正文和代码必须大多数用户都能正常看到。
第二,特殊字体只放在特殊位置。Welcome 和首访 H 可以有性格,但它们不能决定整站是否可读。
字体栈不是越长越高级。它只是告诉浏览器:先试这个,不行就试下一个,最后一定要给用户一个能读的结果。

