CSS 容器查询:响应式设计的新范式
容器查询(Container Queries)是 CSS 近年来最重要的新特性之一。与媒体查询基于视口不同,容器查询让组件可以根据自身容器的大小响应式调整,真正实现了组件级别的响应式设计。
定义容器上下文:
/* 父容器声明为容器 */
.card-wrapper {
container-type: inline-size;
container-name: card;
}
/* 基于容器宽度调整布局 */
@container card (min-width: 400px) {
.card {
display: grid;
grid-template-columns: 200px 1fr;
gap: 1rem;
}
}
@container card (min-width: 600px) {
.card {
grid-template-columns: 250px 1fr 200px;
}
}
/* 小容器:垂直堆叠 */
@container card (max-width: 399px) {
.card {
display: flex;
flex-direction: column;
}
}
容器查询单位让尺寸随容器缩放:
.card-title {
font-size: clamp(1rem, 3cqi, 1.5rem);
/* cqi = 容器内联尺寸的 1% */
}
.card-image {
width: 100%;
aspect-ratio: 16 / 9;
object-fit: cover;
border-radius: 0.5cqi;
}
容器查询与媒体查询的配合使用是最佳实践。媒体查询处理页面级布局(如侧边栏显隐),容器查询处理组件级布局(如卡片内部排列)。在我们的设计系统中,容器查询让组件真正变成了"自适应积木",无论放在什么容器中都能优雅展示,复用率提升了 3 倍。