Skip to content

设置导航

清晰简洁的导航结构是良好项目文档的重要方面。Material for MkDocs 提供了多种选项来配置导航元素的行为,包括 tabssections,以及其旗舰特性之一:instant loading

额外的导航可以在 [footer] 中配置,以及使用 tags pluginblog plugin 也会设置额外的导航。

配置

即时加载

5.0.0

启用即时加载后,所有内部链接的点击将被拦截,并通过 XHR 分发,而无需完全重新加载页面。将以下行添加到 mkdocs.yml

theme:
  features:
    - navigation.instant

生成的页面会被解析和注入,所有事件处理程序和组件会自动重新绑定,即 Material for MkDocs 现在表现得像一个单页面应用程序。现在,搜索索引在导航中得以保留,这对于大型文档网站尤其有用。

必须设置 site_url 设置

请注意,在使用即时导航时,必须设置 site_url,因为即时导航依赖于生成的 sitemap.xml,如果省略此设置,则该文件将为空。示例:

site_url: https://example.com

即时预取

9.7.0

即时预取是一项新的实验性功能,当用户悬停在链接上时,它将开始获取页面。这将减少用户的感知加载时间,尤其是在慢速连接上,因为页面在导航时将立即可用。通过以下方式启用:

theme:
  features:
    - navigation.instant
    - navigation.instant.prefetch

进度指示器

9.4.3

为了在使用即时导航时为慢速连接提供更好的用户体验,可以启用进度指示器。它将在页面顶部显示,并在页面完全加载后隐藏。您可以在 mkdocs.yml 中通过以下方式启用:

theme:
  features:
    - navigation.instant
    - navigation.instant.progress

进度指示器仅在页面在 400 毫秒后尚未完成加载时显示,因此快速连接将不会显示它,以提供更好的即时体验。

即时预览

9.7.0

即时预览是一项全新的功能,允许用户在不导航到其他页面的情况下预览文档的另一部分。它们对于保持用户的上下文非常有帮助。可以在任何带有 data-preview 属性的标题链接上启用即时预览:

带有即时预览的链接
``` markdown
[Attribute Lists](#){ data-preview }
```

限制

即时预览仍然是一项实验性功能,目前仅限于标题链接。这意味着,您可以在指向其他页面标题的任何内部链接上使用它,但不能在具有 id 属性的其他元素上使用。在我们收集到足够的反馈后,我们将考虑将此功能扩展到其他可能的任意元素。

自动预览

9.7.0

使用 Material for MkDocs 中包含的 Markdown 扩展是处理即时预览的推荐方式,因为它允许您在文档的每个页面或每个部分级别启用即时预览:

markdown_extensions:
  - material.extensions.preview:
      configurations:
        - targets:
            include:
              - changelog/index.md
              - customization.md
              - insiders/changelog/*
              - setup/extensions/*

上述配置是我们用于文档的配置。我们已为我们的变更日志、自定义指南和内部人员部分启用了即时预览,以及我们支持的所有 Markdown 扩展。

完整配置示例

markdown_extensions:
  - material.extensions.preview:
      configurations:
        - sources: # (1)!
            include:
              - ...
            exclude:
              - ...
          targets: # (2)!
            include:
              - ...
            exclude:
              - ...
  1. Sources 指定应启用即时预览的页面。如果省略此设置,则将在所有页面上启用即时预览。您可以使用模式来包含或排除页面。排除在包含之上进行评估,因此如果一个页面同时被包含和排除,则将被排除。

    请注意,您可以在 configurations 设置下定义多个项目,这允许精确控制在哪里显示即时预览。

  2. Targets 指定应启用即时预览的页面。这是启用即时预览的推荐方式。


即时预览也可以通过将以下行添加到 mkdocs.yml 全局启用,这将为所有标题链接启用即时预览,减轻添加数据属性的需要:

theme:
  features:
    - navigation.instant.preview

必须设置 site_url 设置

请注意,在使用即时预览时,必须设置 site_url,因为即时预览依赖于生成的 sitemap.xml,如果省略此设置,则该文件将为空。示例:

site_url: https://example.com

锚点跟踪

8.0.0

启用锚点跟踪后,地址栏中的 URL 将自动更新为活动锚点,如目录中所突出显示的。将以下行添加到 mkdocs.yml

theme:
  features:
    - navigation.tracking

导航标签

1.1.0

当启用标签时,顶级部分将在 1220px 以上的视口中呈现在标题下方的菜单层中,但在移动设备上保持不变。1 将以下行添加到 mkdocs.yml

theme:
  features:
    - navigation.tabs

导航标签启用

导航标签禁用

粘性导航标签

7.3.0

当启用粘性标签时,导航标签将在标题下方锁定,并在向下滚动时始终保持可见。只需将以下两个功能标志添加到 mkdocs.yml

theme:
  features:
    - navigation.tabs
    - navigation.tabs.sticky

粘性导航标签启用

粘性导航标签禁用

导航部分

6.2.0

当启用部分时,顶级部分将在 1220px 以上的视口中作为组呈现在侧边栏中,但在移动设备上保持不变。将以下行添加到 mkdocs.yml

theme:
  features:
    - navigation.sections

导航部分启用

导航部分禁用

这两个功能标志 navigation.tabsnavigation.sections 可以相互结合。如果同时启用这两个功能标志,则为级别 2 的导航项呈现部分。

导航扩展

6.2.0

当启用扩展时,左侧边栏将默认展开所有可折叠的子部分,因此用户不必手动打开子部分。将以下行添加到 mkdocs.yml

theme:
  features:
    - navigation.expand

导航扩展启用

导航扩展禁用

9.7.0

当激活导航路径时,在每个页面标题上方呈现面包屑导航,这可能会使访问您文档的用户在小屏幕设备上更容易定位。将以下行添加到 mkdocs.yml

theme:
  features:
    - navigation.path

导航路径启用

导航路径禁用

导航修剪

9.2.0

当启用修剪时,仅包含可见的导航项在渲染的 HTML 中,减少构建站点的大小 33% 或更多。将以下行添加到 mkdocs.yml

theme:
  features:
    - navigation.prune # (1)!
  1. 此功能标志与 navigation.expand 不兼容,因为导航扩展需要完整的导航结构。

此功能标志对于具有 100+ 或甚至 1,000+ 页的文档网站特别有用,因为导航占 HTML 的显著比例。导航修剪将用指向该部分中第一页(或部分索引页面)的链接替换所有可展开的部分。

部分索引页面

7.3.0

当启用部分索引页面时,文档可以直接附加到部分,这对于提供概述页面特别有用。将以下行添加到 mkdocs.yml

theme:
  features:
    - navigation.indexes # (1)!
  1. 此功能标志与 toc.integrate 不兼容,因为部分无法由于空间不足而容纳目录。

部分索引页面启用

部分索引页面禁用

要将页面链接到部分,请在相应文件夹中创建一个名为 index.md 的新文档,并将其添加到导航部分的开头:

nav:
  - Section:
    - section/index.md # (1)!
    - Page 1: section/page-1.md
    ...
    - Page n: section/page-n.md
  1. MkDocs 还将名为 README.md 的文件视为 [索引页面]。

目录

锚点跟随

8.5.0

当启用 目录 的锚点跟随时,侧边栏会自动滚动,以便活动锚点始终可见。将以下行添加到 mkdocs.yml

theme:
  features:
    - toc.follow

导航集成

6.2.0

当启用 目录 的导航集成时,它始终作为左侧导航侧边栏的一部分呈现。将以下行添加到 mkdocs.yml

theme:
  features:
    - toc.integrate # (1)!
  1. 此功能标志与 navigation.indexes 不兼容,因为部分无法由于空间不足而容纳目录。

导航集成启用

导航集成禁用

返回顶部按钮

7.1.0

当用户在向下滚动后开始向上滚动时,可以显示返回顶部按钮。它在标题下方居中呈现。将以下行添加到 mkdocs.yml

theme:
  features:
    - navigation.top

使用

隐藏侧边栏

6.2.0

可以通过文档的前置内容 hide 属性隐藏导航和/或目录侧边栏。在 Markdown 文件的顶部添加以下行:

---
hide:
  - navigation
  - toc
---

# 页面标题
...

隐藏导航启用

隐藏目录启用

同时隐藏两者启用

隐藏导航路径

9.7.0

虽然 [导航路径] 在主标题上方呈现,但有时可能希望为特定页面隐藏它,这可以通过前置内容 hide 属性实现:

---
hide:
  - path
---

# 页面标题
...

自定义

键盘快捷键

Material for MkDocs 包含几种键盘快捷键,使您可以通过键盘导航项目文档。共有两种模式:

search

搜索被聚焦 时,此模式处于活动状态。它提供了几种键绑定,使搜索可以通过键盘访问和导航:

  • Down , Up : 选择下一个/上一个结果
  • Esc , Tab : 关闭搜索对话框
  • Enter : 跟随选定结果
global

搜索未聚焦 且没有其他可接受键盘输入的聚焦元素时,此模式处于活动状态。以下键被绑定:

  • F , S , / : 打开搜索对话框
  • P , , : 转到上一页
  • N , . : 转到下一页

假设您想将某个操作绑定到 X 键。通过使用 additional JavaScript,您可以订阅 keyboard$ 可观察对象并附加自定义事件监听器:

keyboard$.subscribe(function(key) {
  if (key.mode === "global" && key.type === "x") {
    /* 在此添加自定义键盘处理程序 */
    key.claim() // (1)!
  }
})
  1. key.claim() 的调用将在底层事件上执行 preventDefault(),因此按键事件不会进一步传播并触发其他事件监听器。
extra_javascript:
  - javascripts/shortcuts.js

内容区域宽度

内容区域的宽度设置为每行长度不超过 80-100 个字符,具体取决于字符的宽度。虽然这是一个合理的默认值,因为较长的行往往更难阅读,但可能希望增加内容区域的整体宽度,甚至使其延伸到整个可用空间。

这可以通过 additional style sheet 和几行 CSS 轻松实现:

.md-grid {
  max-width: 1440px; /* (1)! */
}
  1. 如果您希望内容区域始终延伸到可用屏幕空间,请使用以下 CSS 重置 max-width

    .md-grid {
      max-width: initial;
    }
    
extra_css:
  - stylesheets/extra.css

  1. 6.2.0 之前,导航标签的行为略有不同。所有顶级页面(即所有直接引用 *.md 文件的顶级条目)在 mkdocs.ymlnav 条目中定义时,都会被分组到第一个标签下,该标签获得第一个页面的标题。这使得无法将顶级页面(或外部链接)作为标签项包含在内,如 #1884#2072 中所报告。从 6.2.0 开始,导航标签包括所有顶级页面和部分。