You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用CSS Grid实现自适应列宽的响应式组件(无需媒体查询)

不用媒体查询,用CSS Grid实现响应式两列/单列切换组件

这太适合用CSS Grid的容器自适应特性来实现了,完全不需要写传统的媒体查询,我给你两种实用方案,都是纯CSS实现:

方案1:纯Grid自动适配(无需任何查询)

核心思路是利用auto-fit和minmax()结合min()函数,让Grid自动根据可用空间判断是显示两列还是单列。当空间足够时,图片列固定宽度,文本列占满剩余;空间不足时,自动切换为单列布局。

HTML结构

<div class="responsive-card">
  <div class="card-image">
    <img src="your-image-url.jpg" alt="组件图片">
  </div>
  <div class="card-text">
    <h3>示例标题</h3>
    <p>这里是组件的文本内容,当容器宽度足够时会显示在图片右侧;当空间不足时,会自动切换到图片下方,全程不用媒体查询!</p>
  </div>
</div>

CSS代码

.responsive-card {
  display: grid;
  /* 核心逻辑:创建自适应列,每列最小宽度为`min(200px, 100%)`(窄屏时占满整行),最大宽度1fr */
  grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr));
  gap: 1.5rem; /* 元素间距,可按需调整 */
  padding: 1rem;
  border: 1px solid #e0e0e0;
  border-radius: 8px;
}

/* 强制图片列在宽屏时固定200px宽度,防止被压缩 */
.card-image {
  width: 200px;
  flex-shrink: 0;
  justify-self: start; /* 图片在列内左对齐 */
}

.card-image img {
  width: 100%;
  height: auto;
  border-radius: 4px;
}

方案2:Grid + 容器查询(精准控制切换阈值)

如果需要更精准地定义“空间足够”的标准(比如必须容器宽度≥500px才显示两列),可以用CSS容器查询——它不属于传统媒体查询,完全基于组件自身的可用空间:

CSS代码(基于方案1的HTML结构修改)

.responsive-card {
  container-type: inline-size; /* 声明该容器为尺寸查询容器 */
  display: grid;
  grid-template-columns: 1fr; /* 默认单列布局 */
  gap: 1.5rem;
  padding: 1rem;
  border: 1px solid #e0e0e0;
  border-radius: 8px;
}

/* 当容器宽度≥500px时,切换为两列布局 */
@container (min-width: 500px) {
  .responsive-card {
    grid-template-columns: 200px 1fr; /* 左列固定200px,右列占满剩余空间 */
  }
}

.card-image img {
  width: 100%;
  height: auto;
  border-radius: 4px;
}

效果说明

  • 宽屏状态:图片固定200px宽度,文本列占满剩余可用空间,形成2列1行布局。
  • 窄屏状态:图片和文本自动堆叠为1列2行,各自占满整行宽度。

两种方案都完全不需要传统的@media媒体查询,完美适配你的需求!

内容的提问来源于stack exchange,提问作者pmccloghrylaing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:42:03