使用 Docusaurus 2 为每个文档页面自定义主题
Custom Theme Per Doc Page with Docusaurus 2
我一直在玩弄 Docusaurus 2 上的自定义主题,并且我已经成功扩展了组件,例如 "wrapping theme components" 的 DocItem。我想知道 Docusaurus 2 是否支持每页不同的文档主题。例如,我想创建一个 2 列布局主题,select 一些我将使用该主题的文档页面,而其他页面将继续使用默认的 Docusaurus 主题。
我在想象文档前面的内容,例如:
---
id: doc1
theme: twocol
title: Style Guide
sidebar_label: Style Guide
slug: /
---
当 运行 围绕 Docusaurus 文档时,我还没有找到任何东西,所以希望能在这里得到一个快速的答案。
从 Docusaurus discord 频道得到很好的提示后,我想出了如何做到这一点。我创建了以下 ThemeSelector
组件:
// Select a theme using the `theme` front matter
import React from 'react';
import OriginalDocItem from "@theme-original/DocItem";
import TwoColDocItem from "../TwoColDocItem"
export default function ThemeSelector(props) {
const { content: DocContent } = props;
const { frontMatter: { theme } } = DocContent;
switch (theme) {
case "twocol":
return <TwoColDocItem {...props} />
default:
return <OriginalDocItem {...props} />
}
}
这只是根据doc文件的前面内容选择合适的布局。
TwoColDocItem
布局如下所示:
// Two column layout for react
import React from 'react';
import OriginalDocItem from "@theme-original/DocItem";
import styles from "./style.module.css"
export default function TwoColDocItem(props) {
return (
<>
<div className={styles.row}>
<div className={styles.col}>
<OriginalDocItem {...props} />
</div>
<div className={styles.col}>
<div>Second Col</div>
</div>
</div>
</>
);
}
我一直在玩弄 Docusaurus 2 上的自定义主题,并且我已经成功扩展了组件,例如 "wrapping theme components" 的 DocItem。我想知道 Docusaurus 2 是否支持每页不同的文档主题。例如,我想创建一个 2 列布局主题,select 一些我将使用该主题的文档页面,而其他页面将继续使用默认的 Docusaurus 主题。
我在想象文档前面的内容,例如:
---
id: doc1
theme: twocol
title: Style Guide
sidebar_label: Style Guide
slug: /
---
当 运行 围绕 Docusaurus 文档时,我还没有找到任何东西,所以希望能在这里得到一个快速的答案。
从 Docusaurus discord 频道得到很好的提示后,我想出了如何做到这一点。我创建了以下 ThemeSelector
组件:
// Select a theme using the `theme` front matter
import React from 'react';
import OriginalDocItem from "@theme-original/DocItem";
import TwoColDocItem from "../TwoColDocItem"
export default function ThemeSelector(props) {
const { content: DocContent } = props;
const { frontMatter: { theme } } = DocContent;
switch (theme) {
case "twocol":
return <TwoColDocItem {...props} />
default:
return <OriginalDocItem {...props} />
}
}
这只是根据doc文件的前面内容选择合适的布局。
TwoColDocItem
布局如下所示:
// Two column layout for react
import React from 'react';
import OriginalDocItem from "@theme-original/DocItem";
import styles from "./style.module.css"
export default function TwoColDocItem(props) {
return (
<>
<div className={styles.row}>
<div className={styles.col}>
<OriginalDocItem {...props} />
</div>
<div className={styles.col}>
<div>Second Col</div>
</div>
</div>
</>
);
}