我正在使用Hugo和Wowchemy建立一个新的静态网站。Wowchemy使用Roboto字体,我想在我的网站上提供它。
我就是这么做的:
- 我在
static/fonts
中安装了字体文件(TTF;WOFF) - 我将
params.yaml
中fonts
的值更改为Roboto
(是的,这是一个绝望的举动)
重新启动服务器时没有任何更改。使用firefox的附加组件,我可以看到它仍然在从远程站点加载字体。
那么,为了让浏览器加载字体的本地副本,我需要添加哪些更改?
要执行的步骤:
- 找到HUGO模板目录(位于
tmp
…中的某个位置) - 在模板目录中,找到定义模板字体的
.toml
文件 - 使用模板文件中的URL来确定哪些字体加载了哪些权重
- 通过下载字体和相关的CSShttps://gwfh.mranftl.com/fonts
- 将字体安装到
/static/fonts
中 - 将CSS文件添加到
/assets/scss
,并将其后缀更改为.scss
- 添加一个
custom.scss
,@import
是字体定义。请记住,@import
已弃用,将来必须由@use
指令取代
长话短说:
一开始,我们必须找到作为模块下载的模板文件。最简单的方法是调用hugo server
以确保模块已经下载,然后转到assets/jsconfig.json
中定义的路径。该路径相对于文件的位置,并直接指向相应的templare目录。在我的情况下,字符串值为"../../../../../tmp/hugo_cache/modules/filecache/modules/pkg/mod/github.com/wowchemy/wowchemy-hugo-themes/modules/wowchemyv5@v5.7.1-0.20221106163805-45466f563a8a/assets/*"
。从现在起,如果我们引用template directory
,请使用该assets
目录所在的父目录。
下一步:找到定义字体的.toml
文件。转到hugo构建目录,查看配置文件params.yaml
(位于config/_default
中)。找到appearance/font
的密钥,例如:
appearance:
theme_day: minimal
theme_night: minimal
font: minimal
font_size: L
现在在主题目录data/fonts/<....>.toml
中找到相应的字体文件。这是确保字体从谷歌下载的原始文件。你会发现一个参数定义了对谷歌的调用,看起来像这样:
# Font style metadata
name = "Minimal"
# Optional Google font URL
google_fonts = "family=Montserrat:wght@400;700 family=Roboto+Monofamily=Roboto:wght@400;700"
# Font families
heading_font = "Montserrat"
body_font = "Roboto"
nav_font = "Roboto"
mono_font = "Roboto Mono"
链接告诉您下载了哪些字体以及使用了哪些权重。记下这些值,然后在构建目录中创建一个最小的data/fonts/<...>.toml
文件,覆盖主题的数据。就我们的目的而言,确保没有加载谷歌字体就足够了,所以我们只使用这个文件:
# Do not use google fonts via URL
google_fonts = ''
# All further parameters are taken from the theme's 'minimal.toml' file
接下来,使用该工具下载具有适当大小的字体https://gwfh.mranftl.com/fonts.这非常简单,我们可以使用字体所在目录的内置值。下载字体并在static/fonts
中解压缩存档。
然后,将下载字体的CSS保存在目录assets/<...>.scss
中,其中<...>
必须替换为字体名称,如roboto
。在每个SCSS文件中,还将以下指令添加到每个字体声明中:
font-display: swap;
现在在添加自定义字体声明的同一目录中创建一个文件custom.scss
。看起来像这样:
@import "montserrat";
@import "roboto";
@import "roboto-mono";
就是这样!重新启动服务器并检查字体是否已下载。在Firefox中,我使用内置的WebDevTools并检查加载了哪些文件。
您需要加载一个CSS文件,其中包含一个链接到本地文件的字体分离。就我个人而言,我会在这里问这个问题:https://discord.com/invite/z8wNYzb.