CSS 容器查询:响应式设计的新范式

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 倍。