自定义¶
项目文件与项目本身和材料一样多样化 MkDocs是让它看起来很漂亮的一个很好的起点。然而,正如你 编写文档时,您可能会遇到一些小的调整 保持品牌风格所必需的。
添加assets¶
MkDocs提供了多种自定义主题的方法。为了做一些 对Material for MkDocs进行了细微调整,您只需将CSS和JavaScript文件添加到 docs
目录。
添加CSS¶
如果你想调整一些颜色或改变某些元素的间距, 您可以在单独的样式表中执行此操作。最简单的方法是创建一个 docs
目录中的新样式表文件:
然后,在mkdocs.yml
中添加以下行:
添加JavaScript¶
如果你想集成另一个语法高亮显示或添加一些自定义逻辑 你的主题,在docs
目录中创建一个新的JavaScript文件:
然后,在mkdocs.yml
中添加以下行:
如何与第三方JavaScript库集成
您可能只想运行JavaScript代码 一旦浏览器完全加载页面。这意味着 在上安装订阅事件的回调函数 由Material for MkDocs导出的document$
observable。 如果您有以下情况,使用document$
observable尤其重要 正在使用instant loading,因为它不会产生页面 在浏览器中刷新-但可观察对象上的订阅者将 通知。
document$
是一个RxJS Observable,你可以调用subscribe()
方法任意次数附加不同的功能。
扩展主题¶
如果你想更改HTML源代码(例如添加或删除某些部分),你可以 扩展主题。MkDocs支持theme extension,这是一种简单的覆盖方式 MkDocs的部分材料,无需从git分叉。这确保了您 可以更容易地更新到最新版本。
设置和主题结构¶
像往常一样在MkDocs.yml
中为Material for MkDocs启用,并创建一个新文件夹 对于overrides
,您可以使用custom_dir
引用它 设置:
主题扩展先决条件
由于custom_dir
设置用于主题扩展 流程,Material for MkDocs需要通过pip
安装并引用 使用mkdocs.yml
中的name
设置。当以下情况发生时,它将无法工作 从git克隆。
overrides
目录中的结构必须反映目录结构 因为overrides
目录中的任何文件都将替换原始主题 与原始主题同名的文件。此外,进一步 资产也可以放在overrides
目录中:
.
├─ .icons/ # 捆绑图标集
├─ assets/
│ ├─ images/ # 图像和图标
│ ├─ javascripts/ # JavaScript文件
│ └─ stylesheets/ # 样式表
├─ partials/
│ ├─ integrations/ # 第三方集成
│ │ ├─ analytics/ # 分析集成
│ │ └─ analytics.html # 分析设置
│ ├─ languages/ # 翻译语言
│ ├─ actions.html # 行动
│ ├─ alternate.html # 站点语言选择器
│ ├─ comments.html # 评论系统(默认为空)
│ ├─ consent.html # 同意
│ ├─ content.html # 页面内容
│ ├─ copyright.html # 版权和主题信息
│ ├─ feedback.html # 这个页面有用吗?
│ ├─ footer.html # 页脚栏
│ ├─ header.html # 显示在头条
│ ├─ icons.html # 定制图标
│ ├─ language.html # 翻译设置
│ ├─ logo.html # 标题和侧边栏中的徽标
│ ├─ nav.html # 主导航
│ ├─ nav-item.html # 主导航项
│ ├─ pagination.html # 分页(用于博客)
│ ├─ palette.html # 调色板切换
│ ├─ post.html # 博客文章摘录
│ ├─ progress.html # 进度指示器
│ ├─ search.html # 搜索界面
│ ├─ social.html # 社交链接
│ ├─ source.html # 存储库信息
│ ├─ source-file.html # 源文件信息
│ ├─ tabs.html # 选项卡导航
│ ├─ tabs-item.html # 选项卡导航项
│ ├─ tags.html # 标签
│ ├─ toc.html # 目录
│ ├─ toc-item.html # 目录项目
│ └─ top.html # 返回顶部按钮
├─ 404.html # 404错误页面
├─ base.html # 基础模板
├─ blog.html # 博客索引页
├─ blog-archive.html # 博客存档索引页
├─ blog-category.html # 博客分类索引页
├─ blog-post.html # 博客帖子页面
└─ main.html # 默认页面
Overriding部分¶
为了覆盖一个部分,我们可以用同名文件替换它 以及“override”目录中的位置。例如,替换原来的 footer.html
partial,在override
中创建一个新的footer.html
partial 目录:
MkDocs现在将在渲染主题时使用新的片段。这是可以做到的 任何文件。
Overriding blocks recommended¶
除了覆盖部分之外,还可以覆盖(和扩展) 模板块,在模板内定义并特定于包装 特征。为了设置块覆盖,请在内部创建一个main.html
文件 override
目录:
然后,例如,要覆盖网站标题,请在main.html
中添加以下行:
{% extends "base.html" %}
{% block htmltitle %}
<title>Lorem ipsum dolor sit amet</title>
{% endblock %}
如果你打算向块中 add 某个东西,而不是替换它 对于新内容,在块内使用{{ super() }}
来包含 原始块内容。这在添加第三方时特别有用 将脚本添加到文档中,例如。
{% extends "base.html" %}
{% block scripts %}
<!-- 添加在此之前需要运行的脚本 -->
{{ super() }}
<!-- 在此处添加之后需要运行的脚本 -->
{% endblock %}
主题提供了以下模板块:
Block name | Purpose |
---|---|
analytics | Wraps the Google Analytics integration |
announce | Wraps the announcement bar |
config | Wraps the JavaScript application config |
container | Wraps the main content container |
content | Wraps the main content |
extrahead | Empty block to add custom meta tags |
fonts | Wraps the font definitions |
footer | Wraps the footer with navigation and copyright |
header | Wraps the fixed header bar |
hero | Wraps the hero teaser (if available) |
htmltitle | Wraps the <title> tag |
libs | Wraps the JavaScript libraries (header) |
outdated | Wraps the version warning |
scripts | Wraps the JavaScript application (footer) |
site_meta | Wraps the meta tags in the document head |
site_nav | Wraps the site navigation and table of contents |
styles | Wraps the style sheets (also extra sources) |
tabs | Wraps the tabs navigation (if available) |
主题开发¶
Material for MkDocs基于TypeScript、RxJS和SASS构建,以及 使用精益、定制的构建流程将所有内容整合在一起。1如果你愿意 为了做出更根本的改变,可能有必要做出调整 直接在主题的源代码中重新编译它。
环境设置¶
首先,克隆您要处理的版本的存储库。如果 如果要克隆Insiders存储库,您需要成为 赞助商首先获得访问权限。
您需要有一个GitHub访问令牌 as described in the Insiders documentation,并在$GH_TOKEN
中提供 变量。
-
如果你使用SSH密钥在GitHub上进行身份验证,你可以 使用以下命令克隆Insiders:
接下来,创建一个新的Python virtual environment,然后 activate它:
确保pip始终在虚拟环境中运行
如果将环境变量 PIP_REQUIRE_VIRTUALENV
设置为 true
,pip将拒绝安装虚拟机之外的任何东西 环境。忘记激活venv
可能会非常烦人 因为它将在虚拟机之外安装各种东西 随着时间的推移,环境可能会导致进一步的错误。所以, 您可能希望将此添加到您的.bashrc
或.zshrc
中,然后 重新启动shell:
然后,安装所有Python依赖项:
此外, 您需要系统安装cairo
和pngquant
库, 如image processing要求指南中所述。
最后,将Node.jsLTS版本安装到Python虚拟环境中 并安装所有Node.js依赖项:
开发模式¶
以以下方式启动观察程序:
然后,在第二个终端窗口中,使用以下命令启动MkDocs实时预览服务器:
将浏览器指向localhost:8000,您应该会看到以下内容 你面前有很多文件。
自动生成的文件
切勿对material
目录进行任何更改,因为 目录是从src
目录自动生成的 在构建主题时被覆盖。
构建主题¶
当你完成更改后,你可以通过调用以下命令来构建主题:
-
虽然此命令将构建所有主题文件,但它将跳过覆盖 用于未分发的MkDocs自身文档的材料 与主题。如果你分叉了主题并想构建覆盖 同样,例如,在提交带有更改的PR之前,请使用:
这将需要更长的时间,因为现在图标搜索索引、模式文件、 以及构建额外的样式表和JavaScript文件。
这将触发所有样式的生产级编译和缩小 工作表和JavaScript文件。命令退出后,编译的文件为 位于“material
目录中。运行mkdocs build
时,您应该 现在查看对原始主题的更改。