CSS4 não existe. Mas o CSS de 2026 já reage a tamanho, estado, posição e scroll
Em 2020, publiquei um texto dizendo que CSS4 nunca existiria como a próxima versão única do CSS. Recentemente, um leitor encontrou aquele artigo e disse que eu não estava sendo totalmente sincero.
Ele tocou no ponto certo.
Não porque o W3C tenha lançado um pacote chamado CSS4. Isso não aconteceu. O problema é que responder apenas "CSS4 não existe" deixa de fora quase tudo o que aconteceu com a linguagem nos últimos seis anos.
A resposta curta e precisa, em setembro de 2026, é esta:
CSS4 e CSS5 não existem como versões oficiais únicas da linguagem. Depois do CSS Level 3, os módulos passaram a evoluir de maneira independente. Por isso existem Selectors Level 4, CSS Color Level 4 e CSS Cascade Level 5 sem existir uma versão global chamada CSS4 ou CSS5.
Só que a discussão do nome ficou pequena. O CSS atual já consegue reagir ao tamanho de um componente, ao estado dos elementos dentro dele, à posição do scroll e à localização de uma âncora. Ele também ganhou estados nativos de interface, trajetórias de movimento, formas declarativas e espaços de cor perceptuais.
A pergunta útil deixou de ser "qual é a versão do CSS?". Agora ela é: como saber o que já pode entrar em produção e o que ainda precisa de fallback?
Snapshot, Baseline e Interop respondem a perguntas diferentes
Tratar esses três projetos como sinônimos cria uma falsa sensação de segurança.
| Referência | Pergunta que ela ajuda a responder | O que ela não garante |
|---|---|---|
| CSS Snapshot | Quais especificações formam o estado atual do CSS segundo sua estabilidade normativa? | Adoção completa pelos navegadores usados no seu produto |
| Baseline | O recurso chegou ao conjunto principal de navegadores acompanhado pelo projeto? | Compatibilidade com toda versão antiga, WebView ou browser corporativo |
| Interop | Em quais áreas os motores estão trabalhando para aumentar a convergência? | Suporte completo ou idêntico naquele momento |
O CSS Snapshot 2025 é explícito: módulos independentes podem chegar ao Level 4 ou além, mas a linguagem inteira não possui mais esses níveis. O mesmo documento também avisa que a inclusão de um módulo considera estabilidade da especificação, não sua taxa de adoção nos browsers.
Baseline e Interop completam a análise, mas a decisão final ainda depende da sua audiência e do papel daquele recurso na interface.
Três provas de que o problema mudou
1. Um componente pode responder ao próprio espaço e ao estado interno
Media queries observam o viewport. Container queries permitem que a unidade responda ao espaço que realmente recebeu no layout.
<article class="probe">
<label>
<input id="advanced" type="checkbox">
Exibir telemetria avançada
</label>
<div class="probe__layout">
<section>Métricas</section>
<aside>Detalhes</aside>
</div>
</article>
.probe {
container: probe / inline-size;
}
.probe__layout {
display: grid;
gap: 1rem;
}
@container probe (min-width: 36rem) {
.probe__layout {
grid-template-columns: 2fr 1fr;
}
}
.probe:has(#advanced:checked) {
border-color: oklch(72% 0.2 250);
}
O layout responde ao contêiner, não à tela inteira. O elemento pai reage ao checkbox com :has(), sem listener de clique e sem uma classe sincronizada por JavaScript.
Isso não transforma CSS em linguagem de regra de negócio. Significa apenas que decisões de apresentação podem permanecer na camada que já conhece o layout e a estrutura.
2. Um popover pode abrir e se posicionar sem calcular coordenadas
O HTML representa a abertura. O CSS relaciona o painel à sua âncora.
<button class="beacon" popovertarget="telemetry">
Abrir telemetria
</button>
<aside id="telemetry" popover>
Dados do módulo selecionado
</aside>
.beacon {
anchor-name: --beacon;
}
@supports (position-anchor: --beacon) {
#telemetry:popover-open {
position-anchor: --beacon;
top: anchor(bottom);
left: anchor(center);
translate: -50% 0.5rem;
}
}
Sem anchor positioning, o popover nativo ainda pode abrir. A camada nova melhora a posição sem transformar sua ausência em falha funcional.
3. A posição do scroll pode dirigir a animação
.timeline {
overflow-x: auto;
scroll-snap-type: inline mandatory;
scroll-timeline: --history inline;
}
.progress {
transform-origin: left;
animation: fill linear both;
animation-timeline: --history;
}
@keyframes fill {
from { scale: 0.05 1; }
to { scale: 1 1; }
}
Não há evento scroll, cálculo manual de porcentagem nem requestAnimationFrame. Sem a timeline, o conteúdo continua rolável e o scroll-snap continua útil. O efeito é progressivo.
O experimento que não cabia em uma coleção de snippets
Snippets separados mostram sintaxe. Eles não provam que os recursos conseguem formar uma interface coerente.
Por isso construí o Observatório CSS 2026, uma central interativa que combina nove capacidades em um único sistema:
- container queries;
:has();- estados nativos com
:checked,:opene:target; - animações guiadas pelo scroll;
- anchor positioning e popover;
- navegação por fragmentos;
- motion path;
clip-pathcomshape()progressivo;- OKLCH,
color-mix()econtrast-color().
Os controles usam HTML nativo. Não há JavaScript mantendo o estado das interações. O componente também preserva conteúdo e operação quando uma camada recente não está disponível, funciona por teclado e respeita prefers-reduced-motion.
Você pode testar a interface aqui:
Abrir o Observatório CSS 2026 e testar as nove capacidades
O critério que uso antes de colocar CSS novo em produção
Uma demonstração impressionante ainda não é uma decisão de produto. Para cada recurso, faço cinco perguntas:
- Qual é a fonte da afirmação? Localizo o módulo, seu estágio e documentação de compatibilidade datada.
- A funcionalidade é essencial ou progressiva? Comprar, autenticar e ler exigem um limiar diferente de uma transição visual.
- Qual tarefa permanece sem o recurso? Fallback deve preservar informação e operação, não necessariamente reproduzir cada pixel.
- A matriz genérica representa meus usuários? Baseline não conhece WebViews antigas, políticas corporativas nem os dados reais do seu produto.
- Quando essa decisão será revista? Registro data, navegadores testados, fallback e condição para removê-lo.
O princípio é simples:
.feature {
/* Base legível e funcional para todos. */
}
@supports (position-anchor: --menu-trigger) {
.feature {
/* Melhoria aplicada somente quando a capacidade existe. */
}
}
CSS moderno não elimina fundamentos. Ele recompensa HTML semântico, cascade compreendida, acessibilidade e fallbacks deliberados.
Então qual versão do CSS você usa?
Na maioria dos projetos, a resposta mais honesta é apenas CSS.
Quando precisar de precisão, cite o recurso ou o módulo: container queries, Selectors Level 4, CSS Color 4, Cascade Layers. Se a conversa for sobre adoção, acrescente o estado Baseline e os browsers realmente testados.
CSS4 não virou o sucessor oficial de CSS3. CSS5 também não. Ao mesmo tempo, níveis 4 e 5 são reais dentro dos módulos, e existe até um grupo comunitário discutindo CSS4 como rótulo didático, separado das normas oficiais.
O leitor que questionou meu texto antigo tinha razão sobre o problema central: dizer somente que CSS4 não existe já não explica o CSS que usamos hoje.
A versão completa reúne a história, a distinção entre os níveis, as fontes verificadas em setembro de 2026, os nove exemplos, os fallbacks e o Observatório funcionando no navegador:
Ler o artigo completo e experimentar o CSS de 2026
Qual desses recursos mudou mais a forma como você escreve CSS? E qual ainda parece cedo demais para o seu ambiente de produção?
