跳转至

尝试修改 mkdocs-material 网页的字体的过程记录

约 1612 个字 • 46 行代码

起因

在前天上课时,偶然间发现了同学的博客网站 GaoZQi's Note ,发现他的网站中普通页面(非blog页面)中有统计的数据,询问他说是使用了 mkdocs-statistics-plugin 插件,然后为了查看这个插件的效果,前往了这个大佬作者的网页 鹤翔万里的笔记本 (tonycrane.cc)

然后主要是看到这个网站和同学的博客两个网站都是基于 mkdocs-material 搭建并且更换了字体,所以我就产生了更换字体的想法

尝试修改,寻找方法

由于我觉得 鹤翔万里的笔记本 网站的字体很好看,于是到github仓库中进行查看,

我先打开了 /docs/css/custom.css

:root {
  --md-text-font: "JetBrains Mono", "LXGW WenKai Screen"; 
  --md-code-font: "JetBrains Mono";
}

...

发现只有这里是进行了字体的设置,其中我知道 JetBrains Mono 是 JetBrains 开发的英文字体,那么 LXGW WenKai Screen 应该就是中文的字体了

但一开始我以为还会有其他的设置字体的 css 文件,因为之前看同学博客的仓库custom.css 中的设置也是类似,但还有一个 /docs/css/fonts.css 文件

/* JetBrains Mono */
@import url('https://fonts.loli.net/css?family=JetBrains Mono:400,500,600,700&display=swap');
/* Noto Sans SC */
@import url('https://fonts.loli.net/css2?family=Noto Sans SC&display=swap');
/* 思源宋体 */
@import url('https://fonts.googleapis.com/css2?family=Noto Serif SC&display=swap');
/* Roboto Slab */
@import url('https://fonts.googleapis.com/css2?family=Roboto Slab&display=swap');
/* Roboto*/
@import url('https://fonts.googleapis.com/css2?family=Roboto&display=swap');

来导入相关的字体,又或者设置相关的字体,

而且根据我的理解, custom.css 中的设置应该也只是设置了关键字,如果没有对对应字体进行设置或者导入的话,应该还是使用不了

然后我有进行过一次尝试,确实只在我的 extra.css 文件中设置 --md-text-font--md-code-font 在预览中字体并没有改变

暂时没有头绪,然后想起官方文档中好像有设置字体相关的说明,于是前往查看 Changing the fonts - Material for MkDocs (squidfunk.github.io)

发现如果不使用自定义 css 文件的方法,只能选择 Google Font 上有的字体(搜索发现 Google Font 上没有 LXGW WenKai Screen 字体),并且(应该)不能像上面说的两个网站一样设置多个字体(中文用一种,英文用另一种),

于是查看自定义 css 的方法,

Additional fonts

docs/stylesheets/extra.css

@font-face {
  font-family: "<font>";
  src: "...";
}

发现与那两个网站的设置方法不一样,

然后(由于还是没有头绪,所以)我在网上搜索 LXGW WenKai Screen ,找到了这个字体的 github 仓库

lxgw/LxgwWenKai: An open-source Chinese font derived from Fontworks' Klee One. 一款开源中文字体,基于 FONTWORKS 出品字体 Klee One 衍生。 (github.com)

README.md

若需要在网站上使用这款字体,请参阅 Issue #24

于是查看该 Issue ,发现里面链接到另一个仓库 chawyehsu/lxgw-wenkai-webfont: webfont package for the LXGW WenKai typeface (github.com)

本来从仓库的 README.mdUsage 中没找到合适的方法,但是在搜索 mkdocs material 自定义字体 时,发现了一片文章

如何在Mkdocs里自定义字体(霞鹜文楷)-CSDN博客

其中最下方 基于Mkdocs的网站字体美化用法 中的设置我看起来感觉和仓库中的设置有些相似(即添加字体的 css 文件来导入字体),

在mkdocs.yml中添加以下内容

extra_css:
  - https://cdn.jsdelivr.net/npm/lxgw-wenkai-webfont@1.1.0/style.css
  # - https://cdn.jsdelivr.net/npm/lxgw-wenkai-lite-webfont@1.1.0/style.css
  # - https://cdn.jsdelivr.net/npm/lxgw-wenkai-tc-webfont@1.0.0/style.css
  # - https://cdn.jsdelivr.net/npm/lxgw-wenkai-screen-webfont@1.1.0/style.css

然后在extra.css中添加以下内容

body {
      font-family: "LXGW WenKai", sans-serif;
      /* Lite version */
      /* font-family: "LXGW WenKai Lite", sans-serif; */
      /* TC version */
      /* font-family: "LXGW WenKai TC", sans-serif; */
      /* Screen version */
      /* font-family: "LXGW WenKai Screen", sans-serif; */
    }

四选一,mkdocs.yml和extra.css相互对应

然后我进行了尝试,发现可行,

此外发现这篇文章其实是作者在他自己的博客上(这个博客好像之前另外一个同学还给我有提到过,大致看了一下里面似乎写了很多关于 mkdocs-material 的设置,以后有机会看看)

Wcowin's Web

写的 修改网站字体 - Wcowin's Web ,然后转发到 csdn 上的

然后我发现,这个方法中 css 中的 font-family 属性的设置,有在 mkdocs-material 官方文档设置自定义字体Regular font 处代码中的 评注 annotation 中有提到过,所以我猜测,上面这个方法中 font-family 后填的关键字字符串,也可以在 --md-text-font --md-code-font 后,然后经过尝试,发现可行😆,

此时我又注意到,这个方法中,导入字体是在 mkdocs.ymlextra_css 中导入的,所以我才开始去查看 鹤翔万里的笔记本 (tonycrane.cc)mkdocs.yml

extra_css:
  - https://cdn.tonycrane.cc/jbmono/jetbrainsmono.css
  - https://cdn.tonycrane.cc/lxgw/lxgwscreen.css

发现确实是在此处进行导入字体,

所以,到这里,我终于弄明白了,可以直接在 mkdocs.yml 中导入字体 css 文件,也可以像同学一样,通过 css 文件(他的 fonts.css )来导入字体的 css 文件,然后导入之后再设置 --md-text-font --md-code-font 属性就能更改网页的字体了😆

设置字体

选择字体

正文的字体我打算采用和 鹤翔万里的笔记本 (tonycrane.cc) 一样的字体(英文 JetBrains mono ,中文 霞鹜文楷),于是 --md-text-font 设置成和作者一样,

然后这时我才意识到,把英文字体放在前面,才能使得中英文字体不一样,因为这样才会英文字体找不到再在中文字体中寻找

而代码的字体,英文我也打算使用 JetBrains mono ,中文我选择了一会,打算使用 思源宋体 Noto Serif SC

查找字体 css 文件

于是开始查找 Noto Serif SCcss 文件,然后发现在 Google Font 上有这个字体,但是一开始没弄明白如何获取 css 文件,

经过一番摸索,发现需要在字体页面下方 Styles 处选择一个或多个规格,我选择了 Regular 400 ,然后再点击网页右上角的像购物袋的(会显示 View selected famalies 的)图标,

get_fonts_css

然后在右侧可以找到对应的地址/链接

https://fonts.googleapis.com/css2?family=Noto+Serif+SC&display=swap

以及字体对应的关键字 Noto Serif SC

然后将链接直接放入 mkdocs.ymlextra_css 中,再在自定义的 css 文件(这时我用的是 extra.css 来测试的)中设置关键字,

:root {
  --md-text-font: "JetBrains Mono", "LXGW WenKai Screen"; 
  --md-code-font: "JetBrains Mono", "Noto Serif SC";
}

最后预览中能看到显示相应的字体😆

将 google 的地址换成国内的

由于注意到同学是用了 fonts.loli.net 的域名(可见上面 fonts.css 中的代码),而我也认为可能把google相关的域名换成其他的会好一点,

于是搜索相关信息,然后发现一篇文章

使用 CDN 或直接引入的方式,更换网站中文字体_html font字体 cdn链接-CSDN博客

里面提到了四个站点/域名

  • css https://fonts.googleapis.cnpmjs.org

  • css https://fonts.font.im

  • css https://fonts.proxy.ustclug.org

  • css https://fonts.loli.net

fonts.proxy.ustclug.org 好像之前搜索的时候有看到这个是中科大的域名

最后我打算也采用 fonts.loli.net (跟同学一样😉)

最后修改后的效果

change_fonts_success


最后更新: 2023-10-24
创建日期: 2023-10-23

评论