|
|
# ナビゲーション {#nav}
|
|
|
|
|
|
ナビはページ上部に表示されるナビゲーションバーです。サイトタイトル、グローバルメニューリンクなどを含みます。
|
|
|
|
|
|
## サイトタイトルとロゴ {#site-title-and-logo}
|
|
|
|
|
|
既定では、ナビには [`config.title`](./site-config#title) の値が表示されます。ナビに表示する文字列を変更したい場合は、`themeConfig.siteTitle` にカスタム文字列を指定します。
|
|
|
|
|
|
```js
|
|
|
export default {
|
|
|
themeConfig: {
|
|
|
siteTitle: 'My Custom Title'
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
サイトのロゴがある場合は、画像へのパスを渡すと表示できます。ロゴは `public` 直下に配置し、絶対パスで指定してください。
|
|
|
|
|
|
```js
|
|
|
export default {
|
|
|
themeConfig: {
|
|
|
logo: '/my-logo.svg'
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
ロゴを追加すると、サイトタイトルと並んで表示されます。ロゴだけを表示したい場合は、`siteTitle` を `false` に設定してタイトル文字列を非表示にできます。
|
|
|
|
|
|
```js
|
|
|
export default {
|
|
|
themeConfig: {
|
|
|
logo: '/my-logo.svg',
|
|
|
siteTitle: false
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
ダーク/ライトモードでロゴを切り替えたり、`alt` 属性を付けたい場合は、ロゴにオブジェクトを渡すこともできます。詳細は [`themeConfig.logo`](./default-theme-config#logo) を参照してください。
|
|
|
|
|
|
## ナビゲーションリンク {#navigation-links}
|
|
|
|
|
|
`themeConfig.nav` オプションでナビにリンクを追加できます。
|
|
|
|
|
|
```js
|
|
|
export default {
|
|
|
themeConfig: {
|
|
|
nav: [
|
|
|
{ text: 'Guide', link: '/guide' },
|
|
|
{ text: 'Config', link: '/config' },
|
|
|
{ text: 'Changelog', link: 'https://github.com/...' }
|
|
|
]
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
`text` はナビに表示される文字列、`link` はクリック時に遷移するリンクです。内部リンクは `.md` 拡張子を付けず、必ず `/` で始めるようにしてください。
|
|
|
|
|
|
`link` には、[`PageData`](./runtime-api#usedata) を受け取ってパスを返す関数を指定することもできます。
|
|
|
|
|
|
ナビリンクはドロップダウンメニューにもできます。リンクオプションに `items` を設定してください。
|
|
|
|
|
|
```js
|
|
|
export default {
|
|
|
themeConfig: {
|
|
|
nav: [
|
|
|
{ text: 'Guide', link: '/guide' },
|
|
|
{
|
|
|
text: 'Dropdown Menu',
|
|
|
items: [
|
|
|
{ text: 'Item A', link: '/item-1' },
|
|
|
{ text: 'Item B', link: '/item-2' },
|
|
|
{ text: 'Item C', link: '/item-3' }
|
|
|
]
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
なお、ドロップダウンのタイトル(上の例の `Dropdown Menu`)には `link` は設定できません。ドロップダウンを開くボタンになるためです。
|
|
|
|
|
|
さらに、ドロップダウン内を「セクション」に分けることもできます(入れ子の `items` を使います)。
|
|
|
|
|
|
```js
|
|
|
export default {
|
|
|
themeConfig: {
|
|
|
nav: [
|
|
|
{ text: 'Guide', link: '/guide' },
|
|
|
{
|
|
|
text: 'Dropdown Menu',
|
|
|
items: [
|
|
|
{
|
|
|
// セクションのタイトル
|
|
|
text: 'Section A Title',
|
|
|
items: [
|
|
|
{ text: 'Section A Item A', link: '...' },
|
|
|
{ text: 'Section B Item B', link: '...' }
|
|
|
]
|
|
|
}
|
|
|
]
|
|
|
},
|
|
|
{
|
|
|
text: 'Dropdown Menu',
|
|
|
items: [
|
|
|
{
|
|
|
// タイトルは省略することも可能
|
|
|
items: [
|
|
|
{ text: 'Section A Item A', link: '...' },
|
|
|
{ text: 'Section B Item B', link: '...' }
|
|
|
]
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
### リンクの「アクティブ」状態をカスタマイズ {#customize-link-s-active-state}
|
|
|
|
|
|
現在のページが特定のパス配下にあるとき、該当するナビ項目がハイライトされます。一致させるパスをカスタマイズしたい場合は、`activeMatch` に **正規表現文字列** を指定します。
|
|
|
|
|
|
```js
|
|
|
export default {
|
|
|
themeConfig: {
|
|
|
nav: [
|
|
|
// ユーザーが `/config/` 配下にいるときにアクティブになる
|
|
|
{
|
|
|
text: 'Guide',
|
|
|
link: '/guide',
|
|
|
activeMatch: '/config/'
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
::: warning
|
|
|
`activeMatch` は正規表現 **オブジェクト** ではなく、**文字列** で指定してください。ビルド時のシリアライズの都合で `RegExp` は使用できません。
|
|
|
:::
|
|
|
|
|
|
### リンクの `target` と `rel` をカスタマイズ {#customize-link-s-target-and-rel-attributes}
|
|
|
|
|
|
既定では、リンクが外部かどうかに応じて VitePress が `target` と `rel` を自動設定します。必要であれば明示的に指定することもできます。
|
|
|
|
|
|
```js
|
|
|
export default {
|
|
|
themeConfig: {
|
|
|
nav: [
|
|
|
{
|
|
|
text: 'Merchandise',
|
|
|
link: 'https://www.thegithubshop.com/',
|
|
|
target: '_self',
|
|
|
rel: 'sponsored'
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
## ソーシャルリン<E383AA> {#social-links}
|
|
|
|
|
|
[`socialLinks`](./default-theme-config#sociallinks) を参照してください。
|
|
|
|
|
|
## カスタムコンポーネント {#custom-components}
|
|
|
|
|
|
`component` オプションを使って、ナビゲーションバーにカスタムコンポーネントを配置できます。`component` には Vue コンポーネント名を指定し、[Theme.enhanceApp](../guide/custom-theme#theme-interface) で **グローバル登録** しておく必要があります。
|
|
|
|
|
|
```js [.vitepress/config.js]
|
|
|
export default {
|
|
|
themeConfig: {
|
|
|
nav: [
|
|
|
{
|
|
|
text: 'My Menu',
|
|
|
items: [
|
|
|
{
|
|
|
component: 'MyCustomComponent',
|
|
|
// コンポーネントに渡す任意の props
|
|
|
props: {
|
|
|
title: 'My Custom Component'
|
|
|
}
|
|
|
}
|
|
|
]
|
|
|
},
|
|
|
{
|
|
|
component: 'AnotherCustomComponent'
|
|
|
}
|
|
|
]
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
次に、コンポーネントをグローバル登録します。
|
|
|
|
|
|
```js [.vitepress/theme/index.js]
|
|
|
import DefaultTheme from 'vitepress/theme'
|
|
|
|
|
|
import MyCustomComponent from './components/MyCustomComponent.vue'
|
|
|
import AnotherCustomComponent from './components/AnotherCustomComponent.vue'
|
|
|
|
|
|
/** @type {import('vitepress').Theme} */
|
|
|
export default {
|
|
|
extends: DefaultTheme,
|
|
|
enhanceApp({ app }) {
|
|
|
app.component('MyCustomComponent', MyCustomComponent)
|
|
|
app.component('AnotherCustomComponent', AnotherCustomComponent)
|
|
|
}
|
|
|
}
|
|
|
```
|
|
|
|
|
|
コンポーネントはナビゲーションバー内にレンダリングされます。VitePress は次の追加 props をコンポーネントに提供します。
|
|
|
|
|
|
- `screenMenu`: モバイルのナビメニュー内にあるかどうかを示す任意の boolean
|
|
|
|
|
|
e2e テスト内の例は[こちら](https://github.com/vuejs/vitepress/tree/main/__tests__/e2e/.vitepress)を参照してください。
|