Se eu dividisse as evoluções do CSS em categorias, iríamos muito além dos dias em que simplesmente pedíamos border-radius para parecer que estávamos vivendo no futuro. Atualmente, estamos vivendo um momento em que a plataforma está nos entregando ferramentas que não apenas ajustam a camada visual, mas redefinem fundamentalmente a forma como arquitetamos interfaces. Achei que o número de recursos anunciados em 2024 não poderia ser superado. Nunca estive tão felizmente errado. O “CSS Wrapped 2025” da equipe do Chrome não é apenas uma lista de recursos; é um manifesto por uma web dinâmica e nativa. Como alguém que passou alguns anos documentando essas evoluções – desde a definição da era “CSS5” até as complexidades dos utilitários de layout modernos – me vejo olhando para o encerramento deste ano com um enorme sentimento de entusiasmo. Estamos vendo uma mudança em direção à “Ergonomia Otimizada” e às “Interações de próxima geração” que nos permitem parar de lutar contra o código e começar a esculpir interfaces em seu estado natural. Neste artigo, você pode encontrar uma visão abrangente dos recursos de destaque do relatório do Chrome, vistos através das lentes de meus experimentos recentes e das esperanças para o futuro da plataforma. A revolução dos componentes: finalmente, uma seleção nativa personalizável Durante anos, confiamos em pesadas bibliotecas JavaScript para estilizar menus suspensos, um “problema de décadas” que a plataforma finalmente resolveu. Conforme detalhei em meu mergulho profundo na história da seleção personalizável (e artigos relacionados), este tem sido um longo caminho envolvendo Open UI, eliminando nomes como e e, finalmente, chegando a uma solução que reutiliza o elemento — incluindo o botão e a lista suspensa (via ::picker(select)) — usando CSS padrão. Crucialmente, isso é construído com o aprimoramento progressivo em mente. Ao agrupar nossos estilos em uma consulta de recursos, garantimos uma experiência perfeita em todos os navegadores. Podemos aceitar esse novo comportamento sem quebrar navegadores mais antigos: selecione { /* Ative a nova seleção personalizável */ @supports (aparência: seleção de base) { &, &::selecionador(selecionar) { aparência: seleção de base; } } }

A fantástica adição de permitir conteúdo rico dentro de opções, como imagens ou bandeiras, é muito divertida. Podemos criar todos os tipos de seleções hoje em dia:

Demonstração: criei uma demonstração de Poké-aventura mostrando como o novo elemento pode clonar conteúdo rico (como um ícone de Pokébola) de uma opção diretamente no botão.

Veja o Pen Um select customizável com imagens dentro das opções e o conteúdo selecionado [bifurcado] pelo utilitybend.

Demonstração: uma visão abrangente do estilo do select apenas com pseudoelementos.

Veja a seleção personalizável Pen A com apenas pseudo-elementos [bifurcados] pelo utilitybend.

Demonstração: Ou você pode aumentar ainda mais com esta demonstração de seleção de menu usando optgroups.

Veja a caneta Um menu de seleção real com optgroups [bifurcados] por utilitybend. Este recurso por si só sinaliza uma grande mudança na forma como construiremos formulários, reduzindo dependências e dívidas técnicas. Marcadores de rolagem e a morte do carrossel JavaScript A criação de carrosséis tem sido historicamente um ponto de atrito entre desenvolvedores e clientes. Os clientes os adoram, os desenvolvedores temem o JavaScript necessário para torná-los acessíveis e com bom desempenho. A chegada dos pseudoelementos ::scroll-marker e ::scroll-button() altera totalmente essa dinâmica. Esses recursos nos permitem criar pontos de navegação e botões de rolagem puramente com CSS, vinculados nativamente ao contêiner de rolagem. Como escrevi no meu blog, este foi Amor ao primeiro slide. A capacidade de criar um controle deslizante totalmente funcional e acessível sem uma única linha de JavaScript não é apenas conveniente; é um triunfo para o desempenho. Existem algumas preocupações de acessibilidade em torno desse recurso e, embora sejam válidas, pode haver uma maneira de nós, desenvolvedores, fazê-lo funcionar. O bom é que todas essas mudanças na interface do usuário estão tornando tudo muito mais fácil do que a manipulação de DOM personalizado e o arrastamento de tags ária, mas discordo… Agora podemos agrupar marcadores automaticamente usando scroll-marker-group e estilizar os botões usando posicionamento de âncora para colocá-los exatamente onde queremos.

.carrossel { estouro-x: automático; grupo de marcadores de rolagem: depois; /* Cria o contêiner para pontos */

/* Cria os botões */ &::botão de rolagem (final embutido),&::botão de rolagem(início embutido) { conteúdo: " "; posição: absoluta; /* Usa o posicionamento da âncora para centralizá-los */ âncora de posição: --carousel; topo: âncora(centro); }

/* Cria os marcadores nos filhos */ div { &::marcador de rolagem { conteúdo: " "; largura: 24px; raio da fronteira: 50%; cursor: ponteiro; } /* Destaca o marcador ativo */ &::marcador de rolagem:alvo-atual { fundo: branco; } } }

Demonstração: Meu experimento criando um carrossel puramente em HTML e CSS, usando posicionamento de âncora para posicionar os botões.

Veja o Pen Carousel Pure HTML e CSS [bifurcado] do utilitybend.

Demonstração: um remake de controle deslizante elegante da Webshop usando attr() para puxar imagens de fundo dinamicamente para os marcadores.

Veja o remake do controle deslizante liso do Pen Webshop em CSS [bifurcado] por utilitybend. Consultas de estado: coisa pegajosa presa? Coisa mal-humorada estalou? Por muito tempo, não tivemos a capacidade de saber se uma “coisa pegajosa está presa” ou se um “item rápido está quebrado” sem depender dos hacks do IntersectionObserver. O Chrome 133 introduziu consultas de estado de rolagem, permitindo-nos consultar esses estados de forma declarativa. Ao definir container-type: scroll-state, agora podemos estilizar filhos com base em se eles estão presos, quebrados ou transbordando. Esta é uma grande melhoria na “qualidade de vida” que tenho esperado ansiosamente desde o CSS Day 2023. Até evoluiu muito já que também podemos ver a direção do scroll, lindo! Para um exemplo simples: podemos finalmente aplicar uma sombra a um cabeçalho somente quando ele estiver realmente grudado no topo da janela de visualização: .header-container { tipo de contêiner: estado de rolagem; posição: pegajosa; superior: 0;

cabeçalho { transição: box-shadow 0,5s de atenuação; /* A consulta verifica o estado do contêiner */ @container scroll-state(preso: topo) { sombra da caixa: rgba (0, 0, 0, 0,6) 0px 12px 28px 0px; } } }

Demonstração: um cabeçalho fixo que só aplica uma sombra quando está realmente preso.

Veja os cabeçalhos Pen Sticky com consulta de estado de rolagem, verificando se o elemento sticky está preso [bifurcado] pelo utilitybend.

Demonstração: uma lista com tema Pokémon que usa consultas de estado de rolagem combinadas com posicionamento de âncora para mover um quadro sobre o personagem atualmente capturado.

Consulte a consulta Pen Scroll-state para verificar qual item é capturado com CSS, versão do Pokémon [bifurcada] por utilitybend. Ergonomia Otimizada: Lógica em CSS A seção “Ergonomia Otimizada” do CSS Wrapped destaca recursos que tornam nossos fluxos de trabalho mais intuitivos. Três recursos se destacam como transformadores na forma como escrevemos lógica:

Instruções if()Finalmente estamos obtendo condicionais em CSS. A função if() atua como um operador ternário para folhas de estilo, permitindo-nos aplicar valores baseados em consultas de mídia, suporte ou estilo inline. Isso reduz a necessidade de blocos @media detalhados para alterações de propriedades únicas. @funções de função Podemos finalmente mover alguma lógica para um local diferente, resultando em alguns arquivos mais limpos, um recurso real de qualidade de vida. sibling-index() e sibling-count() Essas funções de contagem de árvores resolvem o problema de animações escalonadas ou estilos de itens com base no tamanho da lista. Como explorei em Estilizar irmãos com CSS nunca foi tão fácil, isso elimina a necessidade de codificar propriedades personalizadas (como --index: 1) em nosso HTML.

Exemplo: Calculando Layouts Agora podemos escrever fórmulas matemáticas concisas. Por exemplo, escalonar uma animação para cartas que entram na tela torna-se trivial: .card-container > * { animação: revela avanço de 0,6s; /* Chega de variáveis ​​--index manuais! */ atraso de animação: calc(índice-irmão() * 0,1s); }

Até experimentei usar essas funções junto com trigonometria para colocar itens em um círculo perfeito sem qualquer JavaScript.

Demonstração: escalonamento de animações de cartas dinamicamente.

Veja os cartões Pen Stagger usando sibling-index() [forked] por utilitybend.

Demonstração: Colocando itens em um círculo perfeito usando índice de irmãos, contagem de irmãos e o novo recurso CSS @function.

Veja o Pen The Circle usando índice de irmãos, contagem de irmãos e funções [bifurcadas] por utilitybend. Minha lista de tarefas CSS: recursos que mal posso esperar para experimentar Embora eu esteja ocupado esculpindo seleções e transições, o relatório “CSS Wrapped 2025” está repleto de outras novidades que ainda não tive a chance de acessar no CodePen. Estes estão no topo da minha lista para meus próximos experimentos: Consultas de contêineres ancorados Usei CSS Anchor Positioning para os botões em minha demonstração de carrossel, mas “CSS Wrapped” destaca umevolução disso: consultas de contêiner ancoradas. Isso resolve um problema que todos nós tivemos com dicas de ferramentas: se o navegador virar a dica de cima para baixo devido a restrições de espaço, a “seta” muitas vezes permanece apontando para o lado errado. Com consultas de contêiner ancoradas (@container Anchored(fallback: flip-block)), podemos estilizar o elemento com base na posição de fallback que o navegador realmente escolheu. Grupos de transição de visualização aninhada As Transições de Visualização foram uma revolução, mas vieram com uma compensação específica: achataram a árvore de elementos, o que muitas vezes quebrava as transformações 3D ou o overflow: clip. Sempre tive a sensação de que estava faltando alguma coisa e essa poderia ser a resposta. Usando view-transition-group: mais próximo, podemos finalmente aninhar grupos de transição uns dentro dos outros. Isso nos permite manter efeitos de recorte ou rotações 3D durante uma transição — algo que antes era impossível porque os elementos eram elevados ao nível superior. .cartão img { nome da transição de visualização: foto; visualizar grupo de transição: mais próximo; /* Mantenha-o aninhado! */ }

Tipografia e Formas Finalmente, o ergonomista em mim está ansioso para experimentar o Text Box Trim, que promete remover aquele irritante espaço em branco extra acima e abaixo do conteúdo do texto (o principal) para finalmente alcançar o alinhamento vertical perfeito. E para o lado criativo, o corner-shape e a função shape() estão abrindo layouts não retangulares, permitindo “quadrados” e caminhos complexos que respondem a variáveis ​​CSS. Dito isto, mal posso esperar para ter um design cheio de esquilos! Um futuro esperançoso Estamos testemunhando um mundo onde o CSS está se tornando capaz de lidar com lógica, estado e interações complexas que antes pertenciam ao JavaScript. Recursos como moveBefore (preservando o estado DOM para iframes/vídeos) e attr() (usando tipos além de strings para cores e grades) consolidam ainda mais essa realidade. Embora alguns desses recursos sejam atualmente experimentais ou específicos do Chrome, o impulso é inegável. Devemos esperar suporte contínuo em todos os navegadores por meio de iniciativas como a Interop para garantir que esses recursos se tornem a base. Dito isto, ter mecanismos de navegador é tão importante quanto ter todos esses recursos incríveis no “Chrome first”. Esses novos recursos precisam ser discutidos, ajustados e testados antes mesmo de chegar aos navegadores. É um momento fantástico para entrar no CSS. Não estamos mais apenas estilizando documentos; estamos criando aplicativos dinâmicos, ergonômicos e robustos com um kit de ferramentas nativo mais poderoso do que nunca. Vamos seguir em frente com esta nova era e espalhar a palavra. Isto é CSS embrulhado!

You May Also Like

Enjoyed This Article?

Get weekly tips on growing your audience and monetizing your content — straight to your inbox.

No spam. Join 138,000+ creators. Unsubscribe anytime.

Create Your Free Bio Page

Join 138,000+ creators on Seemless.

Get Started Free