前端编程 课程二十一、:CSS布局五 Grid 网格布局

现代布局(二维布局首选)

第一节:Grid 核心概念

1.1 Grid vs Flexbox

  • Flexbox:一维布局(行或列),适合"线性排列";
  • Grid:二维布局(行+列),适合"网格状排列";
  • 核心场景:页面整体结构、复杂卡片网格、需要同时控制行和列的布局。

1.2 Grid 核心术语

  • Grid容器 :设置display: grid的元素;
  • Grid项目:容器的直接子元素;
  • 网格线:划分网格的水平线/垂直线(从1开始计数);
  • 网格轨道:两条网格线之间的空间(行/列);
  • 网格单元格:行和列交叉的最小单位;
  • 网格区域:多个单元格组成的矩形区域。

第二节:Grid容器的核心属性

|-----------------------|----------|------------------------------------------------|
| 属性 | 作用 | 常用取值 |
| display | 转为Grid容器 | grid(块级)/ inline-grid(行内块) |
| grid-template-columns | 定义列尺寸 | 100px / 1fr / repeat(3, 1fr) / auto |
| grid-template-rows | 定义行尺寸 | 同列尺寸 |
| gap | 网格间距 | 10px(行+列)/ 10px 20px(行/列) |
| grid-template-areas | 定义网格区域 | "header header" "sidebar main" "footer footer" |
| justify-items | 单元格内水平对齐 | start / center / end / stretch |
| align-items | 单元格内垂直对齐 | 同上 |

2.1 核心实战1:基础网格(3列2行)

|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| HTML <div class="grid-container"> <div class="grid-item">1</div> <div class="grid-item">2</div> <div class="grid-item">3</div> <div class="grid-item">4</div> <div class="grid-item">5</div> <div class="grid-item">6</div> </div> <style> .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); /* 3列,每列1份 */ grid-template-rows: 100px 200px; /* 2行,高度分别为100/200px */ gap: 10px; /* 网格间距 */ width: 600px; border: 1px solid #eee; padding: 10px; } .grid-item { background-color: #e3f2fd; line-height: 100px; text-align: center; } </style> |

2.2 核心实战2:页面整体布局(Grid Areas)

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| HTML <div class="page-grid"> <header class="header">Header</header> <aside class="sidebar">Sidebar</aside> <main class="main">Main Content</main> <footer class="footer">Footer</footer> </div> <style> .page-grid { display: grid; grid-template-columns: 200px 1fr; /* 侧边栏200px,主内容自适应 */ grid-template-rows: 60px 1fr 40px; /* 头部60px,主内容自适应,底部40px */ grid-template-areas: "header header" /* 头部占2列 */ "sidebar main" /* 侧边栏1列,主内容1列 */ "footer footer"; /* 底部占2列 */ gap: 10px; height: 100vh; /* 占满视口高度 */ padding: 10px; box-sizing: border-box; } .header { grid-area: header; background-color: #2196f3; color: #fff; line-height: 60px; text-align: center; } .sidebar { grid-area: sidebar; background-color: #ffebee; padding: 10px; } .main { grid-area: main; background-color: #e8f5e9; padding: 10px; } .footer { grid-area: footer; background-color: #f5f5f5; line-height: 40px; text-align: center; } </style> |

第三节:Grid项目的核心属性

|--------------|-----------|-------------------------------|
| 属性 | 作用 | 示例 |
| grid-column | 控制列位置 | grid-column: 1 / 3(跨2列) |
| grid-row | 控制行位置 | grid-row: 2 / 4(跨2行) |
| grid-area | 控制区域/位置 | grid-area: header / 2 / 1 / 3 |
| justify-self | 单个单元格水平对齐 | center / start / end |
| align-self | 单个单元格垂直对齐 | 同上 |

3.1 实战:项目跨行列

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| HTML <div class="grid-cross"> <div class="item item1">跨2列</div> <div class="item item2">普通</div> <div class="item item3">跨2行</div> <div class="item item4">普通</div> <div class="item item5">普通</div> </div> <style> .grid-cross { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(2, 100px); gap: 10px; width: 600px; border: 1px solid #eee; padding: 10px; } .item { background-color: #e3f2fd; text-align: center; line-height: 100px; } .item1 { grid-column: 1 / 3; /* 从第1列线到第3列线,跨2列 */ background-color: #ff4444; color: #fff; } .item3 { grid-row: 1 / 3; /* 从第1行线到第3行线,跨2行 */ background-color: #00c851; color: #fff; } </style> |

第四节:布局方案选择指南与综合实战

4.1 布局方案选择优先级

  1. 简单布局(单行/单列)→ Flexbox;
  2. 复杂布局(行+列)→ Grid;
  3. 精准定位(弹窗/吸顶)→ Position;
  4. 兼容老旧浏览器 → 浮动+定位。

4.2 综合实战:电商首页布局(Grid+Flex结合)

  • 需求:

✅ 头部:Logo(左)+ 导航(中)+ 登录按钮(右)→ Flex;

✅ 主体:轮播图(全宽)+ 商品分类(左)+ 商品列表(右,网格)→ Grid+Flex;

✅ 底部:版权信息(居中)→ Flex;

  • 核心代码框架:

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| HTML <div class="shop-page"> <header class="shop-header"> <div class="logo">Logo</div> <nav class="shop-nav">导航</nav> <div class="login">登录</div> </header> <main class="shop-main"> <div class="banner">轮播图</div> <div class="category">商品分类</div> <div class="goods-list">商品列表(Grid)</div> </main> <footer class="shop-footer">版权信息</footer> </div> <style> .shop-page { display: grid; grid-template-rows: 60px 1fr 40px; height: 100vh; } .shop-header { display: flex; justify-content: space-between; align-items: center; padding: 0 20px; background-color: #fff; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } .shop-main { display: grid; grid-template-columns: 200px 1fr; grid-template-rows: 200px 1fr; grid-template-areas: "banner banner" "category goods-list"; gap: 10px; padding: 10px; } .banner { grid-area: banner; background: #e3f2fd; } .category { grid-area: category; background: #ffebee; } .goods-list { grid-area: goods-list; display: grid; /* 商品列表用Grid */ grid-template-columns: repeat(4, 1fr); gap: 10px; } .shop-footer { display: flex; justify-content: center; align-items: center; background-color: #f5f5f5; } </style> |

核心知识点总结

  1. 布局分层学习:先掌握文档流/浮动/定位(传统布局),再学习Flex/Grid(现代布局),循序渐进;
  2. 方案选择逻辑:一维布局用Flex,二维布局用Grid,精准定位用Position,简单并排可考虑浮动;
  3. 核心痛点解决:Flex彻底解决垂直居中、空间均分问题,Grid解决复杂二维布局问题;
  4. 实战原则:优先使用现代布局(Flex/Grid),仅在兼容老旧浏览器时使用传统布局。
相关推荐
RFCEO2 天前
前端进阶 课程二十三、:CSS核心进阶二 盒模型进阶与BFC原理
bfc·前端编程·css基础课·css盒模型进阶与bfc原理·标准与怪异两种盒模型·margin塌陷·外边距重叠
RFCEO2 天前
前端进阶 课程二十五、:CSS核心进阶四 CSS浮动(float)与清除浮动(兼容旧项目)
三栏布局·前端编程·图文环绕效果·浮动带来的父容器塌陷·元素覆盖·父元素浮动法
RFCEO7 天前
三种美观实用的前端网页排版方式(含文字介绍+参数配置)
前端编程·html排版·栅格(grid)排版·弹性盒(flex)排版·流式排版·css怎样排版·javascript排版技巧
RFCEO7 天前
前端进阶 课程二十二、:CSS核心进阶一
前端进阶·css基础课·进阶选择器的灵活用法·深入理解优先级权重计算规则·攻克样式冲突问题·学习选择器性能优化技巧
RFCEO8 天前
前端编程 课程十九、:CSS布局三
前端编程·css基础课·定位布局·精准控制元素位置·决定元素相对于参考点的位置·最近的已定位祖先元素·相对定位
RFCEO8 天前
前端编程 课程二十、:CSS布局四
css基础课·前端编程学习·弹性盒模型·一维布局首选·现代布局·垂直居中需要复杂的计算·元素无法自动均分剩余空间
军军君011 个月前
Three.js基础功能学习八:数学库与插值
前端·javascript·3d·前端框架·three·三维·前端编程