EnterUI
DocsComponentsThemesExamplesDonation
Get Started
      • PageLayout
      • AppShell
      • SplitView
      • ResizablePanel

Default usage

  1. EnterUI
  2. /Docs
  3. /Layout and Utilities
  4. /App Layout
  5. /Shells and Panels
  6. /PageLayout
Updated 5 October 2026

PageLayout

Standard product page layout with header, optional toolbar, content, aside, and footer-action slots.

PageLayout owns the page-level grid so product views stay consistent without each route reinventing structure. Aside renders on the right by default; pass asideSide="left" for inspector-style layouts.

#Default usage

Page with aside

Pair PageLayout with PageHeader as the header slot.

Workspace

Releases

Body

Inspector
Code
<PageLayout
  aside={<div>Inspector</div>}
  header={<PageHeader eyebrow="Workspace" title="Releases" />}
>
  <p>Body</p>
</PageLayout>

#Import

Code
import { PageLayout } from "@froggdesign/enter-ui-react";

#Article layout and landmarks

variant="default" renders its content as a main landmark. variant="article" renders an article with reading-layout typography and a sticky aside (hidden at 1240px and below). Authored paragraphs and lists use a reading measure capped at 640px, with stronger body text than secondary metadata. Cards, tables, code blocks, and previews retain the full content width and their own typography. Pair it with Breadcrumb, Text, PageHeader, and SideNav variant="toc"; no article CSS overrides are needed. Do not nest the default PageLayout's main landmark inside AppShellMain; use direct layout primitives there, or the article variant when the content really is an article.

Reading layout

Authored copy stays readable while product content keeps its own width.

Workspace guide

Set up your team and choose the tools you need.

Start with a workspace, invite your team, and organize the work you share. The article owns its reading measure and text hierarchy without changing the components inside it.

  • Create a workspace.
  • Invite your team.

Team settings

This card retains its shared component typography.

#Landing layout

variant="landing" provides a centered 1160px marketing layout, responsive page padding and section spacing, and separated navigation and footer slots. Put the navigation in header and a PageHeader variant="hero" inside the main content. Compose sections with VStack, Grid, and Card; no page CSS is needed.

Landing spacing and aside columns apply only to that PageLayout's own slots. A nested component preview does not inherit the surrounding layout's padding, column count, or aside position. Article layout likewise keeps its content spacing and aside visibility local to its own slots.

Code
<PageLayout variant="landing" header={<Link href="/">Portal</Link>}>
  <PageHeader variant="hero" title="Your customer workspace, connected." />
  <VStack as="section" gap={24} align="stretch">
    <SectionHeader title="Everything in its place" />
    <Grid min={260} gap={20}>{/* Feature cards */}</Grid>
  </VStack>
</PageLayout>

#Storefront layout

variant="storefront" provides a standalone consumer application canvas with a centered 1200px content width, neutral background, and responsive 16–40px side gutters. Navigation and footer slots remain compact. Content sections use a 32px gap and vertical padding, reduced to 24px at viewport widths of 600px and below. Short pages keep their natural row heights within a viewport-height canvas. Optional aside columns continue to stack below 900px.

Compose the navigation with HStack, and put the page title and content inside the main slot. The variant styles only its own layout slots, so nested cards, forms, and component previews keep their native EnterUI appearance.

Standalone storefront

A compact consumer application shell with shared navigation and footer slots.

Roam

Explore stays

Find your next stay

Compare places, review your itinerary, and book with confidence.

A place to slow down

Browse stays with clear prices and flexible dates.

Plan a stay that fits your day.

Code
<PageLayout
  variant="storefront"
  header={
    <HStack justify="between" wrap gap={16}>
      <Text weight="semibold">Roam</Text>
      <Link href="/stays">Explore stays</Link>
    </HStack>
  }
  footerActions={<Text size="sm" tone="muted">Booking help</Text>}
>
  <PageHeader title="Find your next stay" />
  <Grid min={280} gap={24}>{/* Stay cards */}</Grid>
</PageLayout>

#Accessibility

PageLayout wraps the header in <header>, the main content in <main>, and the aside in <aside> so the page exposes proper landmarks.

#API

  • variant: "default", "article", "landing", or "storefront".
  • header: slot rendered above the content.
  • toolbar: optional sticky toolbar slot rendered between header and content.
  • aside: optional aside slot.
  • asideSide: "left" or "right" (default).
  • footerActions: bottom action bar slot.

#Styling

Every exported component accepts className. EnterUI styles use .eui-* classes and --eui-* variables mapped from FroggDesign theme tokens.

PreviousDisclosure
NextAppShell
On this page
  • Default usage
  • Import
  • Article layout and landmarks
  • Landing layout
  • Storefront layout
  • Accessibility
  • API
  • Styling