Frontends com Vibecoding · Capítulo 11 de 35 · 29 min
Adaptar o layout ao celular e ao contêiner
Você passa a decidir o layout pelo espaço do componente, devolver os recortes do aparelho, medir o alvo do dedo e escolher o teclado de cada campo.
Este capítulo faz parte do curso gratuito Frontends com Vibecoding.
A unidade 100vh esconde o botão de confirmar atrás da barra de endereço do celular assim que a página abre, e o cliente desiste sem tocar em nada. Esse é o primeiro de quatro defeitos que a tela pequena cobra caro.
Os outros três vêm junto. A tela do celular muda de tamanho durante o uso e o dedo cobre uma área bem maior que o ponto tocado. O teclado errado custa toques a mais.
A medida de altura certa, o espaço devolvido nos cantos do aparelho, o tamanho de alvo por norma e o teclado certo resolvem os quatro, nessa ordem.
Ao terminar, você sabe testar a página no próprio celular como um cliente apressado: botão grande o bastante para o dedo, teclado certo em cada campo e nada escondido atrás do entalhe da tela. Tempo de leitura: cerca de 29 minutos, e o teste no celular, mais dez.
Tudo começa na unidade 100vh, que significa cem por cento da altura da área visível, o pedaço da página que cabe na tela. Ela conta essa área sem a barra de endereço do navegador.
No celular a barra costuma estar à vista quando a página abre, então o bloco nasce mais alto que o espaço real e o botão cai fora. A página ainda dá um pulo quando a barra some, porque arrastar a página para cima recolhe a barra e muda a altura disponível.
Duas unidades resolvem, e a diferença é qual estado da barra cada uma conta. A pequena (svh) conta com a barra à vista e garante que nada seja cortado na abertura. A dinâmica (dvh) acompanha o movimento da barra em tempo real.
Ver como texto
Três telas de celular lado a lado. Na primeira, o bloco medido em 100vh nasce mais alto que o espaço real, porque conta a tela sem a barra de endereço, e o botão de confirmar fica fora da tela, tracejado em vermelho. Na segunda, o bloco em svh conta a barra à vista e cabe inteiro, com o botão visível. Na terceira, a barra já sumiu na rolagem e o bloco em dvh cresce junto, com o botão no pé da tela.
Use a dinâmica no bloco de tela cheia. No botão que precisa aparecer logo, como o de continuar do checkout, use a pequena.
O segundo defeito são os recortes do aparelho: a câmera em cima e a barra de gestos embaixo. O navegador só desenha por baixo deles quando você pede, e quem pede precisa devolver o espaço. São dois passos, e pular o primeiro faz o segundo devolver zero.
No primeiro passo, uma linha na configuração de tela do site autoriza o desenho sob os recortes. No segundo, o recuo que o aparelho informa entra no espaçamento de todo elemento colado nas bordas, sempre somado a um mínimo seu. Em aparelho sem recorte esse recuo vale zero, e sem o mínimo o botão encosta na borda.
Quem pula esse cuidado vê o botão de confirmar meio escondido atrás da barra de gestos. O toque abre o menu do sistema em vez de confirmar o pedido. O defeito quase nunca aparece no seu aparelho, porque o tamanho do recorte muda de modelo para modelo.
Ver como texto
Esquema anatômico de uma tela de celular, com as cinco faixas que o layout precisa conhecer. No topo fica o recorte da câmera, de onde vem o recuo superior informado pelo sistema. Abaixo dele fica a barra de endereço do navegador, que aparece e some conforme a rolagem, e é ela que separa a altura grande da altura pequena. No meio fica a área de conteúdo, que a altura dinâmica acompanha em tempo real. Na parte de baixo fica a zona confortável do polegar, onde a ação principal deveria estar. No rodapé fica a barra de gestos do sistema, de onde vem o recuo inferior. Ignorar os dois recuos coloca o botão principal embaixo da barra de gestos, e o defeito aparece no aparelho de quem usa antes de aparecer no seu.
O dedo cobre uma área bem maior que o ponto tocado, e três normas dizem o tamanho do alvo. Alvo aqui é o retângulo sensível ao toque, não o desenho do ícone.
São 24 por 24 pixels no piso, critério 2.5.8 da WCAG 2.2 no nível AA. A Apple pede 44 e o Android pede 48.
A parte que quase todo mundo esquece é o espaço entre um alvo e o vizinho. Três alvos de 24 pixels colados passam no piso e continuam errados, porque o dedo cobre os três de uma vez.
Com 8 pixels de distância, o mesmo trio funciona. Quando o ícone precisa ser pequeno, aumente a área tocável pelo espaçamento interno, sem redesenhar o ícone.
Ver como texto
Os dois tamanhos de alvo de toque que interessam e o papel do espaçamento. O ícone de dezesseis por dezesseis pixels reprova o critério dois ponto cinco ponto oito do WCAG dois ponto dois, que pede vinte e quatro por vinte e quatro no nível AA. O alvo de vinte e quatro por vinte e quatro passa nesse piso. O alvo de quarenta e quatro por quarenta e quatro é o que a recomendação de usabilidade pede, e é o critério dois ponto cinco ponto cinco do nível AAA. Abaixo, dois alvos que passam no piso ficam colados e a pessoa erra o toque, porque o dedo cobre os dois; com oito pixels de espaço entre eles, o mesmo par funciona. O tamanho isolado não resolve, o espaçamento entra na conta.
O formulário é onde o celular cobra mais caro pelo descuido, porque cada campo errado custa toques a mais. Duas escolhas decidem quase tudo: o modo de entrada (inputmode), que define qual teclado sobe, e o preenchimento automático (autocomplete), que deixa o navegador completar o campo sozinho.
A armadilha mais comum é usar campo do tipo número para CPF, CEP e cartão. Esse tipo traz setas de aumentar e diminuir e perde o zero à esquerda do CEP, e nenhum dos três é um número que você vá somar. Use campo de texto com modo de entrada numérico, e o teclado certo sobe sem efeito colateral.
O preenchimento automático do código recebido por mensagem resolve o pior momento do formulário. O teclado oferece o código do SMS acima das teclas, e a pessoa não sai do site.
Ver como texto
Dois campos de CEP lado a lado, com um CEP ilustrativo que começa em zero. À esquerda, o campo do tipo número mostra o valor sem o zero à esquerda e exibe setas de aumentar e diminuir. À direita, o campo de texto com modo de entrada numérico preserva o zero. Embaixo, o teclado numérico do celular com uma sugestão acima das teclas, o código recebido por SMS, oferecido pelo preenchimento automático.
Quatro regras do manual de setembro de 2026 fecham a tela de celular. A primeira é a densidade, o espaço entre linhas e botões, que muda conforme o breakpoint, a largura em que o layout troca de arranjo. Apertada no computador e folgada no celular, porque um valor único erra num dos dois.
A segunda é o tema escuro feito de tokens, que são valores de cor guardados com nome, como a etiqueta na lata de tinta. Esses valores trocam de papel entre os dois temas. Cor fixa escrita em cada elemento é o que quebra no escuro. O peso da fonte sobe um degrau sobre fundo escuro, porque o traço fino some.
Terceira regra: toda janela modal tem fechamento visível e tocável, com alvo de 44 pixels, porque o gesto de tocar fora ninguém descobre sozinho.
A quarta é o campo que cresce com o conteúdo, entregue pelo field-sizing. Sem suporte, a caixa fica na altura fixa e rola por dentro.
Ver como texto
Grade com as quatro regras do manual de setembro de 2026 para a tela de celular. Densidade: folgada no celular e apertada no computador, porque um valor único erra num dos dois. Tema escuro: cores guardadas em tokens que trocam de papel, com o peso da fonte um degrau acima. Modal: botão de fechar visível, com alvo de 44 pixels. Campo que cresce: entregue pelo field-sizing; sem suporte, a caixa fica na altura fixa e rola por dentro.
Abra a tela mais importante do site no seu celular e role até o fim. Veja se a página pula quando a barra do navegador some e se algum botão fica fora da área visível. Testar só no computador, em modo de simulação, esconde esse defeito.
Meça os três menores botões e a distância entre eles na ferramenta de inspeção do navegador. Leve cada alvo a 44 pixels pelo espaçamento interno, sem redesenhar o ícone. Num botão de confirmar horário preso ao rodapé, é a altura dinâmica que impede a queda fora da área visível.
Troque CPF, CEP e cartão do tipo número para texto com modo de entrada numérico e confira se o zero à esquerda do CEP sobrevive. Está pronto quando nada se esconde atrás da barra e nenhum toque erra o alvo.
Faça o cartão se ajustar sozinho ao espaço que recebeu
Resolvida a medida da tela do aparelho, o layout passa a ser decidido pelo espaço de cada componente, com subgrid, alvenaria e consulta de suporte.
Um componente, que é o pedaço de tela repetido muitas vezes, como o cartão de produto, decide sozinho o layout pelo espaço que recebe, sem nenhuma programação. Com isso ele deixa de existir em duas versões separadas, uma para a lista e outra para a página interna.
Sete recursos nativos entregam esse cartão único. A seguir, o que cada um faz, o problema que ele tira da sua frente e o desenho de reserva para onde ainda não roda.
Ver como texto
Duas versões da mesma página larga, cada uma com uma área principal e uma barra lateral estreita, e o mesmo cartão nas duas áreas. Na de cima, com media query, o cartão pergunta pelo tamanho da tela: como a tela é larga, o cartão da barra lateral também tenta pôr imagem e texto lado a lado e fica espremido, marcado em vermelho. Na de baixo, com container query, cada cartão pergunta pelo espaço que o contêiner recebeu: na área principal fica lado a lado e na barra lateral empilha imagem sobre texto.
A container query é a pergunta sobre o espaço que o componente recebeu, e não sobre o tamanho da tela. Isso muda quem decide: o elemento que segura o cartão informa a largura disponível, e o cartão escolhe o arranjo.
Na prática, o cartão empilha imagem e texto quando recebe menos de 340 px. Acima disso, põe os dois lado a lado, com a mesma marcação em qualquer página. Num cartão de imóvel, isso apaga a segunda versão do componente, hoje mantida só para a lista de resultados.
A armadilha é declarar a consulta dentro do próprio cartão. Quem pergunta pelo espaço é sempre o elemento de fora, nunca ele mesmo.
Já a style query pergunta pelo valor de um token, o ajuste guardado com nome como a etiqueta na lata de tinta, em vez de perguntar pela largura. Você guarda ali a densidade que quer e o cartão aperta ou afrouxa sozinho. Onde ela ainda não roda, o cartão fica na densidade confortável.
Laboratório ao vivo: layout decidido pelo espaço
1. Arraste o canto
Densidade
Sofá de dois lugares
R$ 1.290cenário ilustrativo
arraste o canto inferior direito da caixa
Suporte: container query em navegador atual; style query no Firefox 138. Sem style query a densidade fica na confortável, e sem container query o cartão fica lado a lado quando cabe.
2. Alvenaria nativa
Suporte: grid-lanes no Safari 26, com Chrome e Firefox atrás de opção experimental. Sem suporte, a grade deixa buracos entre as linhas e os oito blocos continuam visíveis.
3. Altura que anima de auto
Ver os detalhes do pedido
Sofá de dois lugares, tecido cinza
Entrega em cinco dias úteis
Montagem inclusa na região
Troca em sete dias
text-wrap: balance
Grade em alvenaria sem biblioteca
text-wrap: pretty
Grade em alvenaria sem biblioteca
Suporte: interpolate-size no Chrome e no Edge 129, text-wrap pretty no Safari 26. Sem suporte, o detalhamento abre sem transição e o título quebra na linha padrão.
Grade, aqui, é o arranjo invisível de linhas e colunas que alinha os elementos da página. Subgrid é a grade filha que herda as linhas e colunas da grade de cima.
É ele que faz título, preço e botão de cartões vizinhos caírem na mesma altura, mesmo quando um título ocupa duas linhas e o outro, uma.
O plano B antigo era altura mínima fixa, que sobra espaço num cartão e corta texto no outro.
Grade em alvenaria é a galeria de alturas diferentes que se encaixa sem buraco, como a estante de caixas de tamanhos variados. Até 2026 ela exigia biblioteca, o pacote de código pronto, medindo cada bloco; agora a sintaxe grid-lanes faz isso dentro do próprio Grid.
Onde ela ainda não chegou, a grade comum deixa vãos entre as linhas e todos os blocos continuam visíveis.
Ver como texto
Duas galerias com os mesmos nove blocos de alturas diferentes, em três colunas. À esquerda, a grade comum alinha os blocos por linha, e cada linha tem a altura do bloco mais alto, o que deixa vãos vazios embaixo dos blocos baixos. À direita, a grade em alvenaria com grid-lanes empilha cada bloco logo abaixo do anterior na mesma coluna, sem buracos, como a estante de caixas de tamanhos variados.
Altura que anima de auto era o outro caso que obrigava a instalar biblioteca. Com interpolate-size e calc-size(), o navegador consegue animar até valores como auto, e o detalhamento de um pedido abre com transição escrita em duas linhas de CSS. Use em bloco pequeno, porque animar a página inteira faz o celular engasgar.
A outra troca é a ordem de leitura. Com reading-flow, a tecla Tab segue a ordem visual da grade, e o leitor de tela acompanha, sem reescrever a marcação. A armadilha é reordenar só pelo CSS, sem reading-flow: quem navega por teclado pula de um canto ao outro da tela sem entender por quê.
Dois ajustes de tipografia fecham o cartão. O text-box-trim remove o espaço fantasma que a fonte deixa acima e abaixo da letra, e o título passa a alinhar com o ícone sem margem negativa.
O text-wrap: pretty evita a palavra órfã sozinha na última linha do parágrafo. Onde falta suporte, o texto quebra na linha padrão e ninguém percebe a diferença.
Para ordenar o que vale adotar primeiro, sirva-se do Interop 2026, o acordo anual em que os fabricantes de navegador combinam o que vão implementar juntos. Ele lista 19 áreas de foco, 11 delas de CSS.
É assim que se organiza a melhoria progressiva: uma base que funciona em todo lugar e o enfeite só onde o navegador aceita. O critério para adotar cabe em duas frases. Use o recurso nativo atrás de uma consulta de suporte, desde que o desenho de reserva ainda cumpra a função. Segure a biblioteca para quando esse desenho quebra.
| Recurso | Onde já roda | Desenho de reserva sem suporte |
|---|---|---|
| Container query de tamanho | Baseline Widely Available desde 14 de agosto de 2025 | Cartão lado a lado quando cabe, empilhado quando não cabe |
| Container query de estilo | Baseline Newly Available em 19 de maio de 2026; Firefox 151 fechou o conjunto | A densidade fica na confortável |
| Subgrid | Baseline Widely Available desde 15 de março de 2026 | Altura mínima fixa nos cards |
| Masonry por grid-lanes | Safari 26; Chrome e Firefox em opção experimental, previsão 2026 | Grade comum com vãos, todos os blocos visíveis |
| calc-size() e interpolate-size | Chrome e Edge 129; foco do Interop 2026 | O bloco abre sem transição |
| reading-flow e reading-order | Chrome 137 | O Tab segue a ordem da marcação; reordene no HTML |
| text-box-trim | Chrome e Edge 133, Safari 18.2; Firefox sem suporte | O espaço fantasma fica, e nada quebra |
Cada linha entra atrás de @supports; a coluna da direita é o que o visitante sem o recurso vê.
Fonte: Manual de referência Recursos de frontend moderno, edição setembro de 2026 (Brasil GEO).
Escolha o componente que mais se repete no site e peça os sete recursos numa conversa só com o agente. Diga que o cartão da lista e o da página interna são o mesmo, e que o arranjo reage ao espaço recebido, não ao tamanho da tela.
Peça também que título, preço e botão caiam na mesma altura em todos os cartões da fileira, por subgrid. Altura mínima fixa no lugar dele sobra espaço num cartão e corta texto no outro.
Antes de aceitar a entrega, abra a página no celular mais antigo que você tiver. Está pronto quando cada recurso está atrás de uma consulta de suporte e nada some sem ele.
Guia prático: zonas seguras e piso de texto conferidos por script
No celular, o defeito que passa pela revisão é o texto que existe mas não se lê: pequeno demais, cortado no fim da linha ou escondido atrás da interface de quem exibe a página. Olhar a tela não pega isso, porque o olho completa o que falta. O curso de edição de vídeo estudado em 07/10/2026 resolve com dois limites escritos em número e um script que confere.
O primeiro limite são as zonas seguras. No vídeo vertical de 1080 por 1920 pixels, nada importante entra nos 220 pixels de cima nem nos 380 de baixo, onde o aplicativo põe nome do perfil, legenda, botões e descrição. O segundo é o piso de texto: 22 pixels para o que a fala cita e 18 para o resto, com um verificador que reprova qualquer texto abaixo de 17,5. A página tem as mesmas faixas reservadas: barra do navegador, barra fixa de cookies, botão flutuante de WhatsApp e barra de gestos.
Os templates mostram o tamanho do problema. Nos 51 sites medidos, 26 usam rótulos de 9 a 11 pixels, o tamanho do texto em caixa alta acima dos títulos. Um deles, o totem de restaurante, desliga o zoom com user-scalable=no; a documentação da MDN avisa que isso impede quem tem baixa visão de ampliar a página, e que a WCAG pede ampliação de pelo menos duas vezes. A lição: escreva o limite com número e deixe um script medir cada caixa de texto, em vez de confiar na impressão de que está legível.
// Teste do Playwright: texto legível e o essencial fora das faixas reservadas, em 390 px.
import { test, expect } from "@playwright/test";
const PISO_PX = 14; // ajuste ao piso escrito no DESIGN.md
const TOPO_PX = 56; // faixa de cima reservada (barra fixa, aviso)
const BASE_PX = 88; // faixa de baixo reservada (botão flutuante, gestos)
test("texto legível e fora das faixas reservadas", async ({ page }) => {
await page.setViewportSize({ width: 390, height: 844 });
await page.goto("/");
const achados = await page.evaluate(({ piso, topo, base }) => {
const lista: string[] = [];
const alturaTela = window.innerHeight;
for (const el of document.querySelectorAll<HTMLElement>("body *")) {
const temTexto = [...el.childNodes].some((n) => n.nodeType === 3 && n.textContent!.trim());
if (!temTexto) continue;
const est = getComputedStyle(el);
if (est.visibility === "hidden" || est.display === "none") continue;
const r = el.getBoundingClientRect();
const nome = el.textContent!.trim().slice(0, 40);
if (parseFloat(est.fontSize) < piso) lista.push(`pequeno (${est.fontSize}): ${nome}`);
if (el.scrollWidth > el.clientWidth + 1 && est.overflow !== "visible") lista.push(`cortado: ${nome}`);
if (r.right > window.innerWidth + 1) lista.push(`fora da tela: ${nome}`);
}
// O que é essencial (botão principal, preço) não pode nascer sob uma faixa reservada.
for (const el of document.querySelectorAll<HTMLElement>("[data-essencial]")) {
const r = el.getBoundingClientRect();
if (r.top < alturaTela && (r.top < topo || r.bottom > alturaTela - base))
lista.push(`essencial na faixa reservada: ${el.textContent!.trim().slice(0, 40)}`);
}
return lista;
}, { piso: PISO_PX, topo: TOPO_PX, base: BASE_PX });
expect(achados, achados.join("\n")).toEqual([]);
});Do "parece legível" ao limite medido
Cinco passos para a próxima página ou o próximo vídeo vertical. Os números ficam no DESIGN.md, e o script repete a conferência.
Passo 1: Marque as faixas que a interface ocupa
Abra a página no seu celular e meça a altura da barra fixa, do aviso de cookies e do botão flutuante. No vídeo vertical, use 220 pixels em cima e 380 embaixo como ponto de partida e confira no aplicativo onde ele publica.
Deu certo quando: O DESIGN.md tem a altura de cada faixa reservada, em pixels.
Erro comum: Colocar o botão principal exatamente onde o botão flutuante de WhatsApp vai pousar.
Passo 2: Escreva o piso de texto
Defina um piso para o corpo e outro, um pouco menor, para rótulos e legendas de apoio. Rótulo em caixa alta de 9 a 11 pixels sai do projeto, mesmo que o template traga assim.
Deu certo quando: O piso está escrito e nenhum estilo do projeto fica abaixo dele.
Erro comum: Aceitar o rótulo minúsculo porque "é só enfeite"; ele costuma carregar a categoria ou o preço.
Passo 3: Rode o script em três larguras
Use o teste do bloco acima em 390, 768 e 1440 pixels, trocando o tamanho da tela no início. Ele lista texto abaixo do piso, texto cortado e texto fora da tela.
Deu certo quando: A lista volta vazia nas três larguras.
Erro comum: Rodar só na largura do computador, onde quase nada falha.
Passo 4: Marque o que é essencial
Ponha o atributo data-essencial no botão principal, no preço e no telefone. O teste confere que nenhum deles nasce sob uma faixa reservada quando a página abre. Marque poucos elementos, com motivo anotado no DESIGN.md.
Deu certo quando: Os elementos essenciais aparecem fora das faixas reservadas ao abrir a página.
Erro comum: Marcar a página inteira como essencial e receber uma lista que ninguém lê.
Passo 5: Devolva o zoom a quem precisa
Procure user-scalable=no e maximum-scale=1 na meta de viewport e tire os dois. Depois amplie a página no celular com dois dedos e confira se o conteúdo segue legível.
Deu certo quando: A página amplia no celular e nada essencial some ao ampliar.
Erro comum: Desligar o zoom para esconder um layout que quebra ao ampliar, em vez de consertar o layout.
No fim você tem: Faixas reservadas e piso de texto escritos em número, conferidos por um teste que roda a cada entrega, na página e no vídeo vertical.
Analista de conteúdo de uma imobiliária em Florianópolis, que publica a página do lançamento e os vídeos verticais do mesmo prédio
Imobiliário, lançamento
Dor
No vídeo vertical, o preço de entrada ficava atrás da legenda do aplicativo. Na página, o botão de agendar visita caía sob o botão flutuante de WhatsApp no celular, e os rótulos das plantas tinham 10 pixels.
Solução
Ela escreveu no DESIGN.md as faixas reservadas da página e do vídeo e um piso de 14 pixels para rótulos. O agente acrescentou o teste do bloco de código e corrigiu cada achado da lista nas três larguras.
Resultado do exemplo
Preço e botão passaram a aparecer fora das faixas da interface, e os vídeos seguintes já saíram dentro das zonas seguras, sem revisão manual de cada quadro.
Cenário construído para fins didáticos. Números não correspondem a cliente específico.
Três medidas que o celular cobra
O alvo de toque recomendado pelo web.dev é de cerca de 48 pixels, uns 9 milímetros, a ponta do dedo. O componente que se adapta ao espaço que tem, e não só à largura da tela, usa consultas de contêiner. E a margem segura do aparelho, que evita o entalhe e a barra de gestos, vem de uma variável do navegador.

Ver como texto
Artigo Accessible tap targets do web.dev, de Dave Gash, Meggin Kearney, Patrick H. Lauke, Rachel Andrew e Rob Dodson. O texto recomenda que botões e links tenham tamanho e espaço suficientes no celular e diz que o alvo mínimo recomendado é de cerca de 48 pixels independentes do aparelho, o que corresponde a uns 9 mm, o tamanho da ponta do dedo.

Ver como texto
Página do MDN Web Docs Using container size and style queries, com o texto que explica que as consultas de contêiner aplicam estilos conforme o espaço do elemento que contém o componente, e não conforme a tela inteira, e um bloco de código com a regra @container.

Ver como texto
Página do MDN Web Docs sobre a função CSS env(), com o selo Baseline Widely available, o texto que explica que ela insere no CSS variáveis de ambiente definidas pelo navegador e um bloco de sintaxe com exemplos como env(safe-area-inset-top) e env(safe-area-inset-right, 1em).
O que mudou. Em agosto de 2026 a função sibling-count(), que deixa um item saber quantos irmãos tem na lista, chegou a Baseline Newly available. Em setembro foi a vez da ancoragem de rolagem (overflow-anchor), que evita o salto de conteúdo quando algo carrega acima do ponto em que a pessoa está lendo, um incômodo frequente no celular.
| Medida | Referência | Como conferir sem ferramenta |
|---|---|---|
| Alvo de toque | Cerca de 48 por 48 pixels, uns 9 mm (web.dev) | Acertar cada botão com o polegar na primeira tentativa |
| Componente que se adapta | Consulta de contêiner, regra @container (MDN) | O mesmo cartão funciona na coluna estreita e na larga |
| Margem segura | Variáveis safe-area-inset de env() (MDN) | Nada some atrás do entalhe com o celular deitado |
Faça agora: o teste do cliente apressado no celular
Passo 1: Abra a página principal do site no seu celular, com uma mão só.
Deu certo quando: Você consegue alcançar o botão principal com o polegar.
Passo 2: Toque em três links ou botões pequenos seguidos.
Deu certo quando: Cada toque acerta o alvo na primeira tentativa.
Erro comum: Tocar devagar, com cuidado que o cliente não terá.
Passo 3: Abra o formulário e toque no campo de e-mail e depois no de telefone.
Deu certo quando: O teclado mostra @ no e-mail e só números no telefone.
Passo 4: Gire o celular na horizontal.
Deu certo quando: Nada fica escondido atrás do entalhe ou da barra de gestos.
No fim você tem: Uma lista de defeitos do celular, cada um com página e passo, para pedir correção ao fornecedor.
Aplicar os recursos ao projeto
Ver como texto
O espaço do componente muda a composição
Um conteúdo aparece numa faixa larga com imagem e texto lado a lado e numa faixa estreita com imagem sobre o texto. Os elementos e a ordem de leitura são preservados.
Ver como texto
Duas fileiras com os mesmos três cartões de plano. Na de cima, sem subgrid, os títulos têm uma, duas e três linhas, e por isso o preço e o botão de cada cartão caem em alturas diferentes, com a linha guia vermelha cortando os cartões fora do lugar. Na de baixo, com subgrid, os cartões herdam as faixas da grade de fora, e preço e botão caem na mesma altura nos três, sobre as linhas guia verdes.
Seu caderno neste capítulo
Abrir o caderno completoSelecione um trecho do capítulo para destacar ou anotar. Nos vídeos e áudios, use Anotar este momento. No teclado, selecione com Shift e as setas e use Alt+Shift+D para destacar ou Alt+Shift+N para anotar.
Salvo neste navegador. Entre na sua conta para levar o caderno a outros aparelhos.
Entre na sua conta para compartilhar o que aprendeu e convidar alguém para estudar com você.
Conexões deste capítulo
Veja o que estudar antes e para onde seguir depois, explore os conceitos e compare abordagens em outros cursos. Sugestões marcadas como “sugerido pelo grafo” vêm dos assuntos em comum, não do índice do curso.
Estude antes
- CursoClaude Code: do zero à prática
- CursoSíntese e didática com IAsugerido pelo grafoDepois de escolher a informação essencial e desenhar hierarquia, gráficos e fluxos compreensíveis, o aluno pode aplicar esses critérios às interfaces do curso de frontend. A ponte conecta clareza da mensagem, acessibilidade e decisões de apresentação.
- CursoNode.js: JavaScript no Servidorsugerido pelo grafo9 capítulos de “Frontends com Vibecoding” usam conceitos apresentados em “Node.js: JavaScript no Servidor”.
- CursoSkills e delegação com IAsugerido pelo grafo9 capítulos de “Frontends com Vibecoding” usam conceitos apresentados em “Skills e delegação com IA”.
O mesmo assunto em outros cursos
- Software e IA para executivosA velocidade que o cliente sente no celularExaminar conexões de A velocidade que o cliente sente no celular
- MCP e Chrome: agentes de IA no navegadorQuando ler a estrutura da página e quando usar imagemExaminar conexões de Quando ler a estrutura da página e quando usar imagem
- Astra profundoAdaptar a página ao celular sem perder a ação principalExaminar conexões de Adaptar a página ao celular sem perder a ação principal
- CRO: Otimização de Conversão e ExperimentaçãoAcessibilidade: fator de conversão e obrigação legalExaminar conexões de Acessibilidade: fator de conversão e obrigação legal
Terminou a leitura?
Você está aqui: capítulo 11 de 35
0 de 35 concluídos
- Próximo · Capítulo 12 de 35 · 52 minProjetar movimento, assinatura e narrativas por rolagemLer o capítulo 12 sem concluir
Marque como concluído para o capítulo contar no seu painel e no certificado.
- Anterior · Capítulo 10 de 35 · 33 minProjetar menus, popovers e modais acessíveisVoltar para o capítulo 10
Leve uma ideia para a prática
Escolha uma atividade no painel e volte a este curso quando quiser.
Atividades e evolução ficam reunidas no painel da sua conta.
Laboratórios ao vivo deste curso
Cada laboratório monta a biblioteca real dentro da aula, com controles para você mexer e o código do exemplo para copiar. O texto de reserva descreve a demonstração para quem lê sem JavaScript. O link abre o capítulo já no ponto do laboratório.
Base UI
Prenda o foco num diálogo sem escrever o comportamento
Abra a janela Agendar visita, percorra os campos com Tab, feche com Esc e acompanhe no painel onde o foco está e para onde ele volta.
Pacote
Abrir no capítuloConstruir componentes, usar o registro e publicar o catálogo@base-ui/reactLucide e Iconify
Mantenha uma família de ícones coerente e nomeie cada botão
Mude tamanho, traço e cor da barra, veja o símbolo do Iconify acompanhar o Lucide e rode a auditoria de nomes acessíveis.
Pacote
Abrir no capítuloProjetar uma linguagem de ícones e ilustraçãolucide-react, @iconify/reactMotion
Testar os três sinais que autorizam o terceiro degrau
Reproduza a entrada em sequência, aperte o botão com mola e arraste o cartão; ajuste rigidez e amortecimento e veja o que muda.
Pacote
Abrir no capítuloProjetar movimento, assinatura e narrativas por rolagemmotionVidstack
Ver o que separa um player de um vídeo cru
Dê o play, troque a velocidade e ligue a legenda; o painel ao lado mostra o estado que o player publica e que a etiqueta crua esconde.
Pacote
Abrir no capítuloProjetar movimento, assinatura e narrativas por rolagem@vidstack/reactcmdk
Achar um destino entre quarenta digitando três letras
Abra a paleta, digite fat e escolha um item só pelo teclado; o painel embaixo conta o que o filtro deixou passar e quanto tempo levou.
Pacote
Abrir no capítuloConstruir formulários e estados de interaçãocmdknumber-flow
Animar indicadores que mudam ao vivo com formato pt-BR
Veja três indicadores fictícios rolarem a cada troca e compare com o número em texto puro. Pause, reinicie e observe o separador de milhar.
Pacote
Abrir no capítuloProjetar gráficos e painéis pela decisão@number-flow/reactApache ECharts
Medir o custo de desenhar 200 mil pontos com o ECharts
Troque o tipo de gráfico e o volume de pontos, leia o tempo de desenho e alterne o eixo em zero. Mude o tema do site e veja as cores refazerem.
Pacote
Abrir no capítuloProjetar gráficos e painéis pela decisãoechartsApache ECharts
Painel grande com visões coordenadas
Clique num canal para filtrar todas as visões, troque a densidade entre 6, 9 e 12 visões, alterne tema e movimento e abra a tela cheia.
Pacote
Abrir no capítuloProjetar gráficos e painéis pela decisãoechartssharp e svgo
Escolher a variante certa da imagem e conferir o teto de 150 KB
Arraste a largura da tela simulada, troque a densidade entre 1x e 2x e veja qual arquivo o navegador escolhe, quanto ele pesa e se cabe no orçamento.
Pacote
Abrir no capítuloValidar desempenho, autenticação e segurançasharp, svgoReact Flow (xyflow)
Disparar um pedido e ver o orquestrador distribuir, conferir e responder
Alterne paralelo e sequencial, ligue e desligue a verificação e use a medição real; observe o tempo de parede em cada combinação.
Pacote
Abrir no capítuloConstruir as cenas do orquestrador, do paralelismo e do robô@xyflow/reactGSAP, Web Workers e number-flow
Dividir mil tarefas entre trabalhadores reais e correr três ritmos de geração
Execute com um trabalhador, depois com quatro e oito, e compare o tempo; em seguida percorra a corrida e separe a espera inicial do ritmo.
Pacote
Abrir no capítuloConstruir as cenas do orquestrador, do paralelismo e do robôgsap, @number-flow/reactThree.js com React Three Fiber, drei, Rapier e XR
Carregar o braço robótico, ver a física trabalhar e entrar na cena com o visor
Carregue a cena pelo botão, inicie o ciclo, mostre os ângulos das juntas, troque a câmera e a velocidade; com visor, entre em realidade virtual.
Pacote
Abrir no capítuloConstruir as cenas do orquestrador, do paralelismo e do robôthree, @react-three/fiber, @react-three/drei, @react-three/rapier, @react-three/xrMotion
Ver quatro agentes em raias trocando mensagens e a revisão devolvendo um trecho
Reproduza os 60 s de modelo, percorra o tempo pelo controle e esconda as mensagens para comparar a leitura; repare no tempo de parede contra a soma.
Pacote
Abrir no capítuloEspecificar, medir e produzir as cenas da máquinamotionMediaRecorder, Canvas 2D e Long Animation Frames (plataforma)
Medir o quadro da cena e gravar seis segundos dela em vídeo
Suba as partículas, force um bloqueio de 300 ms e leia o medidor; depois grave seis segundos, veja o codec escolhido e baixe o arquivo.
Pacote
Abrir no capítuloEspecificar, medir e produzir as cenas da máquinasem pacotesigma.js, graphology com ForceAtlas2 e cosmos.gl
Ver o grafo real do curso e um grafo de milhares de nós se organizarem em aglomerados
Rode o layout no grafo real, passe o mouse pelos nós e busque uma entidade; troque para 20 mil nós e leia o medidor; depois carregue o modo massivo na placa de vídeo.
Pacote
Abrir no capítuloAnimar um grafo de conhecimento amplo em movimentosigma, graphology, graphology-layout-forceatlas2, graphology-generators, @cosmos.gl/graph
Capítulos vizinhos em Frontends com Vibecoding
- 09Projetar uma linguagem de ícones e ilustração
- 10Projetar menus, popovers e modais acessíveis
- 11Adaptar o layout ao celular e ao contêiner
- 12Projetar movimento, assinatura e narrativas por rolagem
- 13Preparar imagens, ícones e vídeo para a web