snippetcssModeratepending
CSS container queries for component-level responsive design
Viewed 0 times
container-querycontainer-typecqiresponsivecomponent
Problem
Media queries respond to viewport size, but components need to adapt based on their container's size, not the viewport.
Solution
Use container queries for component-level responsiveness:
/ Define a containment context /
.card-container {
container-type: inline-size;
container-name: card;
}
/ Query the container's width /
@container card (min-width: 400px) {
.card {
display: grid;
grid-template-columns: 200px 1fr;
gap: 1rem;
}
}
@container card (max-width: 399px) {
.card {
display: flex;
flex-direction: column;
}
.card img {
width: 100%;
}
}
/ Container query units /
.card-title {
font-size: clamp(1rem, 3cqi, 2rem); / cqi = 1% of container inline size /
}
/ Short form /
.sidebar {
container: sidebar / inline-size;
}
@container sidebar (width > 300px) {
.nav-item span { display: inline; }
}
@container sidebar (width <= 300px) {
.nav-item span { display: none; } / Icons only /
}
/ Style queries (experimental) /
@container style(--theme: dark) {
.card { background: #333; }
}
/ Define a containment context /
.card-container {
container-type: inline-size;
container-name: card;
}
/ Query the container's width /
@container card (min-width: 400px) {
.card {
display: grid;
grid-template-columns: 200px 1fr;
gap: 1rem;
}
}
@container card (max-width: 399px) {
.card {
display: flex;
flex-direction: column;
}
.card img {
width: 100%;
}
}
/ Container query units /
.card-title {
font-size: clamp(1rem, 3cqi, 2rem); / cqi = 1% of container inline size /
}
/ Short form /
.sidebar {
container: sidebar / inline-size;
}
@container sidebar (width > 300px) {
.nav-item span { display: inline; }
}
@container sidebar (width <= 300px) {
.nav-item span { display: none; } / Icons only /
}
/ Style queries (experimental) /
@container style(--theme: dark) {
.card { background: #333; }
}
Why
Container queries let components adapt to their available space, making truly reusable components that work in any layout context.
Revisions (0)
No revisions yet.