4

CSS4 não existe. Mas o CSS de 2026 já reage a tamanho, estado, posição e scroll

CSS3, CSS4 e CSS5 se fragmentando em módulos modernos ao redor de um núcleo luminoso de CSS

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ênciaPergunta que ela ajuda a responderO que ela não garante
CSS SnapshotQuais especificações formam o estado atual do CSS segundo sua estabilidade normativa?Adoção completa pelos navegadores usados no seu produto
BaselineO recurso chegou ao conjunto principal de navegadores acompanhado pelo projeto?Compatibilidade com toda versão antiga, WebView ou browser corporativo
InteropEm 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:

  1. container queries;
  2. :has();
  3. estados nativos com :checked, :open e :target;
  4. animações guiadas pelo scroll;
  5. anchor positioning e popover;
  6. navegação por fragmentos;
  7. motion path;
  8. clip-path com shape() progressivo;
  9. OKLCH, color-mix() e contrast-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:

  1. Qual é a fonte da afirmação? Localizo o módulo, seu estágio e documentação de compatibilidade datada.
  2. A funcionalidade é essencial ou progressiva? Comprar, autenticar e ler exigem um limiar diferente de uma transição visual.
  3. Qual tarefa permanece sem o recurso? Fallback deve preservar informação e operação, não necessariamente reproduzir cada pixel.
  4. A matriz genérica representa meus usuários? Baseline não conhece WebViews antigas, políticas corporativas nem os dados reais do seu produto.
  5. 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?

Carregando publicação patrocinada...