Layouts CSS de Próxima Geração: Container Queries, Subgrid e Padrões Modernos
Na última década, o "Design Responsivo" foi sinônimo de Media Queries. Observávamos a largura de toda a janela do navegador (a viewport) e ajustávamos os nossos layouts de acordo. Mas à medida que as aplicações web se tornaram mais baseadas em componentes (React, Vue, Web Components), esta abordagem tornou-se um grande gargalo.
O CSS moderno finalmente resolveu isto com as Container Queries, juntamente com adições poderosas como Subgrid e Aspect-Ratio.
1. Container Queries: O Santo Graal do Design Modular
Imagine que tem um componente Card. Quer que ele mostre uma barra lateral quando for largo, e um layout empilhado quando for estreito. Com as Media Queries, o Card não sabe quão largo ele próprio é; ele apenas sabe quão larga é a janela. Se colocar esse cartão numa barra lateral estreita num ecrã de desktop, o layout quebra.
As Container Queries permitem que um componente responda ao seu próprio tamanho.
Como usar:
Primeiro, defina um contentor:
.card-wrapper {
container-type: inline-size;
container-name: card-container;
}
Depois, escreva uma query para o componente lá dentro:
@container card-container (min-width: 400px) {
.card {
display: grid;
grid-template-columns: 1fr 2fr;
}
}
Agora, o cartão mudará o seu layout com base no espaço disponível em .card-wrapper, independentemente do tamanho do ecrã.
2. CSS Subgrid: Alinhando o inalinhável
O CSS Grid é incrível, mas tinha uma limitação importante: as grelhas aninhadas não podiam alinhar-se facilmente com a grelha pai. Se tivesse uma lista de cartões com cabeçalhos e rodapés, e quisesse que todos os cabeçalhos tivessem a mesma altura independentemente do conteúdo, não era fácil de conseguir.
O Subgrid resolve isto permitindo que um elemento filho "herde" as linhas ou colunas do seu pai.
Exemplo:
.grid-parent {
display: grid;
grid-template-rows: auto 1fr auto; /* Cabeçalho, Corpo, Rodapé */
}
.card {
grid-row: span 3; /* Ocupa 3 linhas do pai */
display: grid;
grid-template-rows: subgrid; /* Usa o dimensionamento de linhas do pai! */
}
Com grid-template-rows: subgrid, todos os elementos .card na mesma linha terão cabeçalhos e rodapés perfeitamente alinhados, mesmo que o seu conteúdo interno varie em comprimento.
3. Controlar proporções com aspect-ratio
Antes desta propriedade, manter uma proporção de 16:9 para um vídeo ou 1:1 para uma foto de perfil exigia "hacks" como o truque do padding-top. Agora, é uma linha simples.
.video-thumbnail {
width: 100%;
aspect-ratio: 16 / 9;
object-fit: cover;
}
Isto é crucial para prevenir o Layout Shift (CLS), pois o navegador pode reservar o espaço correto para uma imagem ou vídeo antes mesmo de terminar de carregar.
4. Padrões Modernos de Flexbox e Grid
O CSS moderno também traz melhorias pequenas mas poderosas aos motores de layout existentes:
gap para Flexbox
Acabou o margin-right em todos os itens exceto no último filho. Basta usar gap.
.flex-container {
display: flex;
gap: 1rem;
}
Propriedades Lógicas (Logical Properties)
Pense em termos de inline e block em vez de left, right, top e bottom. Isto torna o suporte para línguas da direita para a esquerda (RTL) automático.
.element {
margin-inline-start: 20px; /* margin-left em LTR, margin-right em RTL */
padding-block: 10px; /* equivale a padding-top e padding-bottom */
}
5. Performance e Suporte dos Navegadores
Desde 2024, Container Queries, Subgrid e Aspect-Ratio são suportados em todos os principais navegadores. Para os programadores, isto significa que podemos finalmente parar de usar pesados JavaScript Resize Observers e hacks complexos de grid.
O resultado? Ficheiros CSS menores, melhor performance e bases de código muito mais fáceis de manter.
FAQ: Perguntas Frequentes
P: Devo parar de usar Media Queries?
R: Não. As Media Queries continuam a ser a melhor ferramenta para o layout da página em alto nível (ex: "a navegação principal deve ser uma barra superior ou lateral?"). As Container Queries são para o layout ao nível do componente.
P: O Subgrid funciona em todos os navegadores?
R: Sim! Embora tenha sido a última destas funcionalidades a obter suporte universal, está agora disponível nas versões mais recentes do Chrome, Safari e Firefox.
P: Posso usar Container Queries para tipografia?
R: Sim! Pode usar unidades de container query como cqi para tornar o tamanho do texto relativo à largura do contentor, o que é muitas vezes muito mais útil do que as unidades de viewport (vw).
Construa mais com menos código
As ferramentas de layout CSS moderno foram desenhadas para trabalhar juntas. Ao combinar Grid, Subgrid e Container Queries, pode construir layouts que eram impossíveis — ou extremamente frágeis — há apenas alguns anos atrás.
Pronto para testar os seus novos layouts? Veja o nosso Visualizador de Layout CSS para ver estes conceitos em ação.