不用写复杂媒体查询!用 CSS Grid 轻松制作自适应网页卡片布局

举报
AiGuoHou 发表于 2026/11/04 09:41:05 2026/11/04
【摘要】 制作网页时,经常需要展示文章列表、商品卡片或图片画廊。传统布局可能需要为电脑、平板和手机分别编写不同的 CSS 规则。其实,CSS Grid 提供了一个非常实用的组合:repeat()、auto-fit 和 minmax()。只需几行代码,就能让卡片根据屏幕宽度自动排列,初学者也能轻松掌握。

网页开发中有一个常见问题:电脑屏幕足够宽,可以一行展示三张卡片,但手机屏幕较窄,只能展示一张。如果每次都手动计算列数,不仅麻烦,后期修改也不方便。

今天我们通过一个完整的小例子,学习如何实现自动适应屏幕的卡片布局。

一、先认识 CSS Grid

CSS Grid 是一种二维网页布局方式,可以同时控制元素的行和列,非常适合制作网格结构。

假设有三个卡片,最简单的三列布局可以这样写:

.container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 20px;
}

其中:

  • display: grid:将容器设置为网格布局。
  • repeat(3, 1fr):创建三列,每列平均分配可用空间。
  • gap: 20px:设置卡片之间的间距。

这种方式简单,但列数固定。如果屏幕变窄,就需要额外编写媒体查询调整布局。

二、关键技巧:让列数自动变化

我们可以将 repeat() 中的数字改成 auto-fit:

.container {
  display: grid;
  grid-template-columns:
    repeat(auto-fit, minmax(220px, 1fr));
  gap: 20px;
}

这段代码就是今天的核心。

它包含三个重要概念:

1. auto-fit:自动适应列数

浏览器会根据容器的可用宽度,自动安排能够放下的列。宽屏可以显示多列,窄屏则会减少列数。

2. minmax(220px, 1fr):设置列宽范围

每列理想情况下至少宽 220px,剩余空间则通过 1fr 平均分配。

3. gap:控制卡片间距

可以使用 gap: 16px 或 gap: 24px,根据设计需要调整。

与固定列数相比,这种方式不必提前知道用户使用的是手机还是电脑,就能自动调整布局。

三、动手练习:制作一个响应式卡片页面

现在创建一个 index.html 文件,将以下代码完整复制进去。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, initial-scale=1">
  <title>我的学习卡片</title>

  <style>
    * {
      box-sizing: border-box;
    }

    body {
      margin: 0;
      padding: 24px;
      font-family: sans-serif;
    }

    .container {
      display: grid;
      grid-template-columns:
        repeat(auto-fit, minmax(220px, 1fr));
      gap: 20px;
      max-width: 1000px;
      margin: auto;
    }

    .card {
      padding: 24px;
      border: 1px solid #ddd;
      border-radius: 12px;
      background: #f8f8f8;
    }

    .card h2 {
      margin-top: 0;
      font-size: 20px;
    }

    .card p {
      line-height: 1.7;
    }
  </style>
</head>

<body>
  <main class="container">
    <article class="card">
      <h2>Python 入门</h2>
      <p>学习变量、条件判断和循环。</p>
    </article>

    <article class="card">
      <h2>网页开发</h2>
      <p>掌握 HTML、CSS 和 JavaScript。</p>
    </article>

    <article class="card">
      <h2>效率工具</h2>
      <p>使用实用工具提高日常工作效率。</p>
    </article>

    <article class="card">
      <h2>网络安全</h2>
      <p>了解密码保护和网络安全基础。</p>
    </article>
  </main>
</body>
</html>

四、如何测试响应式效果?

不需要准备多台手机或电脑,浏览器开发者工具就能帮助你测试。

  1. 使用 Chrome 或 Edge 打开刚才的网页。
  2. 按下 F12 打开开发者工具。
  3. 点击设备模拟工具栏,通常可以使用 Ctrl + Shift + M 切换设备模拟模式。
  4. 选择不同的手机或平板尺寸。
  5. 拖动预览区域的宽度,观察卡片数量和宽度如何变化。

你会发现,屏幕宽度足够时,卡片自动排列成多列;空间不足时,列数会减少,卡片也会自动调整宽度。

这里不需要额外添加 @media 媒体查询,因为 Grid 已经根据容器宽度完成了布局调整。

五、再认识一个容易混淆的属性:auto-fill

CSS Grid 还有一个与 auto-fit 很相似的关键字:auto-fill。

两者都可以自动计算能够容纳的列数,但有一个区别:

  • auto-fit:会折叠没有内容的空列,让已有卡片使用剩余空间。
  • auto-fill:会尽可能保留可容纳的网格轨道,即使部分轨道没有卡片。

对于普通文章卡片和商品列表,通常可以先选择 auto-fit;如果希望保留固定的网格空位,则可以尝试 auto-fill。

总结: CSS Grid 的 repeat(auto-fit, minmax(220px, 1fr)) 是一个非常实用的响应式布局技巧,不需要为每种屏幕尺寸单独设置列数,就能让网页卡片自动排列;掌握这个组合,你就可以更轻松地制作博客首页、商品列表和个人作品展示页面。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。