⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

CSS Grid 网格布局 — 二维布局终极方案

全面掌握CSS Grid布局:网格容器、行列定义、fr单位、网格区域、对齐方式、响应式网格、常见布局模式 · 难度:进阶 · +15XP

CSS Grid 网格布局 — 二维布局终极方案

如果说Flexbox是"一维布局之王",那CSS Grid就是"二维布局之神"。Flexbox擅长处理行或列上的排列,而Grid同时控制行和列,让你用声明式的方式构建复杂的二维网格布局。

Grid核心概念

Grid布局同样有容器项目。设置 display: grid 后,容器内的直接子元素自动成为网格项目。Grid使用行(row)和列(column)的网格线来定位元素。

定义网格

/* 基础网格:3列2行 */
.grid {
  display: grid;
  grid-template-columns: 200px 1fr 200px;  /* 3列:固定-弹性-固定 */
  grid-template-rows: auto 1fr;            /* 2行 */
  gap: 20px;                               /* 行列间距 */
}

/* fr单位:弹性份数(最强大的Grid特性) */ .fluid-grid { display: grid; grid-template-columns: 1fr 2fr 1fr; /* 三等分,中间列宽是两边的2倍 */ /* total = 1+2+1 = 4份,每份 = 容器宽/4 */ }

/* repeat()函数:重复定义 */ .grid-12 { display: grid; grid-template-columns: repeat(12, 1fr); /* 12等分网格 */ gap: 16px; }

/* minmax():设置最小最大范围 */ .responsive-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); /* 自动填充,每列最小280px,空间富余时平均分配 */ gap: 24px; }

Grid项目定位

/* 按网格线定位 */
.item {
  grid-column-start: 1;
  grid-column-end: 3;    /* 从列线1到列线3,跨2列 */
  grid-row-start: 1;
  grid-row-end: 3;       /* 从行线1到行线3,跨2行 */
}

/* 简写 */ .item-big { grid-column: 1 / 3; /* 跨2列 */ grid-row: 1 / span 2; /* 跨2行 */ }

/* 网格区域命名(最直观的定位方式) */ .layout { display: grid; grid-template-areas: "header header header" "nav main aside" "footer footer footer"; grid-template-columns: 200px 1fr 250px; grid-template-rows: auto 1fr auto; min-height: 100vh; } .header { grid-area: header; } .nav { grid-area: nav; } .main { grid-area: main; } .aside { grid-area: aside; } .footer { grid-area: footer; }

Grid对齐属性

属性作用于说明
justify-items容器内所有项目行轴(水平)对齐:stretch/start/center/end
align-items容器内所有项目列轴(垂直)对齐
place-items容器内所有项目前两者的简写
justify-content整个网格网格在容器中的水平对齐
align-content整个网格网格在容器中的垂直对齐
justify-self单个项目覆盖justify-items
align-self单个项目覆盖align-items

Grid vs Flexbox 选用指南

场景推荐原因
页面整体布局(header+main+footer)Grid同时控制行列,grid-template-areas语义化
导航栏/工具栏Flexbox单行/单列排列,对齐灵活
卡片网格Gridauto-fill + minmax自动响应
表单布局(标签+输入框)Grid两列对齐完美
水平居中按钮组Flexbox一句话搞定: justify-content:center

动手练习

  1. 页面骨架布局:使用grid-template-areas制作一个完整的页面骨架:页头(全宽)、导航(左侧200px)、主内容区(中间弹性)、侧边栏(右侧250px)、页脚(全宽)。
  2. 响应式卡片墙:使用grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)) 制作一个自动适应的卡片网格,至少12张卡片,调整浏览器宽度观察自动换行效果。
  3. 仪表盘布局:使用Grid制作一个数据仪表盘页面,包含:一个全宽概览区、4个等分指标卡片、一个2/3宽图表区、一个1/3宽列表区。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 122 篇
0 完成
🔥 0