コンテンツへスキップ
Fumadocs

Spacious レイアウト

Docs レイアウトよりも余白を広くとったバージョン

<DocsLayout /> よりもゆったりとしたバージョンです。ページはサイドバーの横にあるインセットパネル内に配置され、ページ単位のアクションはパネルの上部に表示されます。

Spacious Layout

Base UI のみ

Spacious レイアウトは、Fumadocs UI の Base UI 版 (@fumadocs/base-ui) でのみ利用できます。

Install via Fumadocs CLI

For advanced customization that supported options cannot suffice.

npx @fumadocs/cli@latest customize

使い方

fumadocs-ui/layouts/spacious を使用して、Spacious レイアウトを有効にします。

layout.tsx
import { DocsLayout } from 'fumadocs-ui/layouts/spacious'; 
import { baseOptions } from '@/lib/layout.shared';
import { source } from '@/lib/source';
import type { ReactNode } from 'react';

export default function Layout({ children }: { children: ReactNode }) {
  return (
    <DocsLayout {...baseOptions()} tree={source.getPageTree()}>
      {children}
    </DocsLayout>
  );
}

ページの import も忘れずに更新してください。

page.tsx
import { ... } from 'fumadocs-ui/layouts/docs/page'; 
import { ... } from 'fumadocs-ui/layouts/spacious/page'; 

スタイル

Glass レイアウトと同様に、Spacious レイアウトのスタイルは CSS プリセットに含まれていないため、このレイアウトを使用しない限り余分なコストはかかりません。Tailwind CSS ファイルでインポートしてください。

Tailwind CSS
@import 'tailwindcss';
@import 'fumadocs-ui/css/generated/spacious.css';
@import 'fumadocs-ui/css/neutral.css';
@import 'fumadocs-ui/css/preset.css';

注意事項

  • Spacious レイアウトはクライアントコンポーネントのため、サーバーコンポーネントからシリアライズできない props を渡すことはできません。
  • デスクトップでは、ウィンドウではなくパネル内でページがスクロールします。

設定

オプションは Docs レイアウト から継承されますが、以下の点が若干異なります。

  • sidebar オプションは defaultOpenLevel と prefetch のみを受け付けます。サイドバーは常に折りたたみ可能です。
  • 追加のオプションがあります(後述)。

レイアウトタブ

レイアウトタブは tabs prop で設定します。追加方法はリンク先のドキュメントを参照してください。タブはサイドバー上部のドロップダウンに表示されます。

layout.tsx
import { DocsLayout } from 'fumadocs-ui/layouts/spacious';
import { baseOptions } from '@/lib/layout.shared';
import { source } from '@/lib/source';
import type { ReactNode } from 'react';

export default function Layout({ children }: { children: ReactNode }) {
  return (
    <DocsLayout
      {...baseOptions()}
      tabs={
        {
          // タブをカスタマイズ
        }
      }
      tree={source.getPageTree()}
    >
      {children}
    </DocsLayout>
  );
}

AIチャット

レイアウトに AIに質問 を表示するには、開閉状態と変更ハンドラーを含む aiChat オブジェクトを渡します。

panel オプションを指定すると、チャットパネルのレンダリングはレイアウト側で行われます。幅の広い画面ではページの横にドッキングされ(目次はページヘッダー内に移動します)、小さい画面ではページの上にフローティング表示されます。

layout.tsx
'use client';
import { DocsLayout } from 'fumadocs-ui/layouts/spacious';
import { useState } from 'react';

export function Layout({ children }) {
  const [open, setOpen] = useState(false);

  return (
    <DocsLayout
      aiChat={{
        open,
        onOpenChange: setOpen,
        panel: <MyChat />,
      }}
      // ...
    >
      {children}
    </DocsLayout>
  );
}

スロット

Spacious レイアウトでは、共通のスロット(navTitle、themeSwitch、searchTrigger、languageSelect)に加えて、各パーツを上書きするための slots オプションが用意されています。

スロット説明
headerモバイル表示時のナビゲーションバーです。
sidebarサイドバー一式です。provider、main(デスクトップ)、drawer(モバイル)で構成されます。
actionsページ右上のアクションです。言語切り替えやオプションメニューなどが含まれます。
layout.tsx
import { DocsLayout } from 'fumadocs-ui/layouts/spacious';

<DocsLayout
  slots={{
    actions: MyActions, 
  }}
  // ...
/>;

Docs Page

ページコンポーネントは Docs Page とほぼ同じですが、いくつか違いがあります。

  • 目次はデフォルトで block スタイルになります。
  • tableOfContentPopover では、ページヘッダー内の目次ドロップダウンと、モバイル表示時の目次バーを設定します。
  • slots.toc には、ページヘッダー内のドロップダウン用に dropdown コンポーネントを渡せます。
  • container スロットはありません。

How is this guide?

最終更新日