MenuChevron Down
Layout - Docs - Artefact

Layout

Layout
Apresentacional

Introdução

Aninhe um <Layout> dentro do content ou de outros filhos aninhados de outro <Layout> para construir estruturas compostas, por exemplo: um Layout externo com um cabeçalho/rodapé de página e um Layout interno que abriga um trilho de navegação lateral.

Uso

Cabeçalho + Conteúdo + Rodapé

Sem sider, as partes se empilham em uma única coluna.

Header

Content

Footer

import { Layout } from "../components/ui";

export default function MyPage() {
  return (
    <Layout
      header={<SiteHeader />}
      content={<Article />}
      footer={<SiteFooter />}
    />
  );
}

Cabeçalho + Barra lateral + Conteúdo

Passar sider o envolve junto com content em uma linha. siderWidth seleciona a largura do trilho (sm 14rem, md 16rem padrão, lg 18rem); siderHideBelow oculta o trilho abaixo de um breakpoint para telas pequenas.

Dashboard

Content next to the sider

import { Layout } from "../components/ui";

export default function MyPage() {
  return (
    <Layout
      header={<SiteHeader />}
      sider={<Sidenav />}
      siderWidth="sm"
      siderHideBelow="md"
      content={<Article />}
    />
  );
}

Cabeçalho e barra lateral fixos

stickyHeader fixa o cabeçalho no topo da rolagem da página. stickySider fixa a barra lateral abaixo dele e rola seu próprio conteúdo excedente — útil para uma navegação longa ao lado de um conteúdo curto, ou vice-versa. fullHeight preenche todo o viewport para a estrutura de página mais externa.

import { Layout } from "../components/ui";

export default function DocsPage() {
  return (
    <Layout
      fullHeight
      stickyHeader
      stickySider
      header={<SiteHeader />}
      sider={<DocsSidenav />}
      siderHideBelow="md"
      content={<Article />}
    />
  );
}

Layout aninhado

Aninhe um <Layout> dentro de content quando o cabeçalho/rodapé abrangem toda a largura mas apenas parte do corpo precisa de um trilho lateral:

import { Layout } from "../components/ui";

export default function MyPage() {
  return (
    <Layout
      header={<SiteHeader />}
      content={
        <Layout sider={<Sidenav />} content={<Article />} />
      }
      footer={<SiteFooter />}
    />
  );
}

Construtor de páginas do CMS

Este componente está disponível como um bloco layout no Construtor de Páginas (content/pages/*.json). header, sider, content e footer são cada um uma lista de blocos de componentes — qualquer tipo de bloco funciona, incluindo outro layout para estruturas aninhadas:

{
  "type": "layout",
  "siderWidth": "sm",
  "siderHideBelow": "md",
  "header": [
    { "type": "heading", "text": "Dashboard", "as": "h3", "size": "lg" }
  ],
  "sider": [
    {
      "type": "stack",
      "direction": "vertical",
      "gap": "2",
      "children": [
        { "type": "link", "text": "Overview", "href": "#" },
        { "type": "link", "text": "Reports", "href": "#" }
      ]
    }
  ],
  "content": [
    { "type": "text", "content": "Pick a page from the rail on the left." }
  ],
  "footer": [
    { "type": "text", "size": "sm", "content": "© 2026 Acme" }
  ]
}

Deixar a lista de uma parte vazia (ou omiti-la) pula completamente o elemento envolvente dessa parte — um campo opcional não alterado como siderWidth/siderHideBelow chega como "" vindo do CMS e é tratado como não definido, recorrendo ao valor padrão do componente.

Propriedades

Layout

PropTypeDescription
header`string | JSX.Element`Renderizado dentro de um <header> semântico acima do corpo. (Somente API abreviada)
sider`string | JSX.Element`Renderizado dentro de um trilho <aside> semântico. Sua presença muda o corpo para uma linha de barra lateral + conteúdo. (Somente API abreviada)
content`string | JSX.Element`Renderizado dentro de um <main> semântico. children é anexado após ele. (Somente API abreviada)
footer`string | JSX.Element`Renderizado dentro de um <footer> semântico abaixo do corpo. (Somente API abreviada)
fullHeightbooleanPreenche a altura do viewport — para a estrutura de página mais externa.
stickyHeaderbooleanFixa o cabeçalho no topo da rolagem da página.
stickySiderbooleanFixa a barra lateral abaixo de um cabeçalho fixo; ela rola internamente.
siderWidth`"sm" | "md" | "lg"`Largura do trilho lateral: sm (14rem), md (16rem, padrão), lg (18rem).
siderHideBelow`"sm" | "md" | "lg"`Oculta a barra lateral abaixo deste breakpoint. Combine com uma divulgação no fluxo.
hasSiderbooleanForça manualmente a direção do layout para linha. (API composta)
headerClassstringClasse extra para a parte <header>. (Somente API abreviada)
siderClassstringClasse extra para a parte <aside>. (Somente API abreviada)
contentClassstringClasse extra para a parte <main>. (Somente API abreviada)
footerClassstringClasse extra para a parte <footer>. (Somente API abreviada)
bodyClassstringClasse extra para o contêiner de linha ao redor de barra lateral + conteúdo (só é renderizado quando sider é definido).
childrenanyFilhos a renderizar dentro da estrutura do layout.
classstringClasses CSS personalizadas para o elemento raiz.