ZSFT 是一个为开源字体提供免费的 CDN 服务,目前共收录 348 款字体(截止 2024/07/20),有国内外服务器,为开源字体提供免费的 CDN,而这其中就有我个人非常喜欢的更纱黑体(Sarasa Gothic),并且它还使用了 cn-font-split 技术(将大型字体文件分解为小文件,使用一个 css 导入,按需加载极大提升加载速度)加速了字体加载,下面详细介绍一下如何在 Halo 中使用代码注入实现全站字体替换。

找到你喜欢的字体

在 ZSFT 官网(https://zsft.zeoseven.com/)右上角搜索找到你喜欢的字体,然后点进它的页面(以更纱黑体为例):

https://zsft.zeoseven.com/font/cn/s/161/

现在我们得到了这样一串代码:

/* 默认使用国际边缘服务器,要使用位于中国大陆内的边缘服务器,请将 zsftcdn.zeoseven.com 修改为 zsftcdn-cn.zeoseven.com */
@import url('https://zsftcdn.zeoseven.com/cn/161/main/result.css');

html {
	font-family: "Sarasa Gothic SC";
	font-weight: normal;
}
CSS

但这样还不能实现强制替换的效果,只是在 CSS 中增加了一个可用字体。

要实现强制替换也非常简单,加一个 !important 即可:

别忘了在外边加上 style 的框框,不然不能被作为 html 识别。

这里顺带也替换了 CDN 网址为国内服务器的网址。

<style>
    @import url('https://zsftcdn-cn.zeoseven.com/cn/161/main/result.css');
    
    * {
        font-family: "Sarasa Gothic SC" !important;
        font-weight: normal;
    }
    </style>
CSS

在 Halo 中进行代码注入

进入 Halo 后台,导航到设置→代码注入→全局 head 标签

输入这串神奇的代码,别忘了保存。

然后回到你的 Halo 主页,就发现字体已经被替换了,而且加载速度非常快,总算可以摆脱微软雅黑了~

但同时又出现了一个问题:CodeBlock 的字体也被替换了,而代码我们当然希望使用等宽字体而不是常规屏显字体,这就需要再加一些 CSS 规则了。

在 ZSFT 找到你想要的等宽字体,这里我直接选用同一家的等距更纱黑体。

https://fonts.zeoseven.com/font/cn/s/159/

然后就需要打开 F12 开发者选项,找一下是哪些 selector 被错误地强制替换了,然后写 CSS 把这些强制替换为等宽字体即可。

如果发现替换不完全,再用 F12 找一找,例如我使用的是 Halo 博客 + Hao 主题,需要替换所有 language- 开头以及 token 开头的 class 的字体,最终代码如下:

<style>
@import url('https://zsftcdn-cn.zeoseven.com/cn/161/main/result.css');
@import url('https://zsftcdn-cn.zeoseven.com/cn/159/main/result.css');

* {
    font-family: "Sarasa Gothic SC" !important;
}
  
code[class*="language-"], pre[class*="language-"], .token {
    font-family: "Sarasa Mono SC" !important;
}
</style>
CSS

再次回到文章页面,可以看到字体已经被正确替换了,大功告成~