Page Layout
Em andamentoO molde de toda página do site: link "Pular para o conteúdo", Navbar, o <main> que recebe o conteúdo e o Footer — e, em volta de tudo, a configuração que faz as animações respeitarem o movimento reduzido.
- Função
- Navegação e estrutura
- Também chamado de
- molde de página, template, layout, casca
- Mora em
- app/components/templates/PageLayout.tsx
- Última mudança
- 2026-09-29
Prévia
A peça ao vivo, vinda da ficha, na largura escolhida. Em larguras fixas, ela roda num quadro do tamanho de uma tela de verdade.
1280px, em tamanho real
Variantes na ficha
Lidas da ficha no build, na ordem do palco. Cada uma abre sozinha, sem o styleguide em volta — é o endereço que o palco carrega.
Quando usar
Em volta de toda página do site: é ele que garante o link de pular, os marcos e o movimento reduzido.
Faça
- Passe só o conteúdo da página como filho; menu e rodapé já estão.
- Numa landing de campanha ou numa inscrição sem menu,
cabecalho={null}(e, se for o caso,rodape={null}): o link de pular e o<main>continuam (E70). Ou passe outro cabeçalho no lugar. - Deixe o primeiro título da página (
h1) no começo do conteúdo, logo depois do salto. - Importe
ID_DO_CONTEUDOse precisar apontar para o início do conteúdo.
Evite
- Encaixar dentro de um contêiner com
transformsem saber: a Navbar éfixede passa a se prender a ele. - Tirar o link de pular: com a Navbar, são mais de quinze paradas antes do conteúdo.
Quando não usar. Numa página de campanha que não leva o menu nem o rodapé do site; nesse caso, marque o <main id={ID_DO_CONTEUDO}> à mão. Dentro de outra página, nunca: são dois <main>.
Nota de uso
Traz o link de pular para o conteúdo e o <main tabIndex={-1}> que o recebe, além do MotionConfig reducedMotion="user" que faz o sistema inteiro respeitar a preferência. Monta uma Navbar fixed: ao encaixá-lo dentro de outro contêiner, lembre que fixed só se prende a um ancestral com transform.
Anatomia
As partes, na ordem em que o olho — e o teclado — passam.
- Pular para o conteúdo — Primeiro elemento focável; invisível até receber foco.
- Cabeçalho — `cabecalho`: a Navbar, por padrão — ou o que for passado, ou nada.
- Conteúdo — `<main id="conteudo" tabIndex={-1}>`, que ocupa o espaço que sobra.
- Rodapé — `rodape`: o Footer, por padrão.
Estados
Os estados que a peça tem no código, e o que muda em cada um.
| Estado | O que muda |
|---|---|
| Link de pular escondido | sr-only: fora da tela, mas na ordem de Tab. |
| Link de pular com foco | Aparece no canto superior esquerdo, com fundo --card, sombra e anel de foco. |
Comportamento
| Situação | O que acontece |
|---|---|
| Enter no link de pular | O foco vai ao <main> — medido — e o próximo Tab é o primeiro link do conteúdo. |
| Movimento reduzido no sistema | MotionConfig reducedMotion="user" faz as animações da biblioteca motion pularem o deslocamento, em toda a árvore. |
| Sem menu (`cabecalho={null}`) | Sem banner; o link de pular e o main continuam — conferido no teste da ficha. |
Relacionados
Como usar no código
A importação e o menor uso, lidos do arquivo. O … marca as props obrigatórias.
import { PageLayout } from '@/app/components/templates/PageLayout';
<PageLayout>…</PageLayout>Propriedades
Lidas do código da peça no build — não escritas à mão.
| Prop | Tipo | Padrão | Obrigatória | Descrição |
|---|---|---|---|---|
children | React.ReactNode | — | sim | — |
cabecalho | React.ReactNode | <Navbar /> | não | O topo da página (E70). Padrão: a Navbar. Passe null numa landing de campanha ou numa inscrição sem menu — o link de pular e o <main> continuam, e a página não precisa recriar a estrutura. |
rodape | React.ReactNode | <Footer /> | não | O pé da página (E70). Padrão: o Footer; null para tirar. |
Aceita também: React.HTMLAttributes<HTMLDivElement>.
Tokens de cor
Os tokens semânticos que o código da peça usa, com o valor de hoje em app/globals.css.
| Token | Valor | Usado como |
|---|---|---|
--muted | #F4F6F9 | bg-muted |
Teclado
| Tecla | Faz |
|---|---|
| Tab | A primeira parada é "Pular para o conteúdo" — medido; depois vêm a Navbar, o conteúdo e o Footer. |
| Enter | No link de pular, leva o foco ao início do conteúdo — medido. |
Leitor de tela
O que é anunciado, e por quê.
- A página ganha os três marcos:
banner(Navbar),mainecontentinfo(Footer) — os de fora somem quando o cabeçalho ou o rodapé sãonull. - Aceita
refe os atributos de<div>na raiz (E70). - O
<main>temtabIndex={-1}para receber o foco do salto sem entrar na ordem de Tab.
O que sustenta o estado
Esta peça usa estatico. O estado dela é o de quem já foi ouvido com leitor de tela nesses padrões — e não uma passada sobre esta peça em específico.
Falta ouvir: estatico — ver docs/a11y-screen-reader-checklist.md.
Status e recursos
| Tipo | Recurso | Status |
|---|---|---|
| Código | app/components/templates/PageLayout.tsx | Disponível |
| Ficha | Storybook (abre em outra aba) | Disponível |
| Teste de acessibilidade | axe em npm run test | No gate de todo commit |
| Leitor de tela | Passada da E33 | Falta ouvir |
| Design | Figma | Desativado até a Fase 2 |
Histórico
Os últimos commits que tocaram o arquivo, lidos do git no build.
b2261802026-09-29E115: LinkDeNavegacao — o link da barra sai de dentro da Navbar
O histórico completo está no GitHub (abre em outra aba).