The End of Media Queries? Introduction to Container Queries
Responsive design has always been bound to the viewport. Container Queries change the game by allowing components to adapt based on their parent container's size.

Media queries respond to the viewport. A card inside a 200px sidebar on a 4K monitor still sees a 4K screen.
@media (min-width: 768px) {
.card {
display: flex;
}
}This works for page layouts. For component libraries, the component has no way to know how much space it actually has.
The Problem: Context Awareness
Imagine a “Product Card” component.
- On the homepage, it occupies the full width. Simple.
- In a sidebar, it’s squeezed into a narrow column.
- Inside a dashboard widget, it’s medium-sized.
If you rely on @media queries, the card only knows how wide the screen is. It has no idea it’s squished inside a tiny sidebar on a massive 4k monitor.
The Solution: Container Queries
Container Queries allow us to style an element based on the available space within its container, not the viewport.
Step 1: Define the Container
First, you tell the parent element that it is a container.
.card-wrapper {
/* Define this element as a query container */
container-type: inline-size;
container-name: card-container;
}container-type: inline-size: We want to query the width (most common).container-name: card-container: Optional, but good practice. It allows us to target this specific container explicitly.
Step 2: Query the Container
Now, inside your component, you query that container.
.card {
display: flex;
flex-direction: column;
}
/* When the container is wider than 400px */
@container card-container (min-width: 400px) {
.card {
flex-direction: row; /* Switch to horizontal layout */
align-items: center;
}
.card-image {
width: 50%;
}
}New Units: The “Fluid” Typography Dream
Container Queries brought new CSS units that are relative to the container’s size, similar to how vw is relative to the viewport.
cqw: 1% of a query container’s widthcqi: 1% of a query container’s inline size (logical width)cqh: 1% of a query container’s heightcqmin/cqmax: Smaller/Larger of cqi and cqb
This is perfect for fluid typography that scales with the component, not the screen.
.card-title {
/* Title is always 5% of the card's width */
font-size: 5cqi;
}Advanced: Style Queries (Experimental)
We can also query the computed style of a container, not just its size.
@container style(--theme: dark) {
.card {
background: black;
color: white;
}
}Note: Style queries have varying browser support compared to Size queries.
Implementation Strategy
Container Queries let components own their breakpoints.
- True Portability: You can drag-and-drop that
.cardinto a 3-column grid, a sidebar, or a modal. It will “look at itself”, realize how much space it has, and adapt automatically. - Decoupling: The page layout developer doesn’t need to know the inner breakpoints of the card.
Browser Support
As of 2026, Container Queries (@container) and units (cqi/cqw) are supported in all major evergreen browsers (Chrome, Firefox, Safari, Edge).
Conclusion
Media queries still work for global page layouts. For individual UI elements, Container Queries are the better tool. They respond to available space, not screen dimensions.