PageLayoutコンポーネントは、ヘッダー、ナビゲーション、ボディ、フッターの4つの領域からなる構造化されたCSSグリッドレイアウトを提供します。ポータル全体で一貫したページ構造を作成するために使われます。
レイアウトは以下の領域を持つCSSグリッドを使用しています。
Header — 上部は幅全体にまたがっています。通常、保存・更新ボタンやページタイトル付きの MenuBar が含まれています。Navigation — ヘッダーの左列。サイドナビゲーションメニューに使用。巻物は本文とは独立して書かれます。Body — メインコンテンツエリア。独立してスクロールし、自動的にパディングを受け取る。Footer — 下の幅が全幅にわたっている。通常、著作権やステータスに関する情報が含まれています。// ReactのPageLayoutは、プロップ(ヘッダー/ナビゲーション/)でスロットの内容を取ります
// Body/フッター)を用いると、入れ子状の要素の代わりに
// スロット制約を強制する。左側のRazorマークアップに相当します。
<PageLayout
header={
<>
<SaveContextButton />
<RefreshContextButton />
</>
}
navigation={/* サイドナビゲーションコンテンツ */}
body={/* メインページの内容 */}
footer={<span>© マイ・カンパニー 2026</span>}
/><PageLayout>
<Header>
<MenuBar>
<SaveContextButton />
<RefreshContextButton />
</MenuBar>
</Header>
<Navigation>
<!-- サイドナビゲーションコンテンツ -->
</Navigation>
<Body>
<!-- メインページの内容 -->
</Body>
<Footer>
<FluentLabel>© マイ・カンパニー 2026</FluentLabel>
</Footer>
</PageLayout>各エリアは HeaderVisible、 NavigationVisible、 FooterVisible のパラメータを使って表示または隠すことができます。非表示になると、そのエリアはグリッドレイアウトから完全に消されます。
<PageLayout
headerVisible
navigationVisible={false}
footerVisible
header="ページタイトル"
body="サイドナビゲーションのないコンテンツ"
footer="フッター"
/><PageLayout HeaderVisible="true"
NavigationVisible="false"
FooterVisible="true">
<Header>ページタイトル</Header>
<Body>サイドナビゲーションのないコンテンツ</Body>
<Footer>フッター</Footer>
</PageLayout>各領域はカスタムスタイリング用の Class パラメータと Style パラメータ(例: HeaderClass、 HeaderStyle、 BodyClass、 BodyStyleなど)の両方をサポートしています。最上層コンテナは Class と Styleもサポートしています。
<PageLayout
className="my-page"
style={{ minHeight: '100vh' }}
headerClassName="my-header"
headerStyle={{ backgroundColor: 'var(--colorNeutralBackground5)' }}
bodyClassName="my-body"
bodyStyle={{ padding: '2rem' }}
header="スタイルヘッダー"
body="スタイルドボディ"
/><PageLayout HeaderClass="my-header"
HeaderStyle="background-color: var(--neutral-layer-4);"
BodyClass="my-body"
BodyStyle="padding: 2rem;"
Class="my-page"
Style="min-height: 100vh;">
<Header>スタイルヘッダー</Header>
<Body>スタイルドボディ</Body>
</PageLayout>PageLayoutを別のPageLayoutのBodyの中に入れ子にしてサブページレイアウトを作成することができます。子レイアウトは親を自動で検出し、ヘッダーの枠取りスタイリングを減らしたchild-layoutCSSクラスを適用します。
// ネスティングも同じで、内側を<PageLayout>体のスロットに</PageLayout>通します。
// PageLayoutNestingContextは親を自動検出し、
// 子レイアウトのバリアント(より細いヘッダー枠、親の本文を埋める)
// ビューポートの代わりにエリアを使います。
<PageLayout
header="メインヘッダー"
body={
<PageLayout
header={<SaveContextButton />}
body={/* サブページの内容 */}
/>
}
/><PageLayout>
<Header>メインヘッダー</Header>
<Body>
<PageLayout>
<Header>
<MenuBar>
<SaveContextButton />
</MenuBar>
</Header>
<Body>
<!-- サブページ内容 -->
</Body>
</PageLayout>
</Body>
</PageLayout>本文部分はヘッダーやフッターとは独立してスクロールし、固定されています。ページ間を移動する際、本文は自動的にスクロールして上部に向かいます。ナビゲーションエリアも独立してスクロールします。
以下の例は、4つの地域すべてが人口を持つ PageLayout を示しています。
以下の操作で各エリアの可視性を切り替え、サイズ調整可能なナビゲーション動作を調整してください。スプリッターのオン/オフ、localStorageの永続性のオフ、デフォルトのドラッグ幅/最小幅/最大幅の調整です。ナビゲーション/ボディ境界のハンドルをドラッグしてサイズを変えるか、ダブルクリックでデフォルトの幅にリセットします。
名称 | 種類 | デフォルト | 概要 |
|---|---|---|---|
Body | RenderFragment? | ||
BodyClass | string? | ||
BodyStyle | string? | ||
DefaultNavigationWidth | int | 280 | |
EnableNavigationResizing | bool | True | |
Footer | RenderFragment? | ||
FooterClass | string? | ||
FooterStyle | string? | ||
FooterVisible | bool | True | |
Header | RenderFragment? | ||
HeaderClass | string? | ||
HeaderStyle | string? | ||
HeaderVisible | bool | True | |
MaxNavigationWidth | int | 480 | |
MinNavigationWidth | int | 200 | |
Navigation | RenderFragment? | ||
NavigationClass | string? | ||
NavigationResizeHandleLabel | string | Resize navigation | |
NavigationResizeStorageKey | string | ppp-page-layout-nav-width | |
NavigationStyle | string? | ||
NavigationVisible | bool | True | |
PersistNavigationWidth | bool | True | |
ValidationSummaryVisible | bool | True |
BodyBodyClassBodyStyleDefaultNavigationWidthEnableNavigationResizingFooterFooterClassFooterStyleFooterVisibleHeaderHeaderClassHeaderStyleHeaderVisibleMaxNavigationWidthMinNavigationWidthNavigationNavigationClassNavigationResizeHandleLabelNavigationResizeStorageKeyNavigationStyleNavigationVisiblePersistNavigationWidthValidationSummaryVisible