全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-16 6 分钟 ✍️ juanwangdev

容器查询中的容器类型(inline-size, size, normal)

container-type定义容器的查询维度和CSS Containment限制级别。

三种容器类型

类型查询维度Containment级别
inline-size内联尺寸(宽度)Layout + Inline
size宽度和高度Layout + Style + Inline + Size
normal无查询能力无Containment

inline-size类型

定义

只查询内联方向尺寸(水平书写模式下为宽度)。

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

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

Containment限制

触发Layout Containment和Inline Containment:

CSS
.container {
  container-type: inline-size;
}

/* 效果:
1. Layout Containment:内部布局不影响外部
2. Inline Containment:行内内容被隔离
3. 可查询内联尺寸
4. 不限制高度查询(无尺寸Containment)
*/

适用场景

  • 响应式卡片、列表
  • 组件宽度自适应
  • 单方向布局切换
CSS
.sidebar {
  container-type: inline-size;
}

@container (min-width: 200px) {
  .nav-item {
    display: flex;
    align-items: center;
  }
}

inline-size是最常用的类型,性能开销较小。

size类型

定义

同时查询宽度和高度。

CSS
.modal-container {
  container-type: size;
  width: 500px;
  height: 400px;
}

@container (min-width: 300px) and (min-height: 200px) {
  .modal {
    padding: 32px;
  }
}

@container (orientation: portrait) {
  .modal {
    flex-direction: column;
  }
}

Containment限制

触发完整Containment:

CSS
.container {
  container-type: size;
}

/* 效果:
1. Size Containment:元素尺寸固定,不计入子元素
2. Layout Containment:内部布局隔离
3. Style Containment:样式计算隔离
4. Inline Containment:行内内容隔离
*/

完整Containment含义

Containment类型作用
Size尺寸不受子元素影响(如浮动子元素不影响高度)
Layout内部布局不影响外部元素位置
Style计数器等样式不影响外部
Inline行内内容被限制在容器内

适用场景

  • 固定尺寸容器内的组件
  • 需要查询高度的布局
  • orientation查询
CSS
.dashboard-panel {
  container-type: size;
  width: 100%;
  height: 400px;
}

@container (min-height: 300px) {
  .panel-content {
    display: grid;
    grid-template-rows: auto 1fr auto;
  }
}

normal类型

定义

不启用查询能力,无Containment限制。

CSS
.container {
  container-type: normal;
}

/* 效果:
1. 不触发任何Containment
2. 不能被@container查询
3. 可以作为命名容器(配合container-name)
*/

与默认行为一致

未设置container-type时默认为normal

CSS
/* 以下等效 */
.box {}
.box { container-type: normal; }

使用场景

  • 仅需要命名容器(配合container-name
  • 不需要尺寸查询
  • 保持正常布局行为
CSS
/* 命名容器但不查询尺寸 */
.theme-container {
  container-name: theme;
  container-type: normal;
}

/* 不存在尺寸查询,但可被其他方式引用 */

类型选择指南

需求推荐类型
宽度自适应inline-size
高度自适应size
orientation查询size
使用cqw/cqh单位size
使用cqi单位inline-size
仅命名容器normal
性能优先inline-size

简写语法

container属性可同时设置类型和名称:

CSS
/* 分开写 */
.card-container {
  container-type: inline-size;
  container-name: card;
}

/* 简写 */
.card-container {
  container: card / inline-size;
}

Containment副作用

Size Containment注意

CSS
.size-container {
  container-type: size;
}

.float-child {
  float: left;
}

/* 问题:父元素高度不包含浮动子元素 */
/* 解决:显式设置高度 */
.size-container {
  height: 200px;
}

Layout Containment效果

CSS
.layout-container {
  container-type: inline-size;
}

/* 效果:
- overflow: hidden行为
- 新的绝对定位包含块
- 固定定位元素相对于容器而非视口
*/

性能对比

类型性能开销原因
inline-size最小Containment
size完整Containment
normal无限制

推荐:优先使用inline-size,仅在需要高度查询时使用size

要点总结

  1. inline-size:只查询内联尺寸,最常用,性能最优
  2. size:查询双向尺寸,触发完整Containment
  3. normal:无查询能力,可配合命名使用
  4. size类型下浮动子元素不影响父元素高度
  5. 优先选择inline-size以获得更好性能

📝 发现内容有误?点击此处直接编辑

← 上一篇 容器查询中的命名容器与嵌套容器
下一篇 → 容器查询单位(cqw, cqh, cqi, cqb, cqmin, cqmax)
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库