CSS Container Queries:响应式设计的新突破

CSS Container Queries:响应式设计的新突破

什么是 Container Queries?

Container Queries 是 CSS 的一个新特性,允许根据父容器的尺寸来应用样式。

Container Queries vs Media Queries

特性 Media Queries Container Queries
参考对象 视口尺寸 父容器尺寸
应用范围 全局 局部组件
响应粒度 页面级别 组件级别

基础用法

css 复制代码
.container {
  container-type: inline-size;
  container-name: card;
}

@container card (min-width: 400px) {
  .card-content {
    display: flex;
  }
}

Container Type

css 复制代码
.element {
  container-type: size;        /* 同时关注宽高 */
  container-type: inline-size; /* 仅关注行内尺寸 */
  container-type: normal;      /* 默认,不建立容器 */
}

Container Name

css 复制代码
.card {
  container-type: inline-size;
  container-name: card-container;
}

@container card-container (min-width: 500px) {
  .card-title {
    font-size: 1.5rem;
  }
}

容器查询单位

css 复制代码
@container (min-width: 400px) {
  .element {
    font-size: 1cqi;  /* 容器宽度的 1% */
    padding: 2cqw;    /* 容器宽度的 2% */
    margin: 3cqh;     /* 容器高度的 3% */
  }
}

实际应用

响应式卡片

css 复制代码
.card {
  container-type: inline-size;
  container-name: card;
}

.card-header {
  font-size: 1rem;
}

.card-body {
  padding: 1rem;
}

@container card (min-width: 400px) {
  .card {
    display: flex;
  }
  
  .card-header {
    font-size: 1.25rem;
    width: 30%;
  }
  
  .card-body {
    flex: 1;
    padding: 1.5rem;
  }
}

组件级响应式

css 复制代码
.avatar {
  width: 48px;
  height: 48px;
  border-radius: 50%;
}

.user-info {
  container-type: inline-size;
  container-name: user-info;
}

@container user-info (min-width: 300px) {
  .avatar {
    width: 64px;
    height: 64px;
  }
  
  .username {
    font-size: 1.1rem;
    font-weight: bold;
  }
}

组合使用

css 复制代码
.card {
  container-type: inline-size;
  container-name: card;
}

@container card (min-width: 400px) and (max-width: 600px) {
  .card-content {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }
}

@container card (min-width: 601px) {
  .card-content {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
  }
}

嵌套容器

css 复制代码
.layout {
  container-type: inline-size;
  container-name: layout;
}

.card {
  container-type: inline-size;
  container-name: card;
}

@container layout (min-width: 800px) {
  .cards {
    display: grid;
    grid-template-columns: 1fr 1fr;
  }
}

@container card (min-width: 300px) {
  .card-title {
    font-size: 1.25rem;
  }
}

浏览器兼容性

浏览器 支持情况
Chrome ✅ 105+
Firefox ✅ 119+
Safari ✅ 16.4+
Edge ✅ 105+

最佳实践

1. 合理命名容器

css 复制代码
.main-content {
  container-type: inline-size;
  container-name: main-content;
}

2. 优先使用容器查询

css 复制代码
/* 先定义默认样式 */
.card {
  padding: 1rem;
}

/* 再定义容器查询样式 */
@container (min-width: 400px) {
  .card {
    padding: 1.5rem;
  }
}

3. 结合媒体查询使用

css 复制代码
/* 全局响应式 */
@media (min-width: 1200px) {
  .page-container {
    max-width: 1200px;
  }
}

/* 组件响应式 */
.card {
  container-type: inline-size;
}

@container (min-width: 300px) {
  .card {
    display: flex;
  }
}

总结

Container Queries 为响应式设计带来了新的可能性:

  1. 组件级响应式:根据父容器尺寸调整样式
  2. 更高的复用性:组件可以在不同场景自适应
  3. 更清晰的代码:将响应式逻辑封装在组件内部
  4. 更好的用户体验:更精细的响应式控制

掌握 Container Queries,让你的组件更加灵活和强大。

相关推荐
共绩算力11 小时前
无服务器冷启动:HF 缓存与预计算哈希
人工智能·缓存·serverless·哈希算法·共绩算力
weixin_5536544811 小时前
Claude 4.7 的“逻辑美学” vs GPT-5 的“暴力推理”:2026 核心业务代码审计该用谁?
人工智能·gpt·ai·大模型·token
YueJoy.AI11 小时前
创业公司如何设计有效的OKR
人工智能·ai·语言模型
qcx2311 小时前
【AI Daily】AI日报 | 2026-05-24
ai·llm·github·论文·agent
码农小旋风11 小时前
第一章 初识智能体 | Agent技能规则与命令完全对比指南
人工智能·claude
格桑阿sir11 小时前
07-大模型智能体开发工程师:提示词工程(Prompt Engineering)
ai·llm·prompt·提示词·context·智能体·提示词工程
子午11 小时前
基于YOLO的PCB电路板缺陷检测系统~Python+目标检测+深度学习+YOLOV8算法+模型训练+人工智能
人工智能·python·yolo
初心未改HD11 小时前
深度学习之CNN池化层详解
人工智能·深度学习·cnn
明月照山海-11 小时前
机器学习周报四十六
人工智能·机器学习