css Grid常用布局

css Grid常用布局

1. 九宫格布局

html 复制代码
<style>
.container {
    width: 400px;
    height: 400px;
    display: grid;
    grid-template-columns: repeat(3, 1fr); /* 3列等分 */
    grid-template-rows: repeat(3, 1fr); /* 3行等分 */
    gap: 10px; /* 行列间距10px */
  }
  .item {
    background: #42b983;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 20px;
  }
</style>

<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
  <div class="item">8</div>
  <div class="item">9</div>
</div>

2. 自适应响应式卡片布局(一行代码响应式,无媒体查询)

最常用的「商品列表 / 卡片列表」布局,PC 端多列,移动端自动变少列,完美适配所有屏幕,Grid 的封神场景!

html 复制代码
<style>
  .container {
    width: 100%; /* 占满屏幕宽度 */
    display: grid;
    /* 核心响应式:每列最小240px,自动填充列数,超出换行 */
    grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
    gap: 15px; /* 间距 */
    padding: 10px;
  }
  .card {
    height: 180px;
    background: #f5f5f5;
    border-radius: 8px;
  }
</style>
<div class="container">
  <div class="card"></div><div class="card"></div><div class="card"></div>
  <div class="card"></div><div class="card"></div><div class="card"></div>
</div>

3. 圣杯布局(经典三栏布局,中间自适应,两侧固定)

html 复制代码
<style>
  .container {
    width: 100%; height: 500px;
    display: grid;
    /* 核心:左200px,中间自适应(1fr),右200px */
    grid-template-columns: 200px 1fr 200px;
    grid-template-rows: 100px 1fr 100px;
    gap: 10px;
  }
  .header { grid-column: 1/4; background: #42b983; }
  .left { background: #f1c40f; }
  .main { background: #e74c3c; }
  .right { background: #3498db; }
  .footer { grid-column: 1/4; background: #9b59b6; }
</style>
<div class="container">
  <div class="header">头部</div>
  <div class="left">左侧边栏</div>
  <div class="main">中间内容区(自适应)</div>
  <div class="right">右侧边栏</div>
  <div class="footer">底部</div>
</div>

4. 不规则网格布局(博客 / 资讯页面常用)

场景:首页推荐区,大卡片占 2 列 2 行,小卡片占 1 列 1 行,实现错落有致的排版,比 Flex 嵌套更简洁。

html 复制代码
<style>
  .container {
    width: 800px;
    margin: 20px auto;
    display: grid;
    /* 4列等分,基础网格 */
    grid-template-columns: repeat(4, 1fr);
    grid-template-rows: repeat(2, 200px);
    gap: 15px;
  }
  .item {
    background-color: #42b983;
    border-radius: 8px;
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 20px;
  }
  /* 大卡片:跨2列+跨2行 */
  .item-1 {
    grid-column: span 2;
    grid-row: span 2;
    background-color: #e74c3c;
  }
</style>
<div class="container">
  <div class="item item-1">推荐文章</div>
  <div class="item">文章1</div>
  <div class="item">文章2</div>
  <div class="item">文章3</div>
  <div class="item">文章4</div>
</div>

5. 相册瀑布流布局(图片展示常用)

场景:相册页面,图片高度不一,宽度一致,实现错落有致的瀑布流,比 column-count 更灵活可控。

html 复制代码
<style>
  .gallery {
    width: 100%;
    max-width: 1000px;
    margin: 20px auto;
    display: grid;
    /* 4列等分,自适应 */
    grid-template-columns: repeat(4, 1fr);
    gap: 10px;
  }
  .gallery-item {
    width: 100%;
    border-radius: 8px;
    overflow: hidden;
  }
  .gallery-item img {
    width: 100%;
    height: 100%;
    object-fit: cover; /* 保持图片比例 */
  }
  /* 随机设置不同高度,模拟瀑布流 */
  .item-1 { grid-row: span 2; }
  .item-3 { grid-row: span 3; }
  .item-5 { grid-row: span 2; }
  .item-7 { grid-row: span 2; }
</style>
<div class="gallery">
  <div class="gallery-item item-1"><img src="https://picsum.photos/400/600" alt="图片1"></div>
  <div class="gallery-item item-2"><img src="https://picsum.photos/400/300" alt="图片2"></div>
  <div class="gallery-item item-3"><img src="https://picsum.photos/400/800" alt="图片3"></div>
  <div class="gallery-item item-4"><img src="https://picsum.photos/400/400" alt="图片4"></div>
  <div class="gallery-item item-5"><img src="https://picsum.photos/400/600" alt="图片5"></div>
  <div class="gallery-item item-6"><img src="https://picsum.photos/400/300" alt="图片6"></div>
  <div class="gallery-item item-7"><img src="https://picsum.photos/400/600" alt="图片7"></div>
  <div class="gallery-item item-8"><img src="https://picsum.photos/400/400" alt="图片8"></div>
</div>

6. 后台管理系统布局(经典上中下 + 左右结构)

场景:后台系统页面,顶部导航、左侧菜单、右侧内容区、底部版权,完美适配后台布局,比 position 写法更稳定。

html 复制代码
<style>
  * { margin: 0; padding: 0; box-sizing: border-box; }
  body { height: 100vh; }
  .layout {
    height: 100%;
    display: grid;
    /* 行:头部60px,内容区自适应,底部40px */
    grid-template-rows: 60px 1fr 40px;
    /* 列:左侧200px,右侧自适应 */
    grid-template-columns: 200px 1fr;
    grid-template-areas: 
      "header header"
      "sidebar main"
      "footer footer";
  }
  /* 给区域命名,方便定位 */
  .header { grid-area: header; background-color: #333; color: #fff; display: flex; align-items: center; justify-content: center; }
  .sidebar { grid-area: sidebar; background-color: #f5f5f5; padding: 20px; }
  .main { grid-area: main; background-color: #fff; padding: 20px; overflow: auto; }
  .footer { grid-area: footer; background-color: #333; color: #fff; display: flex; align-items: center; justify-content: center; }
</style>
<div class="layout">
  <div class="header">后台管理系统</div>
  <div class="sidebar">
    <div>菜单1</div>
    <div>菜单2</div>
    <div>菜单3</div>
  </div>
  <div class="main">
    <h2>内容区域</h2>
    <p>这里是后台系统的主要内容...</p>
  </div>
  <div class="footer">版权所有 © 2026</div>
</div>

7. 价格卡片布局(电商 / SAAS 产品常用)

场景:产品定价页面,多个价格卡片并排,响应式适配,鼠标悬浮时放大,提升用户体验。

html 复制代码
<style>
  .pricing-container {
    width: 100%;
    max-width: 1200px;
    margin: 50px auto;
    display: grid;
    /* 响应式:最小280px,自动填充列数 */
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 20px;
    padding: 0 20px;
  }
  .pricing-card {
    background-color: #fff;
    border: 1px solid #e5e5e5;
    border-radius: 8px;
    padding: 30px;
    text-align: center;
    transition: transform 0.3s ease;
  }
  .pricing-card:hover {
    transform: translateY(-5px);
    box-shadow: 0 10px 20px rgba(0,0,0,0.1);
  }
  .card-title {
    font-size: 24px;
    margin-bottom: 10px;
    color: #333;
  }
  .card-price {
    font-size: 36px;
    color: #42b983;
    margin: 20px 0;
  }
  .card-btn {
    display: inline-block;
    padding: 10px 20px;
    background-color: #42b983;
    color: #fff;
    text-decoration: none;
    border-radius: 4px;
    margin-top: 20px;
  }
  /* 高亮推荐卡片 */
  .card-recommended {
    border-color: #42b983;
    transform: scale(1.05);
  }
  .card-recommended .card-btn {
    background-color: #e74c3c;
  }
</style>
<div class="pricing-container">
  <div class="pricing-card">
    <h3 class="card-title">基础版</h3>
    <div class="card-price">¥99/月</div>
    <p>适合个人使用</p>
    <a href="#" class="card-btn">立即购买</a>
  </div>
  <div class="pricing-card card-recommended">
    <h3 class="card-title">标准版</h3>
    <div class="card-price">¥199/月</div>
    <p>适合小团队使用</p>
    <a href="#" class="card-btn">立即购买</a>
  </div>
  <div class="pricing-card">
    <h3 class="card-title">企业版</h3>
    <div class="card-price">¥399/月</div>
    <p>适合大型企业使用</p>
    <a href="#" class="card-btn">立即购买</a>
  </div>
</div>

8. 等高卡片布局(电商商品列表 刚需!解决 Flex 最大痛点)

场景: 电商 / 商品列表中,卡片的标题 / 内容多少不一,用 Flex 布局会出现「卡片高度不一致」的问题,需要额外写样式兜底;而 Grid 天生就是等高布局,一行代码搞定所有卡片强制等高,这是 Grid 碾压 Flex 的经典场景!

html 复制代码
<style>
  .goods-list {
    width: 100%;
    max-width: 1200px;
    margin: 20px auto;
    display: grid;
    /* 响应式:最小宽度280px,自动适配列数 */
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 20px; /* 行列间距统一 */
    padding: 0 10px;
  }
  .goods-card {
    border: 1px solid #eee;
    border-radius: 8px;
    padding: 15px;
  }
  .card-img {
    width: 100%;
    height: 180px;
    background: #f5f5f5;
    border-radius: 4px;
    margin-bottom: 10px;
  }
  .card-title {
    font-size: 16px;
    margin-bottom: 8px;
  }
  .card-desc {
    color: #999;
    font-size: 12px;
    line-height: 1.5;
  }
  .card-price {
    color: #e74c3c;
    font-size: 18px;
    margin-top: 15px;
    font-weight: bold;
  }
</style>
<div class="goods-list">
  <div class="goods-card">
    <div class="card-img"></div>
    <div class="card-title">小米手环 智能运动监测</div>
    <div class="card-desc">血氧心率睡眠监测,超长续航,防水防尘,多种运动模式</div>
    <div class="card-price">¥199</div>
  </div>
  <div class="goods-card">
    <div class="card-img"></div>
    <div class="card-title">无线蓝牙耳机 降噪款</div>
    <div class="card-desc">主动降噪,续航24小时,无感佩戴</div>
    <div class="card-price">¥299</div>
  </div>
  <div class="goods-card">
    <div class="card-img"></div>
    <div class="card-title">超薄充电宝20000毫安</div>
    <div class="card-desc">双向快充,便携小巧,兼容所有机型,自带数据线,可上飞机</div>
    <div class="card-price">¥129</div>
  </div>
  <div class="goods-card">
    <div class="card-img"></div>
    <div class="card-title">桌面小风扇</div>
    <div class="card-desc">静音大风力,三档调速,USB充电</div>
    <div class="card-price">¥39</div>
  </div>
</div>

9. 带侧边栏的文章详情页(博客 / 资讯站 经典布局)

场景: PC 端博客、资讯、文档类页面的标准布局:左侧主体文章区占宽多,右侧侧边栏占宽少,底部 footer 通栏,适配所有屏幕尺寸,侧边栏和主体区自动等高,不用写height:100%,Grid 实现极其简洁。

html 复制代码
<style>
 *{margin:0;padding:0;box-sizing:border-box;}
 .article-layout {
   width: 100%;
   max-width: 1200px;
   margin: 0 auto;
   display: grid;
   /* 核心:左侧占3份,右侧占1份,完美比例 */
   grid-template-columns: 3fr 1fr;
   gap: 20px;
   padding: 20px;
 }
 .article-main {
   background: #f9f9f9;
   padding: 20px;
   border-radius: 8px;
 }
 .article-aside {
   background: #f5f5f5;
   padding: 20px;
   border-radius: 8px;
 }
 .article-footer {
   /* 跨所有列,通栏显示 */
   grid-column: 1 / -1;
   text-align: center;
   margin-top: 20px;
   color: #999;
   font-size: 14px;
 }
</style>
<div class="article-layout">
 <div class="article-main">
   <h2>Grid布局的核心优势详解</h2>
   <p style="margin:20px 0;">Grid布局是CSS的二维布局方案,能够同时控制行和列的排布,相比Flex布局,在处理复杂的二维布局时更加简洁高效...</p>
   <p>Grid布局的核心属性包括grid-template-columns、grid-template-rows、gap等,通过这些属性可以轻松实现各种复杂的布局需求...</p>
 </div>
 <div class="article-aside">
   <h3>侧边栏</h3>
   <p>相关推荐</p>
   <ul style="margin:10px 0;padding-left:20px;">
     <li>CSS Flex布局详解</li>
     <li>前端布局最佳实践</li>
     <li>响应式布局技巧</li>
   </ul>
 </div>
 <div class="article-footer">版权所有 © 2026 前端布局教程</div>
</div>

10. 重叠层 / 悬浮层布局(无需定位,Grid 黑科技)

场景: 开发中经常遇到的「内容层 + 悬浮层 / 遮罩层」布局,比如:卡片 hover 遮罩、图片水印、弹窗背景,不用写 position: absolute/relative,纯 Grid 实现元素重叠,代码极简,定位精准,这是 Grid 的「隐藏神技」!

html 复制代码
<style>
  .card-wrap {
    width: 300px;
    height: 200px;
    margin: 20px auto;
    /* 核心:开启Grid,只划分1列1行 */
    display: grid;
    border-radius: 8px;
    overflow: hidden;
    cursor: pointer;
  }
  /* 两个子元素都在同一个单元格里,自动重叠 */
  .card-img, .card-mask {
    grid-column: 1 / 2;
    grid-row: 1 / 2;
    width: 100%;
    height: 100%;
  }
  .card-img {
    background: #3498db;
    display: flex;
    align-items: center;
    justify-content: center;
    color: #fff;
    font-size: 20px;
  }
  .card-mask {
    background: rgba(0,0,0,0.6);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    /* 默认隐藏遮罩层 */
    opacity: 0;
    transition: opacity 0.3s ease;
  }
  .card-wrap:hover .card-mask {
    /* hover时显示遮罩 */
    opacity: 1;
  }
</style>
<div class="card-wrap">
  <div class="card-img">图片内容</div>
  <div class="card-mask">查看详情 →</div>
</div>

11. 响应式图文混排布局(新闻 / 资讯列表 常用)

场景: 新闻、资讯、朋友圈类的图文混排布局:左侧小图 + 右侧文字内容,小屏幕自动变成「图片在上,文字在下」,无媒体查询,纯 Grid 响应式实现,完美适配移动端和 PC 端。

html 复制代码
<style>
  .news-list {
    width: 100%;
    max-width: 800px;
    margin: 20px auto;
    display: grid;
    gap: 15px;
    padding: 0 10px;
  }
  .news-item {
    display: grid;
    /* 核心响应式:小屏幕1列,大屏幕2列(图30%,文字70%) */
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 10px;
    border: 1px solid #eee;
    padding: 10px;
    border-radius: 8px;
  }
  .news-img {
    width: 100%;
    height: 120px;
    background: #f5f5f5;
    border-radius: 4px;
  }
  .news-content {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
  }
  .news-title {
    font-size: 16px;
    font-weight: bold;
  }
  .news-time {
    color: #999;
    font-size: 12px;
  }
</style>
<div class="news-list">
  <div class="news-item">
    <div class="news-img"></div>
    <div class="news-content">
      <div class="news-title">Grid布局成为前端布局的主流方案</div>
      <div class="news-time">2026-01-13 10:00</div>
    </div>
  </div>
  <div class="news-item">
    <div class="news-img"></div>
    <div class="news-content">
      <div class="news-title">前端工程师必学的Grid核心属性</div>
      <div class="news-time">2026-01-12 18:00</div>
    </div>
  </div>
</div>

12. 多行多列不规则排版(杂志 / 海报式布局)

场景: 类似杂志、海报的不规则图文排版,元素大小不一、位置交错,用 Grid 可以精准控制每个元素的位置和大小,比 float 或定位更灵活。

html 复制代码
<style>
  .magazine {
    width: 100%;
    max-width: 800px;
    margin: 20px auto;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    grid-template-rows: repeat(3, 120px);
    gap: 10px;
  }
  .item {
    background: #3498db;
    color: #fff;
    border-radius: 8px;
    display: flex;
    align-items: center;
    justify-content: center;
  }
  /* 精准控制每个元素的位置 */
  .item1 { grid-column: 1/3; grid-row: 1/2; background: #e74c3c; }
  .item2 { grid-column: 3/5; grid-row: 1/3; background: #2ecc71; }
  .item3 { grid-column: 1/2; grid-row: 2/4; background: #9b59b6; }
  .item4 { grid-column: 2/3; grid-row: 2/3; background: #f39c12; }
  .item5 { grid-column: 2/5; grid-row: 3/4; background: #1abc9c; }
</style>
<div class="magazine">
  <div class="item item1">标题区</div>
  <div class="item item2">大图区</div>
  <div class="item item3">侧边栏</div>
  <div class="item item4">小图1</div>
  <div class="item item5">正文区</div>
</div>
相关推荐
万行2 小时前
机器人系统ros2&期末速通2
前端·人工智能·python·算法·机器学习
syty20202 小时前
RedisTemplate方法汇总
前端·bootstrap·html
懒大王、2 小时前
Vue dcm文件预览
前端·javascript·vue.js·dcm·cornerstone.js
C_心欲无痕2 小时前
Docker 本地部署 SSR 前端项目实战指南
前端·docker·容器
梵得儿SHI2 小时前
Vue 高级特性:组件高级用法(动态组件、异步组件、组件缓存 keep-alive)
前端·javascript·vue.js·keep-alive·异步组件·动态组件·vue组件高级特性
EndingCoder2 小时前
泛型类和高级用法
linux·运维·前端·ubuntu·typescript
ℋᙚᵐⁱᒻᵉ鲸落2 小时前
【Vue3】Element Plus 表单显示自定义校验错误
前端·javascript·vue.js
程序员小寒2 小时前
聊一聊 CommonJS 和 ES6 Module
前端·ecmascript·es6
Java后端的Ai之路2 小时前
【AI应用开发工程师】-Gemini写前端的一个坑
前端·人工智能·gemini·ai应用开发工程师