HTML Academy · Aula

Criando um acordeão com PE

Crie um acordeão que funcione sem JavaScript e aprimore-o depois.

Aula 4 de 413 etapas

Criando um acordeão com PE é uma aula grátis de HTML Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de HTML Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de HTML Academy inclui 4 aulas no total.

Objetivo: um acordeão funcional sem JS

A versão com PE de um acordeão usa apenas HTML — o par de elementos nativos <details>/<summary>. Clique no resumo para alternar o painel. Funciona sem CSS, sem JS e sem uma estrutura de desenvolvimento: isso já faz parte do HTML.

<details>
  <summary>What is HTML?</summary>
  <p>HTML is the markup language of the web.</p>
</details>

Acessibilidade integrada

<summary> é um botão que pode receber foco e ser ativado pelo teclado (Enter/Espaço alterna o estado). Os leitores de tela anunciam o estado expandido/recolhido. Dois elementos HTML oferecem o que um acordeão personalizado em React pode exigir dezenas de linhas de ARIA e manipulação de eventos para realizar.

Aplicando camadas com CSS

Estilize o triângulo de divulgação, o preenchimento do painel e as transições com CSS comum. O atributo open reflete o estado, portanto details[open] summary { color: blue; } é aplicado somente quando o conteúdo está expandido. Não é necessário JS para o aprimoramento visual.

details { border-bottom: 1px solid #ccc; padding: 8px 0; }
summary { font-weight: bold; cursor: pointer; }
details[open] summary { color: var(--accent); }

Animando a abertura e o fechamento

A abertura e o fechamento padrão são instantâneos. Anime fazendo uma transição de content-visibility ou usando JS para medir a altura do painel e animar max-height. Em casos simples, a alternância abrupta é aceitável; a animação é um aprimoramento de CSS+JS aplicado progressivamente.

Aprimorando com JavaScript

JS pode adicionar recursos opcionais: fechar outros acordeões quando um deles for aberto (modo de abertura única), manter o estado aberto em localStorage, animar a transição ou registrar por análise quais entradas estão expandidas. Cada aprimoramento é puramente adicional.

document.querySelectorAll("details").forEach((d) => {
  d.addEventListener("toggle", () => {
    if (d.open) {
      document.querySelectorAll("details").forEach((o) => {
        if (o !== d) o.removeAttribute("open");
      });
    }
  });
});

O evento de alternância

<details> dispara um evento toggle sempre que seu estado aberto é alterado. Use-o para reagir à expansão feita pelo usuário sem refazer os manipuladores de clique. É compatível tanto com cliques do mouse quanto com ativação pelo teclado.

Renderizando o estado no servidor

Para renderizar um acordeão inicialmente aberto, defina o atributo open no servidor: <details open>. O estado está no HTML, acessível a rastreadores e a usuários com conexões lentas antes que qualquer JS seja executado.

Quando o recurso integrado não é suficiente

Se o design exigir um ícone personalizado de expansão/recolhimento, uma revelação animada ou um painel com várias colunas, crie uma versão personalizada — mas use <details>/<summary> como estrutura subjacente, se possível. Adicione ARIA somente se não puder usar os elementos nativos de forma alguma.

Verificação sem JS

Desative JavaScript no DevTools e verifique se o acordeão continua funcionando: clique em summary, o painel alterna, a ordem do foco permanece lógica e o teclado ativa o componente. Se algo falhar, o JS não é um aprimoramento — é um requisito, o que viola PE.

Abertura única apenas com CSS

Para obter o comportamento de rádio de "apenas um aberto por vez" sem JS, use o atributo name em <details> (com suporte no Chrome/Safari): todos os elementos <details name="faq"> compartilham o estado, portanto abrir um fecha os outros. Um padrão exclusivamente em HTML que reproduz o comportamento dos botões de rádio.

Migrando de um acordeão somente com JS

Substitua divs+JS por <details>/<summary> e preserve as classes CSS para a estilização. O resultado tem HTML mais curto, nenhuma dependência de JS, melhor acessibilidade e conteúdo indexável. A maioria dos acordeões em JS pode ser migrada para PE com uma mudança mínima perceptível para o usuário.

Verificação de conhecimento

Qual par de elementos HTML fornece um acordeão totalmente funcional sem nenhum JavaScript?

Resumo

Um acordeão PE usa <details>/<summary> nativos como base — totalmente acessíveis e operáveis pelo teclado sem JS. Adicione CSS para a estilização visual e, opcionalmente, JS para animações ou para o comportamento de abertura única. Verifique desativando o JS se a base continua funcionando. O novo atributo name permite até mesmo um modo de abertura única somente com CSS.

Grátis para começar

Aprenda HTML com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
40
Aulas
159

Perguntas Frequentes

A aula “Criando um acordeão com PE” é grátis?

Sim — o texto completo de “Criando um acordeão com PE” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de HTML Academy, atualize para CoddyKit PRO. O curso de HTML Academy inclui 4 aulas no total.

O que vou aprender em “Criando um acordeão com PE”?

Crie um acordeão que funcione sem JavaScript e aprimore-o depois. Você pratica HTML Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar HTML Academy?

Nenhuma experiência prévia é necessária. HTML Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Criando um acordeão com PE”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de HTML Academy?

Sim. Cada aula de HTML Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. A filosofia PE: comece com HTML
  2. Detecção de recursos versus identificação do navegador
  3. Degradação progressiva versus aprimoramento progressivo
  4. Criando um acordeão com PE
← Voltar para HTML Academy