Skip to content
Navigation & LayoutPro

App Layout

The app shell: sticky navbar and sidebar over a scrolling page, aside, banner and footer, skip link, and a drawer below 64rem.

Modes

The shell around every screen. It renders the landmarks (banner, navigation, main, aside, contentinfo) and a skip link first, measures the header so nothing focused ever hides under it (WCAG 2.4.11), and moves focus to the new heading on route changes with useRouteFocus. Each example below is its own browser window; to fit this page they switch to the drawer below 40rem instead of the default 64rem (drawerBelow).

ModePurposeBenefitBest for
Document scrollThe page scrolls; navbar and sidebar stick.Scroll restoration, printing, anchors and sticky elements inside the page all work as the browser intends. The default.Almost every app
Pane scrollThe shell fills the screen and only the content scrolls.Chrome never moves; the content keeps its own scroll position.Editors, inboxes, canvases, virtual grids
With asideA named right-hand panel for details, help or activity.Context next to the work, open or closed on its own; a drawer on small screens.Detail views, ticket systems
With bannerA bar above everything: viewing as, offline, trial.Its height is measured, so the sticky header and anchors move with it.Impersonation, system notices
Contained widthThe content steps 1280 → 1620 → 2160 px with the screen.Dashboards stay readable on a 34-inch monitor.Settings, forms, reading
Edge to edgeNo padding around the content.Tables and canvases run to the edges.Data tables, maps, boards
Mobile overlayBelow 64rem (drawerBelow) the sidebar becomes a drawer.One column, no sideways scrolling (WCAG 1.4.10); the drawer keeps focus until closed.Tablets and phones

Usage

Overview

Page content.

Installation

bash
npm install @wunderui/react

Then import what you need:

tsx
import {
  AppLayout,
  AppLayoutAsideTrigger,
  AppLayoutNavigationTrigger,
  AppLayoutProps,
} from "@wunderui/react"

Examples

Document scroll

The default. The page scrolls; the navbar sticks and the sidebar sticks below it with its own scroll. Press Tab once: the skip link comes first and jumps into the content.

WunderUI
2AV

Dashboard

Revenue€48.2K
Active users2,840
Open tasks17

Section 1. The page scrolls; the navbar and the sidebar stay where they are.

Section 2. The page scrolls; the navbar and the sidebar stay where they are.

Section 3. The page scrolls; the navbar and the sidebar stay where they are.

Section 4. The page scrolls; the navbar and the sidebar stay where they are.

Section 5. The page scrolls; the navbar and the sidebar stay where they are.

Section 6. The page scrolls; the navbar and the sidebar stay where they are.

Section 7. The page scrolls; the navbar and the sidebar stay where they are.

Section 8. The page scrolls; the navbar and the sidebar stay where they are.

Pane scroll

scroll="pane": the shell fills the viewport and only the content scrolls — for editors, inboxes and canvases. The scroll padding moves onto the content pane.

WunderUI
2AV

Dashboard

Revenue€48.2K
Active users2,840
Open tasks17

Section 1. The page scrolls; the navbar and the sidebar stay where they are.

Section 2. The page scrolls; the navbar and the sidebar stay where they are.

Section 3. The page scrolls; the navbar and the sidebar stay where they are.

Section 4. The page scrolls; the navbar and the sidebar stay where they are.

Section 5. The page scrolls; the navbar and the sidebar stay where they are.

Section 6. The page scrolls; the navbar and the sidebar stay where they are.

Section 7. The page scrolls; the navbar and the sidebar stay where they are.

Section 8. The page scrolls; the navbar and the sidebar stay where they are.

With aside

A named aside on the right with its own scroll (shown here without the sidebar so the content keeps its room). The panel button in the navbar closes and opens it (width, duration-base, ease-move); below 64rem it opens as a drawer.

WunderUI
2AV

Dashboard

Revenue€48.2K
Active users2,840
Open tasks17

Section 1. The page scrolls; the navbar and the sidebar stay where they are.

Section 2. The page scrolls; the navbar and the sidebar stay where they are.

Section 3. The page scrolls; the navbar and the sidebar stay where they are.

Section 4. The page scrolls; the navbar and the sidebar stay where they are.

Section 5. The page scrolls; the navbar and the sidebar stay where they are.

Section 6. The page scrolls; the navbar and the sidebar stay where they are.

Section 7. The page scrolls; the navbar and the sidebar stay where they are.

Section 8. The page scrolls; the navbar and the sidebar stay where they are.

With banner

A banner above the navbar. Its height is measured, so the sticky navbar sits below it and anchors land clear of both. End the session with × and everything moves up.

You are viewing the workspace as Anna Vogel.
WunderUI
2AV

Dashboard

Revenue€48.2K
Active users2,840
Open tasks17

Section 1. The page scrolls; the navbar and the sidebar stay where they are.

Section 2. The page scrolls; the navbar and the sidebar stay where they are.

Section 3. The page scrolls; the navbar and the sidebar stay where they are.

Section 4. The page scrolls; the navbar and the sidebar stay where they are.

Section 5. The page scrolls; the navbar and the sidebar stay where they are.

Section 6. The page scrolls; the navbar and the sidebar stay where they are.

Section 7. The page scrolls; the navbar and the sidebar stay where they are.

Section 8. The page scrolls; the navbar and the sidebar stay where they are.

Contained width

width="contained": the content stays at 1280 px here and steps up to 1620 and 2160 px on very wide screens.

WunderUI
2AV

Dashboard

Revenue€48.2K
Active users2,840
Open tasks17

Section 1. The page scrolls; the navbar and the sidebar stay where they are.

Section 2. The page scrolls; the navbar and the sidebar stay where they are.

Section 3. The page scrolls; the navbar and the sidebar stay where they are.

Section 4. The page scrolls; the navbar and the sidebar stay where they are.

Edge to edge

padding="none" for content that should touch the edges, like this table.

WunderUI
2AV
ProjectOwnerStatusBudget
Website relaunchAnna VogelLive€12,000
Mobile appBen OrtizIn review€15,000
Data platformClara WeissPlanned€18,000
Billing v2Anna VogelLive€21,000
OnboardingBen OrtizIn review€24,000
Design systemClara WeissPlanned€27,000
SearchAnna VogelLive€30,000
Website relaunchBen OrtizIn review€33,000
Mobile appClara WeissPlanned€36,000
Data platformAnna VogelLive€39,000
Billing v2Ben OrtizIn review€42,000
OnboardingClara WeissPlanned€45,000
Design systemAnna VogelLive€48,000
SearchBen OrtizIn review€51,000

Mobile overlay

Below the drawer breakpoint (64rem by default) the sidebar leaves the layout and the menu button opens it as a modal drawer: focus moves in, Escape or the scrim closes it, focus returns to the button.

WunderUI
2AV

Dashboard

Revenue€48.2K
Active users2,840
Open tasks17

Section 1. The page scrolls; the navbar and the sidebar stay where they are.

Section 2. The page scrolls; the navbar and the sidebar stay where they are.

Section 3. The page scrolls; the navbar and the sidebar stay where they are.

Section 4. The page scrolls; the navbar and the sidebar stay where they are.

In context

How the component is used inside real screens — the same compositions as the Usage section of the Figma page.

Project workspace

The navbar on top and the sidebar on the left frame the page; pick Inbox, Projects or Reports to change the content.

WunderUI
AL

Inbox

Mira Lindqvist

Checkout copy is ready for review

Jonas Weber

Invoice #4021 was paid

Lena Fischer

Can we move the demo to Friday?