跳到主要内容

侧边栏

侧边栏的作用:将多个相关文档组织成有序树结构,在这些文档页面中统一显示侧边栏导航,支持在文档间显示“上一页 / 下一页”按钮。

不要在侧边栏上浪费时间!要么使用 sidebar.js 的自动生成,尽量简单使用。要么自己编写插件,按自己的规则生成。


启用侧边栏

指定侧边栏配置文件来启用侧边栏。

jsdocusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
sidebarPath: './sidebars.js',
},
},
],
],
};

侧边栏配置文件以 Node. js 环境执行,不能使用浏览器 API、React 或 JSX。


sidebar.js

如果未指定 sidebarPath,Docusaurus 会使用 docs 文件夹的文件系统结构自动为你生成一个侧边栏。默认情况下 sidebar.js 的配置是这样的:

js
export default {
mySidebar: [
{
type: 'autogenerated',
dirName: '.', // 从 docs 根目录生成
},
],
};

侧边栏对象

侧边栏支持各种项目类型:

类型描述
category一个分类,可以包含子条目(包括子类别、文档、链接等)
doc指向一个文档,使用文档的 id
link外部或内部链接,带标签和 URL/href
autogenerated自动生成条目,扫描一个目录下的文档与子目录
ref链接到文档页面,而不使项目参与导航生成
html在项目的位置呈现纯 HTML

链接到文档

使用 doc 类型链接到文档页面并将该文档分配给侧边栏:

text
type SidebarItemDoc =
// Normal syntax
| {
type: 'doc';
id: string;
label: string; // Sidebar label text
key?: string; // Sidebar key to uniquely identify the item
className?: string; // Class name for sidebar label
customProps?: Record<string, unknown>; // Custom props
}

// Shorthand syntax
| string; // docId shortcut

示例:

jssidebars.js
export default {
mySidebar: [
// Normal syntax:
{
type: 'doc',
id: 'doc1', // document ID
label: 'Getting started', // sidebar label
},

// Shorthand syntax:
'doc2', // document ID
],
};

如果您使用文档速记或自动生成的侧边栏,您将无法通过项目定义自定义侧边栏标签。但是,您可以在该文档中使用 sidebar_label Markdown front matter,该 Front,其优先级高于侧边栏项中的标签键。同样,您可以使用 sidebar_custom_props 声明文档页面的自定义元数据。

对象的属性:

  • label :显示名称
  • items :子条目数组
  • collapsed :是否默认折叠(对于分类)
  • link (对 category)可定义分类导航行为(如生成索引页面) ([Docusaurus][1])
  • className :可给条目添加 CSS 类名,用于样式定制
  • customProps :可携带自定义属性(例如徽章、特色标记等)
  • key :给条目设一个唯一标识符,用于避免国际化 key 冲突或帮助组件识别栏目信息 ([Docusaurus][1])

复杂示例:

jssidebar.js
export default {
// 定义一个名为 mySidebar 的侧边栏
mySidebar: [
{
// 侧边栏项目类型:category(可折叠的分类/分组)
type: 'category',
// 分类的显示标签(标题)
label: 'Getting Started',
// 分类下的子项目数组
items: [
{
// 子项目类型:doc(指向一个文档文件)
type: 'doc',
// 文档的 ID,对应于 docs 目录下的文件名(不含扩展名)
id: 'doc1',
},
],
},
{
// 第二个分类
type: 'category',
// 分类的显示标签
label: 'Docusaurus',
// 分类下的子项目数组
items: [
{
// 指向 ID 为 'doc2' 的文档
type: 'doc',
id: 'doc2',
},
{
// 指向 ID 为 'doc3' 的文档
type: 'doc',
id: 'doc3',
},
],
},
{
// 侧边栏项目类型:link(外部链接)
type: 'link',
// 链接的显示标签
label: 'Learn more',
// 链接的目标 URL
href: 'https://example.com',
},
],
};
这样搞效率很低!

如果目录变化,需要手动更新 sidebar.js ,否则 sidebar 就失效了。


建议简单配置

随着文档数量和分类增加

bash
// 目录结构
docs
├── computer
│ ├── intro.md
│ ├── os.md
│ ├── ...数百个.md
│ └── networking.md
└── biology
├── intro.md
├── ...数百个.md
├── genetics.md
└── ecology.md

docs 目录下不同文件夹配置单独的侧边栏:

jssidebar.js
// sidebars.js
const sidebars = {
// 计算机类文档
computerSidebar: [{ type: "autogenerated", dirName: "computer" }],

// 生物类文档
biologySidebar: [{ type: "autogenerated", dirName: "biology" }],
};

module.exports = sidebars;

更好的方案

不使用 sidebar.js 。写一个自动生成 sidebar 的插件:自动将 docs/分类 生成 sidebar。例如目录 docs/linux → sidebar linuxdocs/htmlhtmldocs/csscss 。不论多少分类,都可以自动生成 sidebar。

主题配置:侧边栏行为控制

显示【隐藏侧边栏】按钮

通过启用该 themeConfig.docs.sidebar.hideable 选项,您可以使整个侧边栏可隐藏,让用户更好地专注于内容。当在中等大小的屏幕(例如平板电脑)上消费内容时,这尤其有用。

jsdocusaurus.config.js
export default {
themeConfig: {
docs: {
sidebar: {
hideable: true,
},
},
},
};

自动折叠类别

当展开一个分类时,自动折叠其他同级分类,有助于内容聚焦。

jsdocusaurus.config.js
export default {
themeConfig: {
docs: {
sidebar: {
autoCollapseCategories: true,
},
},
},
};

面包屑(Breadcrumbs)

默认情况下,每个文档顶部会根据其在侧边栏中的路径生成面包屑导航: 主页 > linux > intro

jsdocusaurus.config.js
export default {
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
breadcrumbs: true,
},
},
],
],
};

传递唯一 key

传递唯一键属性可以帮助唯一标识侧边栏项。有时其他属性(如标签 )不足以将两个侧边栏项彼此区分开来。

js
{
type: 'category',
label: 'API', // You may have multiple categories with this widespread label
key: 'api-for-feature-1', // and now, they can be uniquely identified
};

ref

当你想要从若干个侧边栏链接到同一篇文档时,ref 会很有用。

jssidebar.js
export default {
tutorialSidebar: {
'Category A': [
'doc1',
'doc2',
{type: 'ref', id: 'commonDoc'},
'doc5',
],
},
apiSidebar: ['doc3', 'doc4', 'commonDoc'],
};

参考: Sidebar | Docusaurus