惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
博客园 - 叶小钗
The Cloudflare Blog
D
DataBreaches.Net
J
Java Code Geeks
G
Google Developers Blog
L
LangChain Blog
N
Netflix TechBlog - Medium
Stack Overflow Blog
Stack Overflow Blog
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
WordPress大学
WordPress大学
小众软件
小众软件
量子位
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
博客园_首页
罗磊的独立博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog
腾讯CDC

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
CSS Container Queries: how to forget about Media Queries ...
Nick Benksim · 2026-05-16 · via DEV Community

Nick Benksim

The Viewport Lie: Why Media Queries Failed Us

Grab a coffee, friend. We need to talk about the lie we’ve been living for over a decade. Since 2010, we’ve been building "responsive" sites by looking at the browser window size. But here is the reality: your UI components don’t care if the user is on an iPhone 15 or a 32-inch monitor. They care about how much space they have inside their parent container. Ever tried to drop a perfectly designed card into a sidebar only to watch it explode because your Media Queries thought you were still on a desktop? Container Queries are the final boss of CSS that we've been waiting for, and by 2026, they have officially made standard Media Queries feel like ancient history for component-level styling.

How We Suffered Before (The Dark Ages of Hacks)

Think back to how we used to handle this. If you had a .card component that needed to look different in a narrow sidebar versus a wide main content area, you had to get messy. We used context-dependent classes like .sidebar .card or .main-content .card. This destroyed our ability to create truly portable components and made our CSS Architecture look like a plate of spaghetti. We tried to solve it with JavaScript ResizeObservers, which killed performance, or dozens of Media Query breakpoints that never quite hit the mark for every possible layout variation. It was a nightmare to maintain and even harder to scale.

The Modern Way: True Modular Freedom in 2026

In 2026, the game has changed. We now use Container Queries. Instead of asking "how wide is the screen?", we ask "how wide is my parent?". This makes components truly atomic. You can take a card, drop it into a three-column grid, a sidebar, or a full-width hero section, and it will automatically adjust its own layout based on the space available. If you're having trouble visualizing these boundaries while building, it’s worth learning how to debug CSS Grid and Flexbox in Developer Tools, as the interaction between containers and their children becomes much more dynamic and visual.

Ready-to-Use Code: The Adaptive Card

Here is how you set up a container-aware component today. First, define the parent as a "container" using the container-type property, then use the @container rule to style the children based on that parent's dimensions.


/* 1. Define the container context on the parent */
.card-container {
  container-type: inline-size;
  container-name: product-grid;
  width: 100%;
}

/* 2. Default styles (Mobile-first/Small space) */
.product-card {
  display: flex;
  flex-direction: column;
  gap: 1rem;
  padding: 1rem;
  border: 1px solid #ddd;
}

/* 3. The magic: Adjust based on container width */
@container product-grid (min-width: 400px) {
  .product-card {
    flex-direction: row;
    align-items: center;
    background: #f9f9f9;
  }

  .product-card img {
    width: 120px;
    height: 120px;
    object-fit: cover;
  }
}

Common Beginner Mistake: The Self-Querying Trap

The most frequent face-palm moment for devs switching to Container Queries is trying to make an element query itself. You cannot set container-type: inline-size on a .card and then write an @container rule for .card in the same CSS block. A container can only query its ancestors. If you want a card to change based on its own width, you must wrap it in a container element or apply the container-type to its parent wrapper. Think of it like this: a child cannot measure their own height while standing on their own head—they need a wall (the parent) to mark the measurement!

🔥 We publish more advanced CSS tricks, ready-to-use snippets, and tutorials in our Telegram channel. Subscribe so you don't miss out!