初学者应先学 Flex 再学 Grid,因 Flex 聚焦一维布局、思维负担小、见效快;Grid 是其二维延伸,用于复杂区域划分,二者常组合使用。

初学者学布局,建议从 Flex 开始,再过渡到 Grid。这不是因为 Flex 更“简单”,而是因为它聚焦一维问题——只管行或只管列,思维负担小、见效快,能快速建立对现代 CSS 布局的直觉。
为什么先学 Flex 更顺手
Flex 解决的是日常高频的一维排列需求,比如导航栏、按钮组、卡片横排、居中一个图标、让几个按钮自动均分宽度。这些场景不需要同时规划行列,用 Grid 反而要多写几行定义网格线,容易卡在“为什么我要先声明三列才能放三个按钮”这类困惑里。
- 只需设置父容器 display: flex,子元素立刻获得弹性行为
- 主轴(justify-content)和交叉轴(align-items)概念清晰,对应“水平怎么排”“垂直怎么对齐”这种自然语言
- 一行代码 flex: 1 就能让项目等分剩余空间,比计算百分比或 margin 简洁得多
- 垂直居中不再需要 hack(如 transform 或 table-cell),align-items: center 直接生效
Flex 掌握到什么程度可以学 Grid
当你能不查文档写出以下效果,说明 Flex 已入门到位:
- 导航栏:logo 左对齐、菜单居中、登录按钮右对齐(用 justify-content: space-between + 包裹容器)
- 响应式卡片流:一行最多显示 3 张,小屏自动换行(flex-wrap: wrap + flex: 1 0 300px)
- 表单控件:label 和 input 水平并排且高度对齐(align-items: center)
- 模态框居中:固定宽高的弹窗在视口正中央(display: flex; justify-content: center; align-items: center)
Grid 是 Flex 的自然延伸,不是替代
Grid 不是用来“取代 Flex”的,而是补上它做不到的事:二维精准控制。比如你要做仪表盘,左栏导航、顶部工具栏、中间数据区带侧边筛选器、底部状态栏——这些区域之间有明确的行列关系和跨格需求,这时 Grid 的 grid-template-areas 或 grid-column / grid-row 就变得不可替代。
- Grid 容器定义整体骨架(如 grid-template-columns: 250px 1fr 300px),Flex 容器负责每个区块内部排布(如侧边栏里的菜单项竖向排列)
- 实际项目中常见组合:body 用 Grid 划分大区域,header/nav/main 各自用 Flex 排内容
- 学 Grid 前不必重学对齐逻辑——justify-items 和 align-items 的语义与 Flex 高度一致,迁移成本低
学习路径建议
按真实开发节奏推进,避免陷入属性罗列:
- 第1周:只练 Flex 容器的 4 个核心属性(flex-direction、justify-content、align-items、flex-wrap),做 5 个真实小模块(导航、按钮组、响应式卡片、垂直居中弹窗、表单行)
- 第2周:加入 Flex 项目属性(flex、align-self),尝试让部分卡片固定宽度、部分自适应
- 第3周:切换 Grid,先用 grid-template-columns + gap 做杂志式图文列表,再用 grid-template-areas 搭一个简易后台页面框架
- 第4周:混合使用——用 Grid 定义页面结构,每个区域内部用 Flex 调整内容,体会分工逻辑










