前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库CSS 容器查询 container queries 与媒体查询区别
CSS响应式设计

容器查询和媒体查询分别解决什么问题?

@media 常按视口改变整页布局,@container 则按组件所处容器的尺寸改变内部布局。同一张卡片在宽主栏和窄侧栏中,可以因此自动呈现不同结构。

前端进阶之旅 · 一题精讲更新于 2026.09.29
CSS#响应式设计#容器化
先看核心答案读代码示例
理解线索

两种查询测量不同对象

  1. @media根据视口或设备特征决定规则
  2. @container根据祖先容器特征决定规则
  3. container-type声明可用于尺寸查询的容器

屏幕宽不代表组件宽:桌面上的侧栏卡片可能比手机主栏卡片更窄。

核心回答

先记住这个答案

容器查询让组件根据周围给它的空间调整后代样式,而媒体查询主要根据视口或设备特征调整样式。页面是否变成双栏可以交给 @media;卡片内部图片与文字是否并排,交给 @container 更稳。尺寸查询前需要为卡片外壳指定如 container-type: inline-size,规则里的目标元素应位于这个容器内部。

  • 媒体查询适合页面级布局
  • 容器查询适合可复用组件
  • 尺寸查询需要合格祖先容器
  • 查询规则通常作用于容器后代

同一组件在不同位置复用

假设商品卡在首页主栏占 40rem,在详情页侧栏只占 18rem。两处都处于桌面视口,媒体查询会给出相同判断;容器查询却能根据卡片实际分到的宽度选择布局。

卡片够宽才并排CSS
.product { container-type: inline-size; }
.product__content { display: block; }
@container (min-width: 28rem) {
  .product__content { display: grid; grid-template-columns: 12rem 1fr; }
}

卡片外壳提供查询基准,内部 .product__content 在足够宽时才变为图文并排。缩小侧栏不需要额外给组件传“窄模式”属性,CSS 可以根据实际空间处理。 浏览器寻找的是目标元素祖先中的合格容器。若卡片内部还有另一个更近的查询容器,无名查询可能改查那一层,需要用 container-name 明确指定。

页面骨架仍然需要媒体查询

容器查询不取代媒体查询。整页导航折叠、视口高度变化、打印模式等需求还是页面或设备环境问题;卡片、搜索框、评论区等复用组件更适合按自身可用空间响应。

两者可嵌套,让规则同时要求大屏环境和宽组件。只要组件宽度就能决定时,不要再加视口条件,否则组件在新页面里可能意外失效。

容器查询的“容器”不是任意父元素。示例里必须先让 .product 成为尺寸查询容器;否则 @container 没有合格祖先,即使 .product__content 在宽主栏里也不会切成两列。反过来,若页面外层已经有一个更近的容器,内部规则可能测到它。复用组件时把查询容器写在组件外壳,并在主栏、窄侧栏、弹窗三处检查,是验证边界最直接的办法。

回答前,多想一步

容易答错的地方

认为 @container 查询目标元素自己
尺寸查询通常查看目标的祖先容器。给目标自己加容器类型,并不能让它直接根据自己宽度修改自己。
认为容器查询能完全代替媒体查询
窗口级导航、打印媒体、用户偏好等条件仍属于 @media 擅长的范围。
试着用自己的话回答

面试官还会怎么问?

为什么尺寸查询要求 container-type?

它提供稳定的查询尺寸,避免后代样式又反过来改变用于判断的容器尺寸。

不指定名字会查询谁?

通常选最近的合格祖先容器。多层嵌套时可给目标层命名。

一个组件里能同时用两种查询吗?

可以。嵌套时两组条件都要成立,适合同时依赖页面环境和组件空间的规则。

从一道题,走向一组知识

把知识连起来

响应式设计

容器查询可以嵌套吗,cqw 到底参考哪一层?

嵌套查询时要确认找到哪一层容器。

响应式设计

容器查询不受支持时,组件该怎样回退?

旧浏览器回退应先提供可用的默认布局。

参考资料

  • CSS:响应式设计参考资料

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 同一组件在不同位置复用
  3. 页面骨架仍然需要媒体查询
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑