Communitygithub.com

Sistema de Estado Esqueleto

Projete um framework sistemático para 'Skeleton Screens' que gerencia a percepção de desempenho e a estabilidade do layout (CLS) mapeando 'ossos' da interface para o conteúdo que chega.

O que é Sistema de Estado Esqueleto?

O Sistema de Estado Esqueleto fornece uma metodologia para projetar o estado de 'carregamento' de uma interface. Diferente de spinners genéricos ou barras de progresso, os esqueletos aproximam o layout final usando 'ossos' (formas de baixa fidelidade), o que reduz o tempo de espera percebido pelo usuário e previne o **Cumulative Layout Shift (CLS)** ao reservar o espaço necessário antes do conteúdo chegar. É particularmente útil em painéis densos em dados, feeds de conteúdo, grades com muitas imagens e SPAs que gerenciam transições assíncronas entre rotas. O fluxo de trabalho envolve mapear a geometria do componente final, definir uma hierarquia de ossos (primário, secundário, terciário) e estabelecer correspondência espacial exata (usando proporções de aspecto fixas, por exemplo) para garantir que o layout não 'pule'. Animações sutis de shimmer (gradiente que se move da esquerda para a direita) dão vida ao esqueleto, mas devem respeitar a preferência `prefers-reduced-motion: reduce`. Regras de decisão como a 'Regra dos 300ms' determinam quando aplicar esqueletos versus spinners, e restrições de acessibilidade (como `aria-hidden="true"` e `aria-busy="true"`) garantem que usuários de leitores de tela não sejam prejudicados. O resultado principal é um Blueprint do Esqueleto, Especificação de Ossos e uma Estratégia de Transição que foca em uma troca suave (fade de ~200ms) entre o esqueleto e o conteúdo real, prevenindo oscilações bruscas e garantindo uma sensação de performance fluida.

Funciona com~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/coastdigitalgroup/coastai-skills/tree/HEAD/website-design/skeleton-state-system

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

O que Sistema de Estado Esqueleto faz?

Propósito

O Sistema de Estado Esqueleto fornece uma metodologia para projetar o estado de "carregamento" de uma interface. Ao contrário de spinners genéricos ou barras de progresso, os esqueletos aproximam o layout final usando "ossos" (formas de baixa fidelidade), o que reduz o tempo de espera percebido pelo usuário e previne o Cumulative Layout Shift (CLS) ao reservar o espaço necessário antes do conteúdo chegar.

Casos de Uso

  • Painéis Densos em Dados: Onde múltiplos widgets carregam em velocidades diferentes.
  • Feeds de Conteúdo: Rolando listas de artigos, produtos ou posts sociais.
  • Grades com Muitas Imagens: Reservando espaço para imagens de alta resolução para evitar que a página "pule".
  • Visualizações de Busca e Filtros: Fornecendo feedback imediato de que o sistema está processando uma consulta.
  • Aplicações de Página Única (SPAs): Gerenciando transições entre rotas onde os dados são buscados de forma assíncrona.

Quando NÃO Usar

  • Interações Instantâneas: Se o conteúdo carrega em menos de 300ms, um esqueleto pode causar um "flicker" perturbador.
  • Cargas Simples e de Baixo Contexto: Para elementos pequenos como um único botão ou uma pequena tag, um spinner padrão ou texto "Carregando..." é mais apropriado.
  • Conteúdo Estático: Conteúdo que é hard-coded ou cacheado e renderiza imediatamente.
  • Dados em Tempo Real de Alta Velocidade: Se os dados mudam tão rápido que o esqueleto estaria constantemente aparecendo e desaparecendo, pode causar fadiga visual.

Entradas

  1. Layout Alvo: O design "totalmente carregado" final do componente ou página.
  2. Variáveis de Conteúdo: Quais partes da interface são dinâmicas (Texto, Imagens, Preços, Avatares)?
  3. Dimensões Espaciais: A altura, largura e proporções exatas dos elementos finais.
  4. Tom da Marca: As cores primária e secundária usadas para a base do "osso" e o efeito shimmer.

Saídas

  1. Blueprint do Esqueleto: Um mapa de baixa fidelidade mostrando o arranjo dos ossos.
  2. Especificação de Ossos: Definições para forma (círculos vs. retângulos) e dimensionamento (fixo vs. baseado em porcentagem).
  3. Estratégia de Transição: Regras para como o esqueleto desaparece e o conteúdo aparece.
  4. Requisitos de Acessibilidade: Orientação para implementação de aria-busy e aria-hidden.

Fluxo de Trabalho

1. Mapeie a Geometria "Alvo"

Decomponha o componente final em seus primitivos geométricos básicos:

  • Círculos: Para avatares, ícones ou botões arredondados.
  • Retângulos (Arredondados): Para cartões, contêineres de imagem e blocos de texto.
  • Linhas: Para linhas únicas de texto (títulos, metadados).

2. Defina a Hierarquia de Ossos

Nem todo elemento precisa de um osso. Foco nas "âncoras" estruturais:

  • Osso Primário: O maior elemento visual (ex.: uma imagem de produto).
  • Ossos Secundários: Títulos e metadados principais.
  • Ossos Terciários: Pequenos meta-detalhes ou botões de ação (muitas vezes podem ser omitidos se forem muito pequenos).

3. Estabeleça a Correspondência Espacial (A Regra do CLS)

Garanta que as dimensões do esqueleto correspondam exatamente ao contêiner do conteúdo final:

  • Proporção de Aspecto: Use proporções de aspecto fixas (ex.: 16:9 para vídeos) para o osso, de modo que ele não mude de tamanho quando o ativo carregar.
  • Dimensionamento de Texto: Use ossos que correspondam à altura da linha e à largura aproximada do texto que representam.

4. Projete o Ritmo e o Shimmer

Esqueletos devem parecer "vivos", mas não perturbadores:

  • Cor Base: Use uma cor neutra de baixo contraste (ex.: Cinza Claro).
  • Shimmer (O Pulso): Aplique uma animação de gradiente sutil que se move da esquerda para a direita.
  • Sincronização: Se vários esqueletos estiverem na tela, garanta que suas animações estejam sincronizadas para evitar caos visual.
  • Movimento Reduzido: Envolva a animação do shimmer keyframe em uma consulta @media (prefers-reduced-motion: reduce) que desabilita o movimento e cai para um osso estático ou com pulsação suave de opacidade.

5. Defina a Transição de "Entrega"

Planeje a saída do esqueleto:

  • Timing: Use um fade-in curto (ex.: 200ms) para o conteúdo real, evitando uma transição brusca do tipo "snap".
  • Escalonamento: Para listas, decida se os itens devem aparecer todos de uma vez ou conforme carregam individualmente.

Regras de Decisão

  • A Regra dos 300ms: Mostre um esqueleto apenas se o carregamento for esperado para durar mais de 300ms.
  • Precisão do Osso: Um osso deve representar o contêiner, não os dados específicos. Por exemplo, um osso de texto deve ser uma barra simples, não uma linha irregular imitando letras específicas.
  • Contagem de Linhas: Para texto com várias linhas, use 2 ou 3 ossos de larguras variadas (ex.: a última linha com 60% de largura) para simular o fluxo natural de parágrafos.
  • Spinner vs. Esqueleto:
    • Use um Esqueleto para transições no nível da página ou seção.
    • Use um Spinner para ações pequenas e localizadas (como um estado de botão "Salvando...").

Restrições

  • Acessibilidade: Esqueletos devem ser marcados com aria-hidden="true" para que leitores de tela não tentem "ler" as barras vazias. O contêiner pai deve usar aria-busy="true" durante o carregamento e, idealmente, conter uma região aria-live="polite" visualmente oculta que anuncie "Carregando" e depois o estado de conclusão assim que o conteúdo substituir o esqueleto — não use aria-live nos próprios ossos do esqueleto. Respeite prefers-reduced-motion para o efeito shimmer.
  • Contraste: As cores do esqueleto devem ser distintas do fundo, mas não tão contrastantes a ponto de parecerem conteúdo ativo.
  • Responsividade: Os ossos do esqueleto devem escalar usando a mesma lógica de grid/flex do conteúdo final.

Padrões Comuns de Falha

  • O "Salto CLS": Um esqueleto de 200px de altura sendo substituído por conteúdo de 300px de altura, fazendo a página "pular".
  • Sobrecarga de Shimmer: Animações muito rápidas ou de alto contraste, causando enjoo ou distração.
  • Incompatibilidade Conteúdo-Ossos: Usar um osso circular para uma imagem quadrada, ou vice-versa.
  • Complexidade Excessiva: Tentar recriar cada ícone minúsculo como um osso, resultando em um layout "fantasma" poluído.
  • O "Esqueleto Estático": Um esqueleto sem animação, que pode ser confundido com uma página quebrada ou vazia.

Critérios de Validação

  • Dimensões do esqueleto correspondem exatamente ao estado final "carregado" (CLS zero).
  • Proporções de aspecto para imagens/vídeos são reservadas usando contêineres fixos.
  • A animação shimmer é sutil e se move da esquerda para a direita.
  • Áreas com muito texto usam ossos que simulam comprimentos naturais de linha.
  • aria-hidden="true" é aplicado aos elementos do esqueleto, e o contêiner de carregamento usa aria-busy="true".
  • A animação shimmer respeita prefers-reduced-motion: reduce.
  • A transição do esqueleto para o conteúdo é um fade suave (aproximadamente 200ms).
  • O esqueleto não aparece para carregamentos mais rápidos que 300ms.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for progressive disclosure using accordions, ensuring structural integrity, visual affordances, and accessibility across different content densities and devices.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for long-form content, managing readability, vertical rhythm, and information density to ensure a superior reading experience.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for informational elements that communicate state (Badges) and categorization (Tags) with clarity and accessibility.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for non-overlay notifications, managing global announcements and contextual inline alerts to communicate system states without interrupting the user's flow.

coastdigitalgroup/coastai-skills

Design and implement a systematic, asymmetrical bento-grid layout framework to organize diverse content types cohesively while maintaining strict visual hierarchy, logical focus order, and responsive flexibility.

coastdigitalgroup/coastai-skills

Design a responsive, mobile-first bottom navigation bar and persistent action dock system for mobile websites and web applications, establishing spatial anchors, tab bar anatomy, badge indicators, thumb-zone ergonomics, safe area inset handling, active/inactive state contrast, and desktop responsive adaptation rules.

coastdigitalgroup/coastai-skills

Design a mobile-first bottom sheet overlay system with configurable detents, drag affordances, safe area padding, responsive desktop modal/popover adaptation, and WCAG AA accessibility compliance.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for secondary navigation trails that provide orientation, context, and one-click access to parent levels in deep information architectures.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for buttons and interactive triggers, managing visual hierarchy, variant logic, and action grouping to ensure clear intent and accessible interaction.

coastdigitalgroup/coastai-skills

Design a systematic framework for date and time selection, managing calendar grids, range pickers, and scheduling interfaces to ensure precision and accessibility.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for modular content containers that maintain hierarchy, structural integrity, and action alignment across variable content and responsive viewports.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for horizontal discovery components, managing navigation affordances, scroll behavior, and accessibility to ensure effective content density without compromising usability.

coastdigitalgroup/coastai-skills

Design a systematic, highly accessible, and developer-friendly UI layout framework for code blocks, snippet showcases, multi-file code tabs, line-highlighting, diff views, and syntax token contrast in technical documentation and developer platforms.

coastdigitalgroup/coastai-skills

Design a systematic framework for global command menus (Cmd+K panels) that combines keyboard-driven navigation, command execution, and shortcut discovery into an accessible, responsive overlay.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for threaded conversations, managing nesting depths, action hierarchies, and community signaling to foster engagement and readability.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for side-by-side comparison interfaces, managing high attribute density and responsive complexity to support informed decision-making.

coastdigitalgroup/coastai-skills

Design and implement a systematic framework for user privacy, managing consent banners, preference centers, and persistent privacy controls to balance legal compliance with user trust.

coastdigitalgroup/coastai-skills

Design and implement a systematic, highly accessible, and responsive visual layout framework for conversational chat widgets, live chat boxes, and chatbot panels that ensures clear message scannability, native focus flow, and seamless mobile keyboard adaptation.

coastdigitalgroup/coastai-skills

Design a systematic, accessible, and high-conversion framework for custom select dropdowns and comboboxes, defining anatomy, states, search-filtering, and responsive mobile-adaptive patterns.

coastdigitalgroup/coastai-skills

Design and implement a systematic color palette that ensures WCAG 2.2 accessibility compliance. Trigger this skill when asked to define brand colors, create UI themes, or establish a visual system for a website.

Habilidades Relacionadas