Unidades cqw e cqi no CSS | CSS
- Unidades cqw e cqi no CSS | CSS
Definição
As unidades cqw e cqi fazem parte das Container Query Units, permitindo que elementos sejam dimensionados com base no tamanho do container pai, ao invés da viewport.
Isso resolve limitações clássicas de responsividade onde componentes dependem da tela inteira (vw, vh) ao invés do contexto onde estão inseridos.
Conceitos fundamentais
cqw
- Representa 1% da largura do container
- Baseado no eixo físico horizontal
.box {
width: 50cqw;
}
Se o container tiver 400px, o resultado será:
50cqw = 200px
cqi
- Representa 1% do inline-size do container
- Baseado no eixo inline (depende do modo de escrita)
.title {
font-size: 5cqi;
}
Em layout padrão (horizontal LTR):
5cqi = 5% da largura do container
Em layout vertical, o eixo inline muda → comportamento diferente
Pré-requisito obrigatório
Para usar cqw e cqi, o container precisa declarar:
.container {
container-type: inline-size;
}
Sem isso, o comportamento pode cair para valores baseados na viewport.
Comparação com outras unidades
cqw vs %
.box {
width: 50%;
}
%depende do contexto do layout- pode ser afetado por
padding,display,box-sizing
.box {
width: 50cqw;
}
- sempre relativo ao container definido
- comportamento mais previsível em componentes
cqw vs vw
.box {
width: 50vw;
}
- relativo à viewport (tela inteira)
.box {
width: 50cqw;
}
- relativo ao container
Diferença prática:
vw→ layout globalcqw→ layout local (componente)
cqi vs cqw
cqw→ largura físicacqi→ eixo inline (semântico)
Use cqi quando quiser compatibilidade com:
- idiomas RTL
- layouts verticais
Exemplo completo
<div class="wrapper">
<div class="card">
<h1 class="title">Título</h1>
<div class="box"></div>
</div>
</div>
.wrapper {
width: 800px;
}
.card {
width: 400px;
container-type: inline-size;
border: 1px solid #000;
}
.title {
font-size: 4cqi;
}
.box {
width: 50cqw;
height: 50px;
background: gray;
}
Resultado:
.title→ 4% do container (16px).box→ 200px
Uso com @container
.card {
container-type: inline-size;
}
.title {
font-size: 2cqi;
}
@container (min-width: 300px) {
.title {
font-size: 4cqi;
}
}
Aqui o comportamento é baseado no tamanho do container, não da tela.