Skip to content

Layout & structure

IContainer

A centred, max-width wrapper with the page's horizontal gutter. Use one per page region instead of repeating mx-auto max-w-… px-… by hand.

vue
<IContainer size="lg">
  <IPageHeader title="Invoices" />
  <ITable :columns="columns" :rows="rows" />
</IContainer>

Sizes

Every size is wider than this column, so the five are drawn to scale against xl:

sm768px
md1024px
lg1152px
xl1280px
fullno cap
sizeMax width
smmax-w-3xl — 768px
mdmax-w-5xl — 1024px
lgmax-w-6xl — 1152px
xlmax-w-7xl — 1280px (default)
fullNo maximum; still centres and still takes the gutter

A container caps a whole page. For a readable line length, constrain the text itself inside one.

Gutter

The gutter is the horizontal padding that keeps content off the window edge on small screens. none is for when the child draws its own — a full-bleed image, or a table that should touch the edges on a phone.

gutter none
gutter sm
gutter md
gutter lg

Inside the app shell

IAppShell sets no width of its own. Put a container inside its main region:

vue
<IAppShell>
  <template #sidebar>
    <ISidebar :items="sections" />
  </template>

  <IContainer class="py-8">
    <IPageHeader title="Invoices" />
    <ITable :columns="columns" :rows="rows" />
  </IContainer>
</IAppShell>

Props

PropTypeDefaultDescription
size'sm' | 'md' | 'lg' | 'xl' | 'full''xl'Maximum width
gutter'none' | 'sm' | 'md' | 'lg''md'Horizontal padding
asstring'div'Element to render
asChildbooleanfalseRender the child instead, forwarding props
unstyledbooleanDrop built-in classes
classstringMerged with the built-in classes
ui{ root? }Per-slot class overrides

The widths come from Tailwind v4's width scale.