1421 字
7 分钟
MkDocs 美化与进阶
说明

本文核心内容在笔者的笔记本网站原文中亦有记载,此页面为整理重制版。

有了前面的一系列工作,我们的 MkDocs 网站已经可以正常生成和部署了,请读者务必对整套流程熟悉之后再继续阅读本文。

本文中,笔者将通过几个例子,介绍一些 MkDocs 的高级用法。

配置评论系统#

有很多评论系统可以集成到 MkDocs 中,这里选用最常用的 Giscus 作为例子,请读者以官方文档为准。

首先要安装 Giscus GitHub App 并授权给你的仓库。

然后,去 Giscus 官网,跟着提示引导一步一步走下来,会获得一段代码,类似这样:

<script src="https://giscus.app/client.js"
data-repo="Fanovian/notebook"
data-repo-id="R_kgDOJ2i3-Q"
data-category="Announcements"
data-category-id="DIC_kwDOJ2i3-c4CXtT_"
data-mapping="pathname"
data-strict="0"
data-reactions-enabled="1"
data-emit-metadata="0"
data-input-position="bottom"
data-theme="preferred_color_scheme"
data-lang="zh-CN"
crossorigin="anonymous"
async>
</script>

接着在网站根目录创建目录和文件编辑 overrides/comments.html 文件:

{% if page.meta.comments %}
<h2 id="__comments">{{ lang.t("meta.comments") }}</h2>
<!-- Insert generated snippet here -->
<!-- Synchronize Giscus theme with palette -->
<script>
var giscus = document.querySelector("script[src*=giscus]")
// Set palette on initial load
var palette = __md_get("__palette")
if (palette && typeof palette.color === "object") {
var theme = palette.color.scheme === "slate"
? "transparent_dark"
: "light"
// Instruct Giscus to set theme
giscus.setAttribute("data-theme", theme)
}
// Register event handlers after documented loaded
document.addEventListener("DOMContentLoaded", function() {
var ref = document.querySelector("[data-md-component=palette]")
ref.addEventListener("change", function() {
var palette = __md_get("__palette")
if (palette && typeof palette.color === "object") {
var theme = palette.color.scheme === "slate"
? "transparent_dark"
: "light"
// Instruct Giscus to change theme
var frame = document.querySelector(".giscus-frame")
frame.contentWindow.postMessage(
{ giscus: { setConfig: { theme } } },
"https://giscus.app"
)
}
})
})
</script>
{% endif %}

第三行的 <!-- Insert generated snippet here --> 处粘贴上面的 Giscus 代码。

如果你对前端三件套比较了解,也可以对这个文件进行一些修改,比如添加一些样式。

配置好之后记得在 mkdocs.yml 文件中添加:

theme:
custom_dir: overrides

来把这个文件引入到主题中。除此之外,许多其他自定义的 html 文件也可以放在这个文件夹中,这里直接在主题中一次引入了。

然后在你想要添加评论的页面的 Markdown 文件的头部添加:

---
comments: true
---

即可在这个页面中添加评论系统。

添加顶部公告#

overrides 文件夹中创建 main.html 文件:

{% extends "base.html" %}
{% block announce %}
<!-- Add announcement here, including arbitrary HTML -->
{% endblock %}

中间填写 HTML 格式的公告内容。

然后在 mkdocs.yml 文件中添加:

theme:
custom_dir: overrides
features:
- announce.dismiss

最后一行的作用是读者可以关闭公告直至公告内容更新,关掉功能则公告常驻。

自定义配色和字体#

这个属于 CSS 的内容了。在 docs 文件夹下创建 stylesheets 文件夹,然后在其中创建 extra.css 文件。

extra.css 文件中写入你的 CSS 代码,比如:

:root {
--md-primary-fg-color: #0287ac;
--md-primary-fg-color--light: #0287ac;
--md-primary-fg-color--dark: #0287ac;
--md-accent-fg-color: #0287ac;
/* --md-text-font: "LXGW WenKai Screen";
--md-code-font: "Menlo", "LXGW WenKai Screen"; */
}
[data-md-color-scheme="default"] {
--md-footer-bg-color--dark: #ffffffd5;
--md-footer-fg-color--light: #000000c6;
--md-footer-fg-color--lighter: #0000009d;
--md-footer-fg-color--lightest: #000000;
}
[data-md-color-scheme="slate"] {
--md-default-bg-color: #131313;
/* --md-default-bg-color--light: #161616;
--md-default-bg-color--lighter: #161616;
--md-default-bg-color--lightest: #161616; */
--md-default-fg-color: rgba(255, 253, 253, 0.868);
--md-default-fg-color--light: rgba(255, 255, 255, 0.854);
--md-default-fg-color--lighter: rgba(255, 255, 255, 0.393);
--md-default-fg-color--lightest: rgba(255, 255, 255, 0.58);
--md-primary-fg-color: #1f1e33;
--md-typeset-a-color: #ffffff;
--md-footer-fg-color: #fff;
--md-footer-bg-color: var(--md-default-bg-color);
--md-footer-bg-color--dark: var(--md-default-bg-color);
--md-footer-fg-color--light: #ffffffc3;
--md-footer-fg-color--lighter: #ffffffc4;
--md-code-bg-color: #1c1c1c;
}
.md-header__title {
font-weight: bold;
font-family: "LXGW Wenkai Screen", sans-serif;
}

笔者这里对日间模式和夜间模式都单独设置了一些自己喜欢的颜色,这些颜色的参数很多,具体可以看 Material for MkDocs 作者给出的示例,里面包含了所有的颜色定义。

同时笔者也对字体进行了设置,这里设置了正文和代码的字体,这里的字体是笔者自己下载的字体,你可以根据自己的喜好更改,可以是网上的字体链接,也可以下载之后引入。

我的字体选择#

正文中,笔者使用非常出名的开源字体 霞鹜文楷,这是一款非常适合中文阅读的字体,同时也支持英文和数字。在网站设置中,参考了文章在站点网页中使用霞鹜文楷(LXGW WenKai),将字体 CSS 链接引入,使用的是屏幕阅读优化的版本。

代码字体是 Maple Font,具体可以前往其官网查看,比较符合笔者的审美。

我的配色方案#

夹带点私货 (*´∀`)~♥

  • 网站的日间模式主题色(#0287ac)来源于动画《Girls Band Cry》中登场角色河原木桃香的代表色(#85c9dc),经过针对可读性的优化而得。
  • 网站的夜间模式主题色(#1f1e33)来源于曲师 かめりあ 的 Arcaea 独占曲目《#1f1e33》。

插件的引入#

笔者使用了两个额外的 MkDocs 插件。

一个是 TonyCrane 学长的字数统计插件。

TonyCrane
/
mkdocs-statistics-plugin
Waiting for api.github.com...
00K
0K
0K
Waiting...

另一个是 ignorantshr 和 timvink 开发的自动标题插件。

ignorantshr
/
mkdocs-add-number-plugin
Waiting for api.github.com...
00K
0K
0K
Waiting...

插件的具体使用方式直接看仓库中的 README 即可。

需要注意的是,在本地安装好插件就可以渲染出效果,但是在 GitHub Pages 上渲染出效果需要构建页面的工作流中让 GitHub Actions 安装这些插件,需要在 PublishMySite.yml 文件中添加:

jobs: # 工作流的具体内容
deploy:
runs-on: ubuntu-latest # 创建一个新的云端虚拟机 使用最新Ubuntu系统
steps:
- uses: actions/checkout@v2 # 先checkout到main分支
- uses: actions/setup-python@v2 # 再安装Python3和相关环境
with:
python-version: 3.x
- run: pip install mkdocs-material # 使用pip包管理工具安装mkdocs-material
- run: pip install mkdocs-statistics-plugin # 安装mkdocs-statistics-plugin
- run: pip install mkdocs-add-number-plugin # 安装mkdocs-add-number-plugin
- run: mkdocs gh-deploy --force # 使用mkdocs-material部署gh-pages分支

即先安装好所有的插件,然后再部署网站。否则 Actions 会报错。

此外在网站的主页自定义样式中还用到了下列插件:

MkDocs 美化与进阶
https://fuwari.vercel.app/posts/mkdocs-advance/
作者
零式岚
发布于
2025-02-02
许可协议
CC BY-NC-SA 4.0