module 03 · css 布局与响应式 · 第 17–24 课

模块03
CSS 布局与响应式

目标一句话:掌握现代布局主力 Flex 与 Grid,做出手机、平板、桌面都能用的页面。

3 课基础概念:文档流与 display · 定位 · 浮动与清除
2 课现代主力之一:Flex 容器属性 · Flex 项目属性与布局配方
1 课现代主力之二:Grid 二维布局 · 自动列数的响应式网格
1 课响应式:viewport · 媒体查询 · 移动优先
1 课阶段实战:响应式落地页,三端验收

// module 03

模块三 · CSS 布局与响应式 · 第 17–24 课

17display 与文档流块级 / 行内
18定位position / z-index
19浮动与清除历史与边界
20Flex 布局(一)容器属性
21Flex 布局(二)项目属性与配方
22Grid 布局二维与卡片网格
23响应式与媒体查询移动优先
24阶段实战三:响应式落地页三端验收

// 模块三 · 第 17 课

display 与文档流

讲授 · 25 min

  • 标准文档流:自上而下、自左而右
  • block 独占一行、可设宽高
  • inline 不换行、宽高由内容决定、垂直 margin 无效
  • inline-block 兼具两者 · none 与 visibility: hidden 的区别

练习 · 15 min

把导航项分别设成三种 display 观察排版差异;用 inline-block 把导航项排成一行并留出间距。

验收:能说出为什么给 span 设宽高不生效;能说清 none 与 hidden 的区别。

一句话记住:block 管区块,inline 管文字,inline-block 管一行里的小方块。

// 模块三 · 第 18 课

定位

讲授 · 25 min

  • position 五个值:static / relative / absolute / fixed / sticky
  • 偏移属性 top / right / bottom / left
  • absolute 找最近的「定位祖先」(包含块)
  • z-index 与层叠顺序 · 父级层叠上下文

练习 · 15 min

实现三个效果:固定顶部导航(fixed)、卡片右上角角标(absolute + 父级 relative)、「回到顶部」悬浮按钮(fixed)。

验收:absolute 元素落在父卡片内部而不是页面角落;滚动页面时导航不动。

口诀:子绝父相 —— 想让一个元素绝对定位到某个位置,先给它的父元素加 position: relative。

// 模块三 · 第 19 课

浮动与清除

讲授 · 25 min

  • float 的原始用途:图文环绕
  • 浮动导致父元素高度塌陷
  • 清除浮动三方案:clear / overflow: hidden / ::after clearfix
  • 用浮动做双栏的历史做法及其局限

练习 · 15 min

用浮动实现双栏布局 → 用 clearfix 修复高度塌陷 → 再用 Flex 重写一遍,写下两者的差异感受。

验收:能复现并解释"塌陷"现象;能说出为什么现在推荐 Flex。

给学生明确结论:浮动是历史,知道它、会修它,但新代码用 Flex / Grid。

// 模块三 · 第 20 课

Flex 布局(一)· 容器属性

讲授 · 25 min

  • display: flex 开启弹性布局,主轴与交叉轴的概念
  • flex-direction:row / column
  • justify-content(主轴对齐 6 种)· align-items(交叉轴对齐)
  • flex-wrap 换行与 align-content · gap 间距

练习 · 15 min

完成三个小 demo:① 横向导航栏(两端对齐、垂直居中)② 卡片水平垂直居中(写三种不同写法)③ 自动换行的标签组。

验收:能说清"哪个方向是主轴";改 direction 后知道 justify / align 的作用轴会互换。

// 模块三 · 第 21 课

Flex 布局(二)· 项目属性与配方

讲授 · 25 min

  • flex-grow / flex-shrink / flex-basis 与 flex: 1 1 auto 简写
  • align-self 单独对齐 · order 排序
  • 配方一:侧边栏固定 + 内容自适应
  • 配方二:卡片等高 · 配方三:页脚吸底

练习 · 15 min

用 Flex 完成三栏布局:左栏固定 240px + 主内容自适应 + 右栏 300px;窗口变窄时纵向堆叠。

验收:主内容能随窗口伸缩;文本过长时能正常省略(min-width: 0)。

// 模块三 · 第 22 课

Grid 布局

讲授 · 25 min

  • display: grid · 网格线与行列定义
  • grid-template-columns / rows · fr 单位 · gap
  • repeat + auto-fit + minmax 实现自动列数
  • grid-template-areas 与 grid-area 命名区域

练习 · 15 min

① 用 repeat(auto-fit, minmax(240px, 1fr)) 做响应式卡片网格(不用媒体查询)② 用命名区域做一个「杂志式」大小格混排版面。

验收:改变窗口宽度时卡片列数自动变化;区域命名与内容对应正确。

选型原则:一维排布用 Flex,二维排布用 Grid。两者不是替代关系,是配合关系。

// 模块三 · 第 23 课

响应式与媒体查询

讲授 · 25 min

  • viewport meta 为什么必须写
  • 媒体查询语法与断点:640 / 768 / 1024 / 1280
  • 移动优先:min-width 递进书写
  • 流式布局(%、max-width、clamp())· 图片自适应

练习 · 15 min

让第 16 课的个人页在 375 / 768 / 1440 三个宽度下都正常显示:内容不溢出、字号可读、卡片合理换行。

验收:三端各截一张图;手机端没有横向滚动条。

先写移动端样式,再用 min-width 逐级增强 —— 这就是移动优先。

// 模块三 · 第 24 课 · 阶段实战

阶段实战三 · 响应式落地页

课堂流程 · 45 min

  • 5′ 结构规划:导航 / 首屏 / 功能卡片 / 页脚
  • 5′ 导航折叠方案:纯 CSS 的 checkbox 方案(JS 方案预告)
  • 25′ 编码实现
  • 8′ 三端自测 + 2′ 讲评

验收标准

  • 桌面端导航横排,移动端可折叠
  • 卡片网格随宽度自动换行(Grid 或 Flex)
  • 无横向滚动条,无元素遮挡与溢出
  • 375 / 768 / 1440 三个宽度下都可用

这一版落地页是后续 JS 模块的操作对象——第 33 课起,我们给它加交互。

// module 03 · summary

本模块交付物 · 响应式落地页

交付物

  • 落地页:导航 / 首屏 / 功能卡片 / 页脚
  • 375 · 768 · 1440 三个宽度的截图
  • 纯 CSS 导航折叠方案(checkbox 方案)

验收标准

  • 桌面端导航横排,移动端可折叠
  • 卡片网格随宽度自动换行
  • 无横向滚动条,无元素遮挡与溢出
  • 三个断点下都可用

这一版落地页是后续 JS 模块的操作对象 —— 第 33 课起我们会给它加交互,第 35 课加暗黑模式,第 36 课加动态列表。

S 演讲者视图 · T 切换主题 · ← → 翻页 · F 全屏 · O 总览 · R 重置计时