HTML First
Um manifesto defendendo o desenvolvimento web “HTML first” — favorecendo HTML semântico, JavaScript mínimo e evitando ferramentas de build pesadas — reacendeu tensões de longa data entre simplicidade e frameworks frontend modernos como React. Os defensores argumentam que confiar em recursos nativos do navegador, atributos e HTML renderizado no servidor torna os sites mais acessíveis, mantíveis e amigáveis para iniciantes, enquanto os críticos alertam que manipuladores de eventos inline, DSLs como hyperscript e a falta de padrões claros para estado e reutilização não escalam para aplicações complexas nem atendem às expectativas contemporâneas de segurança e acessibilidade. Muitos veem valor nesses princípios para sites pequenos e médios, com muito conteúdo, mas duvidam que eles possam substituir frameworks baseados em componentes e pipelines de build para apps web grandes e altamente interativos.
Reação geral a “HTML First”
- Muitos gostam da proposta de um desenvolvimento mais simples, centrado em HTML, especialmente para sites pequenos/médios e apps renderizados no servidor.
- Outros veem isso como uma romantização de práticas do início dos anos 2000 e uma ignorância do motivo pelo qual frameworks, ferramentas de build e a separação de responsabilidades se tornaram comuns.
HTML vs Frameworks (React, Vue, etc.)
- Pró-HTML-first:
- A maioria das interfaces web são formulários e interatividade básica; renderização no servidor + “sprinkles” de JS (htmx, Alpine, etc.) muitas vezes basta.
- Frameworks impõem complexidade pesada (gerenciamento de estado, roteamento, cadeias de build) e podem adicionar ~50% de esforço a projetos que não precisam de comportamento de SPA.
- É bom para a aprendibilidade e para “View Source” como ferramenta de ensino e depuração.
- Céticos:
- Para apps maiores e com estado (dashboards, motores de reserva, ferramentas ricas), frameworks ajudam a gerenciar complexidade, reutilização e fluxos de trabalho da equipe.
- Sem eles, as equipes tendem a reinventar mini-frameworks ad hoc e ainda assim lutar contra peculiaridades do navegador.
- Muitos devs valorizam usar uma única stack poderosa em todo lugar, em vez de dividir modelos mentais.
Atributos inline, localidade e separação de responsabilidades
- Defensores de
onclickinline/classes utilitárias argumentam:- “Locality of behavior” (HTML, comportamento e estilo juntos) torna os componentes mais fáceis de entender em um só lugar.
- Críticos argumentam:
- Isso reintroduz exatamente o tipo de spaghetti que a separação entre CSS/JS resolveu; é difícil refatorar e depurar em escala.
- JS inline quebra ou enfraquece CSP, aumenta a exposição a XSS e complica revisões de segurança.
- Acessibilidade sofre (por exemplo,
divclicável em vez de<button>).
CSS, Tailwind e design de classes
- Tailwind é elogiado por:
- Evitar arquivos CSS semânticos de difícil manutenção ao compor pequenas classes utilitárias.
- Funcionar bem no escopo de componentes e incentivar tokens de design consistentes.
- Críticas:
- Ele efetivamente transforma
classem um segundo atributostyle; o HTML fica carregado. - Exige uma etapa de build (purging/geração de CSS), o que conflita com ideais de “sem build”.
- Algumas medições sugerem que bundles do Tailwind podem ser maiores do que CSS semântico bem projetado.
- Ele efetivamente transforma
HTMX, hyperscript e bibliotecas “baseadas em HTML”
- HTMX e Alpine são citados como boas formas “HTML-first” de adicionar interatividade sem SPAs completas.
- Preocupações:
- Retornar HTML de APIs pode misturar as preocupações de front-end e back-end.
- hyperscript é explicitamente uma DSL customizada, contradizendo o próprio aviso do artigo contra sintaxes customizadas.
- Alguns veem o HTMX como adequado para ferramentas internas e apps modestos, não para front-ends muito grandes.
Acessibilidade, UX e elementos nativos
- Muitos enfatizam semântica nativa (
<button>,<details>,<summary>,<datalist>, ARIA adequada) como crucial para acessibilidade e suporte a teclado/leitor de tela. - Outros observam que controles nativos (seletores de data, multiselects) são inconsistentes, difíceis de estilizar e frequentemente limitados demais, empurrando as equipes de volta para componentes JS personalizados.
Temas históricos / meta
- Vários comentários enquadram isso como mais uma volta de um ciclo recorrente: inline → separação CSS/JS → frameworks JS → agora “HTML-first” novamente.
- Há forte discordância sobre se isso é progresso genuíno, uma correção de rota útil ou apenas a mais recente moda.