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,让你的组件更加灵活和强大。

相关推荐
七牛云行业应用13 小时前
OpenCode 安装与配置模型完整指南:终端 AI 编码 Agent 上手教程
ai·ai编程
IT_陈寒13 小时前
React的setState竟然不是立刻生效的,害我调试半天
前端·人工智能·后端
腾讯云大数据14 小时前
腾讯云大数据计算智能:从结构化 SQL 到多模态 AI Workload 的融合范式
大数据·人工智能·腾讯云
AI职业加油站14 小时前
大数据采集工程师:技术栈全景图与实战路径
大数据·人工智能·数据分析
code 旭14 小时前
不会编程也能做AI 量化交易工具:基于 MCP 协议的自然语言交易思路不会编程也能做AI 量化交易工具:基于 MCP 协议的自然语言交易思路
人工智能·ai·量化交易·mcp
AI服务老曹14 小时前
视觉算法模型管理完整流程:多版本上线、灰度发布与回滚的落地实践
人工智能·docker·音视频
机器之心14 小时前
Anthropic发现Claude「类意识工作台」!神秘J空间藏着没说出口的想法
人工智能·openai
AI实践录15 小时前
大模型架构:理解大模型预测输出文本的底层逻辑
人工智能
Lifangyun_WD15 小时前
昇腾910B vs NVIDIA A100/H100:国产GPU算力租赁选型与迁移实践
人工智能·gpu算力·ai算力·算力租赁·gpu云主机
卡卡罗特AI15 小时前
GPT5.6 今晚全量开发?Codex上线史上最强Coding模型!
人工智能·ai编程