Hexo博客NexT主题设置之使用HarmonyOS字体
Hexo的NexT主题优化配置,主要的特性与功能包括:
- 无损的样式自定义方法
- 自定义字体
- 使用HarmonyOS字体
- 自定义翻译
- 通用的样式修改方法
版本信息
本文基于的环境与版本信息如下,版本不同可能会导致本文的配置达不到预期效果。
- Hexo:6.2.0
- hexo-theme-next:8.11.1
在进行优化配置前,请先阅读NexT主题的官方配置手册。
一般来说,稳妥起见,有自定义需求也建议先在官方手册中查找方法。
无损的样式自定义方法
这里的 “无损” 指的是不修改主题的源文件,这样做的好处是不影响主题的源代码以及后续的版本升级。但这要求主题在设计上具备模块化、可扩展等特性,NexT主题在这些方面做的不错,源代码可读性也很好。预留的自定义入口可以满足常用的样式修改要求。
NexT 一共有三个不同的仓库,更新说明及常见问题参考issues:
版本 | 年份 | 仓库 |
---|---|---|
v5.1.4 或更低 | 2014 ~ 2017 | https://github.com/iissnan/hexo-theme-next |
v6.0.0 ~ v7.8.0 | 2018 ~ 2019 | https://github.com/theme-next/hexo-theme-next |
v8.0.0 或更高 | 2020 | https://github.com/next-theme/hexo-theme-next |
在NexT主题的8.11.1版本中自定义样式主要通过自定义文件覆盖主题样式的方式实现,主题提供以下自定义文件,覆盖了几乎所有页面。
1 | # Define custom file paths. |
操作方法:
- 在hexo博客根目录下使用命令
mkdir source/_data
在source目录下创建_data文件夹 - 创建对应的自定义文件,如:在hexo博客根目录下使用命令
touch source/_data/styles.styl
创建styles.styl
用于覆盖main.css
文件中的样式 - 编辑第二步创建的自定义文件修改样式
- 在主题配置文件
_config.next.yml
中,取消对应文件的注释,然后使用运行hexo cl & hexo g & hexo s
查看效果
自定义字体
在NexT的说明文档中详细介绍了自定义字体的方法,如果主题配置文件中提供的字体配置,可以对全局、站名、标题、文章以及代码字体进行配置:
- global: 全局字体
- title: 站点名称字体
- headlines: 作用于文章标题和目录,注意:文章标题属于一级标题,文章内部的最高目录为二级标题,markdown写法上使用
##
- posts: 文章正文字体
- code: 代码字体
如果上述部分的external
参数设置为true
,则会在访问的使用,从font.host
参数设置的地址在线获取字体,一般设置为谷歌字体的地址,其国内访问地址为 https://fonts.font.im
NexT的字体策略
如果主题配置文件中提供的配置项无法满足要求,还可以通过source/_data/variables.styl
文件进行深度定制。在这之前需要先了解NexT的字体设置策略,打开文件hexo-theme-next/source/css/_variables/base.styl
,可以看到字体设置的代码:
1 | // Font families. |
其中$font-family-monospace
用于设置代码块的显示字体。
可以看出,只有$font-family-chinese
无法在配置文件中设置,其他的部分如在主题配置文件中设置,会优先使用配置文件中的字体,此时即使设置了$font-family-chinese
也不会生效。
但是如果非要修改的话,可以在source/_data/variables.styl
文件中设置,如:
1 | $font-family-chinese = 'Helvetica' |
字体自定义方法
从上面可以看出,NexT自定义字体只需要在_config.next.yml
文件中的font
部分设置即可,建议设置各处字体的external
的属性值为true
,这样就无需在下载字体保存在本地,直接在线获取就可以,获取字体的地址的设置方式上面已经提到。
- 如果要使用本地字体,最好转换为woff2格式,woff2格式是W3C推荐的WEB字体标准,有两个特点:
- 利用压缩技术有效减小文件大小
- 不加密、不受DRM(数字著作权)限制
- 不要设置太多种类的字体,会影响网站的访问速度
使用HarmonyOS Sans字体
HarmonyOS 字体是华为发布的可免费商用的字体。其设计上聚焦于功能性、普适性,是一款多语言的无级可变字体,支持简体中文、繁体中文、拉丁、西里尔、希腊、阿拉伯等5大书写系统,105种语言全球化覆盖。
我尝试了一下,在展示效果上,HarmonyOS 字体看上去确实要舒服很多,索性把它设置为了博客的基础字体。
引入外部字体资源
设置的过程中发现Google字体上面找不到HarmonyOS字体,只能自己引入了。可通过CSS引入:
1 | @font-face { |
为了不影响访问效率,不建议使用src: url('../fonts/yaheiconsolashybrid.ttf')
引入ttf、otf等字体格式,而要使用woff2格式。
为了进一步节省带宽,提升访问速度,还可以使用unicode-range
CSS描述符对@font-face
范围内的字体进行分割,如果页面没有使用此unicode编码范围内的字符,则不会下载字体,可以做到按需加载。所以推荐的设置方式为:
1 | @font-face { |
于是,有了一个新的问题,这unicode-range
要怎么分割,而且还需要写一堆的CSS代码,头痛!要是有分割好CSS的直接拿来用就好了。我们可以创建source/_data/head.njk
文件,使用下面的代码引入B站的字体文件,访问速度嗖嗖的。
1 | <link rel="preconnect" href="https://s1.hdslb.com/" /> |
上面的代码会引入regular
和medium
两种字重,其显示效果如下图,我使用的是regular
。
修改字体设置
引入字体后,只需要修改NexT主题配置文件中的字体设置即可,修改后的内容如下:
1 | font: |
通用的样式修改办法
我们还可以通过浏览器的开发者工具来精准的修改样式
查看样式
以Chrome浏览器为例,在想要修改样式的元素上右键-->检查
在开发者工具栏找到元素
Tab页,选中对应的html标签,在右侧展示区的样式tab中查找对应的样式,复制代码。
也可以选中html标签后右键-->复制-->复制样式
就得到了待修改元素的样式代码。
例如,我想修改文章页面底部标签的字体大小,找到的post-tag a
即文章页面标签链接的样式为:
1 | .post-tags a { |
修改样式
将上述步骤复制得到的样式代码,贴进source/_data/styles.styl
文件中,改成需要的样式就可以。
1 | // 页面底部标签加大显示 |
当然啦,使用上面的方式修改样式,需要有了解一些前端的基础知识,至少要了解HTML、CSS。我前端不行,随便弄弄,难免有错漏之处后面再慢慢改正。
本文参考了以下内容
免费商用字体HarmonyOS Sans
Hexo Next 主题详细配置之二