组合使用 Flexbox 与 Grid
使用 Grid 处理页面的宏观布局,使用 Flexbox 处理组件级对齐,并了解何时应选择哪种工具。
组合使用 Flexbox 与 Grid 是 CoddyKit 上的免费 Frontend Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Frontend Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Frontend Academy 课程共包含 4 节课。
它们是互补工具
弹性盒布局和网格布局并非竞争关系——它们是为协同工作而设计的。典型模式是:使用 CSS 网格布局构建页面的宏观结构,然后在每个网格区域内使用弹性盒布局来排列组件内容。
使用网格布局构建页面,使用弹性布局构建组件
使用网格布局定义页面的高层骨架。在每个网格区域内部,使用弹性盒布局进行组件级排列:例如让导航链接排列成一行,让卡片内容排列成一列。
/* Page skeleton */
body {
display: grid;
grid-template-areas: 'header' 'main' 'footer';
grid-template-rows: auto 1fr auto;
min-height: 100vh;
}
/* Component inside grid area */
header {
display: flex;
justify-content: space-between;
align-items: center;
}卡片网格模式
经典模式是:使用网格布局排列卡片,使用弹性布局排列每张卡片的内部内容。这样可以确保卡片在网格中对齐,同时让内部内容(图片、标题、正文和页脚)正确堆叠。
.card-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 24px;
}
.card {
display: flex;
flex-direction: column;
border-radius: 8px;
overflow: hidden;
}
.card-body { flex: 1; } /* push footer down */导航栏模式
常见的导航栏会结合两种布局。导航栏本身是一个弹性容器,用于排列徽标和链接。链接区域可能是另一个弹性容器。大型菜单可能使用网格布局进行多列排列。
圣杯布局
如今使用网格布局即可轻松实现“圣杯”布局(页眉、三列主体和页脚)。三列——左侧边栏、主内容和右侧边栏——是网格列;每列内部的内容则使用弹性盒布局。
.page {
display: grid;
grid-template:
'header header header' auto
'left main right' 1fr
'footer footer footer' auto
/ 200px 1fr 200px;
min-height: 100vh;
}内容居中——网格布局或弹性盒布局
网格布局和弹性盒布局都可以完美地让内容居中。网格布局:place-items: center(align-items 与 justify-items 的简写)。弹性布局:justify-content: center; align-items: center。
.center-grid {
display: grid;
place-items: center; /* centers both axes */
min-height: 100vh;
}
.center-flex {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}响应式侧边栏布局
移动端:单列布局(导航位于顶部)。平板及更大屏幕:侧边栏与内容并排显示。网格布局以声明式方式实现这一点——在媒体查询中更改模板区域。
图标加文本模式
这是非常常见的微型布局:让图标位于文本旁边。弹性盒布局非常适合这种场景,因为它本质上是一个带有对齐方式的单行布局。
.alert {
display: flex;
align-items: flex-start;
gap: 12px;
}
.alert-icon { flex-shrink: 0; width: 20px; }
.alert-body { flex: 1; }何时选择哪一种
选择网格布局的情况:您按行和列思考,需要让项目跨轨道对齐,或正在构建页面骨架。选择弹性布局的情况:您只考虑一个方向,需要项目收缩和增长,或正在排列一行按钮或一列项目。
不要过度设计
有时,一个带最大宽度和自动外边距的简单块级元素比复杂网格更好。并非所有布局都需要网格布局。请使用能完成任务的最简单工具。
调试布局问题
在 DevTools 中,点击元素面板里的网格或弹性布局标记,可以叠加显示网格线或弹性项目轮廓。这样可以让不可见的布局结构变得可见,对于诊断对齐问题非常有价值。
快速检查
分别用于页面级和组件级布局时,哪种布局工具组合最常见?
回顾:结合网格布局与弹性布局
网格布局与弹性盒布局互补。使用网格布局构建二维页面结构。使用弹性盒布局处理一维组件内部布局。在网格上使用 place-items: center 可以让所有内容居中。在卡片主体上使用 flex-direction: column + flex: 1 可以将卡片页脚推到底部。使用 DevTools 叠加标记进行调试。
常见问题解答
「组合使用 Flexbox 与 Grid」课时是免费的吗?
是的 — 「组合使用 Flexbox 与 Grid」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Frontend Academy 课程的其余内容,请升级到 CoddyKit PRO。 Frontend Academy 课程共包含 4 节课。
「组合使用 Flexbox 与 Grid」这节课中我会学到什么?
使用 Grid 处理页面的宏观布局,使用 Flexbox 处理组件级对齐,并了解何时应选择哪种工具。 你通过在浏览器中直接运行的动手代码来练习 Frontend Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Frontend Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Frontend Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「组合使用 Flexbox 与 Grid」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Frontend Academy 课中编写并运行代码吗?
能。每节 Frontend Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Flexbox 深入:对齐、换行与顺序
- CSS Grid:模板区域、auto-fit 与 minmax
- 组合使用 Flexbox 与 Grid
- 用于主题设置的 CSS 变量