CalcGuide · 技术博客主页 / 一页纸学习计划
🟠

CSS 基础与现代布局:盒模型 / cascade / Flexbox / Grid

分类:前端与客户端 · 路径:docs/topics/css-fundamentals-and-layout/README.md

#css#flexbox#grid#layout#cascade

学会盒模型、文档流、cascade 与特异性,再用 Flexbox 与 Grid 写出任何一维与二维布局

父主题

HTML 与 CSS 响应式布局:从语义化到现代布局与无障碍

子主题(0)

CSS 基础与现代布局:盒模型 / cascade / Flexbox / Grid

0. 元信息

1. 学习路线

盒模型(content / padding / border / margin)→ box-sizing
  → 文档流(normal flow / BFC / IFC / 定位)
  → cascade 与 specificity、@layer、:where()、:is()、!important
  → Flexbox 一维布局(主轴 / 交叉轴 / 弹性 / 换行 / gap / min-width:0)
  → Grid 二维布局(轨道 / 命名线 / area / subgrid / auto-fit / auto-fill)
  → 多列 columns 与现代布局的细节差异
  → 综合:单页复杂布局 + 调试案例

按”模型 → 规则 → 一维 → 二维”的顺序学。每一步先书面画图,再写代码。

2. 阶段周数分配(11.5 周,每天 1.52 小时)

阶段建议周数每天时长概述
1. 盒模型0.251.5hcontent-box vs border-box + margin collapse
2. 文档流0.251.5hblock / inline / BFC / IFC
3. 定位0.251.5hstatic / relative / absolute / fixed / sticky
4. cascade0.251.5hspecificity / @layer / :where() / !important
5. 变量与继承0.251.5hcustom properties / inherit / initial / unset / revert
6. Flexbox0.51.5~2h主轴 / 交叉轴 / 弹性 / 换行 / gap / min-width:0
7. Grid0.51.5~2h显式 vs 隐式 / 命名线 / area / subgrid / auto-fit
8. columns0.251.5hcolumn-count / column-gap / column-span
9. 综合0.51.5~2h整页 flex + grid 拼装 + 调试案例

总计约 12~18 小时;1 周紧凑,1.5 周可含断点对照与减动画测试。

3. 九阶段表

阶段核心知识实践产出学会标准
1. 盒模型content-box vs border-box、margin collapse切换全局 box-sizing 的两个对比 demo能说出 * { box-sizing: border-box } 为何成主流
2. 文档流block / inline / inline-block、normal flow、BFC、IFC用 BFC 清除浮动、解决 margin collapse能解释 BFC 对 float / margin 的影响
3. 定位static / relative / absolute / fixed / sticky、inset、堆叠上下文sticky 标题栏能解释为何 sticky 失效要查 overflow 祖先
4. cascadespecificity、origin、order、@layer:where()!important写一遍四层 layer 顺序能用 cascade 矩阵算最终值
5. 变量与继承custom properties、inherit / initial / unset / reverttoken 系统 8 个变量能解释为什么不写 --brand 会变 null
6. Flexbox容器 + 项目、flex-direction / flex-wrap / flex / gap / align-* / justify-* / place-* / min-width:0navbar + 卡片列表 + sticky footer能解释 flex: 1 等于什么
7. Grid显式 vs 隐式、grid-template / grid-area / gap / auto-fit / minmax / subgrid12 列布局 + 杂志 masonry能口算 auto-fit minmax(250px, 1fr) 在 1200px 下几列
8. columnscolumn-count / column-gap / column-span、瀑布流近似三列新闻列表能说出 columns 与 grid 的差异
9. 综合:复杂页面整页用 flex + grid 拼装,含响应式变化、debug 痕迹一个包含 nav / hero / 3 列特性 / 页脚的页面DevTools 能指出每条样式的来源

陷阱:把 flex: auto 当”自适应宽度”;Grid 不写 display: grid;cascade 顺序记错。

4. 第一周(每天 1.5~2 小时)

Day 1 约定:编辑器 = VS Code + 官方 CSS 扩展 + axe DevTools 扩展;浏览器 = Chrome + Firefox;本计划全程静态 HTML + CSS,不引入框架。截图与 DevTools 设备模拟记录到 notes/week1/dayN/

任务当天交付自检
Day 1盒模型:写 2 个相同尺寸的 div,一个 box-sizing: content-box、一个 border-box;对比 DevTools Computed 面板截图 + 笔记(写 padding/border/width/height 关系)切换后 width 不变但占用空间变了;能解释为何 * { box-sizing: border-box } 成主流
Day 2文档流:写 1 个 BFC 触发场景(用 overflow: hiddendisplay: flow-root)解决 margin collapse;写 1 个 inline + block 混排截图 + 笔记margin 在 BFC 内不向父外折叠;inline 元素能水平排列
Day 3定位:写 sticky 标题栏(要求在滚动时吸附),并故意在祖先加 overflow: hidden 复现”sticky 失效”截图 + 笔记移除 overflow: hidden 后 sticky 恢复;能解释为何 sticky 受 overflow 限制
Day 4cascade:写 4 个 @layer(reset / tokens / base / components)顺序,把同一选择器的多个值在 DevTools 排序截图 + 笔记DevTools Cascade 面板按 layer 顺序显示;能用 specificity 矩阵算最终值
Day 5变量与继承:写 1 个 token 系统(≥ 8 个变量:颜色 / 字号 / 间距 / 圆角);用 inherit / initial / unset / revert 各举 1 例截图 + 笔记修改 --brand-primary 后全站联动;能解释 --brand 未定义时取值是 unset(即继承则继承,否则初始)
Day 6Flexbox:写 navbar(左 logo / 中菜单 / 右按钮)+ 卡片列表(3 列);卡片标题长串时加 min-width: 0 截断截图(桌面 + 移动)移动端折叠为汉堡;长串标题不撑爆卡片
Day 7项目:用 flex + grid 拼一个最小落地页(nav / hero / 3 列特性 / 页脚)。步骤 A:先 flex 写完;步骤 B:把”3 列特性”改用 grid;步骤 C:DevTools 标出每条样式的来源3 张截图 + 笔记DevTools Computed 能指出每条样式来自哪个 @layer / 选择器

Day 7 步骤 C 是验收关键——能讲清”这条样式为什么赢”才算真学会 cascade。

5. 阶段通用验收

  1. 不看答案重写该阶段的最小 demo(盒模型 / cascade / flex / grid 各 1 个);
  2. 解释”content-box vs border-box”、“BFC 为何解决 margin collapse”、“@layer 顺序与 specificity 谁先”、“flex 1 vs auto vs none”;
  3. 截图 3 种宽度(360 / 768 / 1440)+ DevTools Computed + Cascade 面板;
  4. 至少 1 张图标记”每条样式的来源”(手画或 DevTools 截图);
  5. 列出至少 3 类边界:长串文本不撑爆 / sticky 不失效 / auto-fit 在窄屏保留至少 1 列;
  6. 给出 cascade 顺序的 4 维矩阵(origin / importance / specificity / order);
  7. 能修改现有页面(加 layer、调 cascade、修 sticky)而不是只能照抄。

6. 最终验收

7. 综合项目

首选:用 flex + grid 拼一个单页复杂布局(含 sticky 头部 / hero / 3 列特性 / 卡片网格 / 杂志 masonry / 页脚),覆盖桌面 / 平板 / 手机 3 个断点,落地”cascade 显式分层 + 4 维矩阵”。

必做:

备选:重构一套遗留的”全 float + 固定宽度”页面为 flex + grid 布局,附”原 vs 新”截图与 DevTools 标注。

notes/ 与 README 存放规范

所有截图、DevTools Computed / Cascade 标注、token 表统一存放在项目根目录的 notes/ 子目录或 README 的对应章节;提交时一并带上。综合项目的 notes/ 至少包含:

任何综合项目都必须包含:

  1. 需求与受众;
  2. cascade 分层表(reset / tokens / base / components);
  3. token 系统源码(CSS 自定义属性 + :root);
  4. 完整源码(HTML + CSS,可含少量 JS 用于汉堡菜单);
  5. 4 断点截图(360 / 768 / 1024 / 1440);
  6. DevTools 标注:每条样式来源(手画或截图);
  7. README:项目介绍、运行步骤、目录结构、复盘;
  8. 复盘记录:用时、难点、收获、下一步。

本主题贡献(Loop 6-D · html-css-responsive / css-fundamentals-and-layout)

本主题给父主题与所有前端子主题铺好”模型 → 规则 → 一维 → 二维”的布局地基,并把 Box Model、Cascade、Flexbox、Grid 四个抽象概念落到能讲清来源、能用 DevTools 复算的工程实践。

3 项核心职责

4 项交付物

  1. 盒模型 / BFC 对比 demo:同一组件在 content-boxborder-box 下的 DevTools Computed 截图,配 BFC 触发 / 关闭时的 margin 行为录屏。
  2. Cascade 4 段 @layer 模板:reset / tokens / base / components 四层源码 + cascade 矩阵推导表,能口算 auto-fit minmax(250px, 1fr) 在 1200px 下几列、能口答 flex: 1 = flex: 1 1 0%
  3. Flexbox / Grid 实战页:整页复杂布局(nav / hero / 3 列特性 / 卡片网格 / 页脚),4 断点(360 / 768 / 1024 / 1440),DevTools 标注每条样式来源。
  4. 遗留页面重构对比:把”全 float + 固定宽度”的遗留页改写为 flex + grid,附”原 vs 新”截图与 DevTools 标注。

3 个验收指标

8. 推荐开源资料

阶段角色资料链接用法
1~9权威参考MDN CSShttps://developer.mozilla.org/en-US/docs/Web/CSS属性与示例权威
1规范CSS Box Model Module L3https://www.w3.org/TR/css-box-3/盒模型定义
3规范CSS Positioned Layout Module L3https://www.w3.org/TR/css-position-3/定位与 sticky
4规范CSS Cascading L5 / L6https://www.w3.org/TR/css-cascade-5/cascade 规则
5规范CSS Custom Properties L1https://www.w3.org/TR/css-variables-1/自定义属性
6规范CSS Flexbox L1https://www.w3.org/TR/css-flexbox-1/Flexbox 权威
7规范CSS Grid L1 / L2https://www.w3.org/TR/css-grid-1/Grid 权威
6速查CSS-Tricks — A Complete Guide to Flexboxhttps://css-tricks.com/snippets/css/a-guide-to-flexbox/Flex cheatsheet
7速查CSS-Tricks — A Complete Guide to Gridhttps://css-tricks.com/snippets/css/complete-guide-grid/Grid cheatsheet
6~7进阶Josh Comeau — Flexbox & Gridhttps://www.joshwcomeau.com/可视化教学
7进阶Rachel Andrew 博客https://rachelandrew.co.uk/Grid 规范编辑
1~9入门web.dev — Learn CSShttps://web.dev/learn/css/Google 主线
7工具Flexbox Froggyhttps://flexboxfroggy.com/Flex 互动
7工具Grid Gardenhttps://cssgridgarden.com/Grid 互动
7兼容caniusehttps://caniuse.com/浏览器支持

许可证提示:MDN 内容采用 CC BY-SA 2.5;W3C 规范文本由 W3C 公开;CSS-Tricks 文章为各作者所有;Flexbox Froggy / Grid Garden 源代码开放但内容仅供学习。复制代码或长段引用前先看 LICENSE;默认做法是读思路后自己重写,而不是复制粘贴

默认使用顺序:MDN / W3C 规范查文档 → CSS-Tricks cheatsheet 速查 → web.dev 走主线 → 写 demo → Flexbox Froggy / Grid Garden 互动验错 → Josh Comeau / Rachel Andrew 进阶看一手 → caniuse 查兼容性。

9. 学习资料汇聚(v0.3 自包含)

9.1 背景与动机

1996 年 CSS 1 让文字与背景分开;2009 年前后 CSS 2.1 稳定,奠定盒模型。2012 年响应式网页设计(RWD)让媒体查询成为必备。2017 年 Grid Layout 落地,Flexbox + Grid 双引擎补齐”一维 vs 二维”的空白。2019~2023 年 Container Queries、Subgrid、Cascade Layers 把 CSS 推到”工程级”。

今天的 web 布局核心是”理解盒模型 + 选对工具”:父元素排子元素用 Flex,区域排列用 Grid,真正复杂的页面二者混用。理解 cascade 才能在大型项目里”加规则而不破坏旧规则”。

9.2 概念地图

flowchart LR
  Box[盒模型] --> Flow[文档流]
  Box --> Size[box-sizing: content-box/border-box]
  Flow --> BFC[BFC 块级格式化上下文]
  Flow --> IFC[IFC 行级格式化上下文]
  Flow --> Position[position: static/relative/absolute/fixed/sticky]

  CSS[Cascade]
  CSS --> Specificity[specificity: id/class/type]
  CSS --> Origin[origin: user-agent / user / author]
  CSS --> Layer[@layer 顺序]
  CSS --> Important[!important]
  CSS --> Where[:where() 把特异性变 0]
  CSS --> Is[:is()/:not()/:has()]

  Flow --> Flex[Flexbox 一维]
  Flex --> Main[主轴 / justify-content]
  Flex --> Cross[交叉轴 / align-items]
  Flex --> Shrink[flex-shrink / flex-grow / flex-basis]
  Flex --> MinWidth[min-width: 0 解决文本溢出]

  Flow --> Grid[Grid 二维]
  Grid --> Track[grid-template-columns / rows]
  Grid --> Area[grid-template-areas / grid-area]
  Grid --> Line[命名线 / grid-column / grid-row]
  Grid --> AutoFit[auto-fit / auto-fill + minmax]
  Grid --> Subgrid[subgrid 对齐]

9.3 基础知识讲解

9.3.1 规范 / 论文

资料影响建议读法
CSS Box Model Module L3盒模型定义解释 padding/box-sizing 与 height 关系
CSS Positioned Layout Module L3定位解释 sticky 的 sticky positioning
CSS Flexbox L1Flexbox查每个属性的精确行为
CSS Grid L1 + L2Grid 与 subgridauto-fit / auto-fill 行为
CSS Cascading L5 / L6cascade 规则对照表查优先级
Ethan Marcotte, Responsive Web Design (2010)RWD 起源历史与动机

9.3.2 经典书籍

作者用法
CSS: The Definitive GuideEric Meyer / Estelle Weyl词典式查
CSS SecretsLea Verou案例与高级技巧
Flexbox in CSSEstelle WeylFlexbox 主线
Grid Layout in CSSEric MeyerGrid 主线
Bulletproof Web DesignDan Cederholm弹性与渐进增强思路

9.3.3 优秀博客 / 文档

资料特点用法
MDN CSS权威默认查文档
CSS-Tricks — A Complete Guide to FlexboxFlex cheatsheet速查
CSS-Tricks — A Complete Guide to GridGrid cheatsheet速查
Rachel Andrew 博客Grid 规范作者Grid 一手
Lea Verou 博客CSS WG 成员现代 CSS 一手
Josh Comeau — Flexbox & Grid可视化教学难概念入门
web.dev — Learn CSSGoogle 出品主线
Smashing Magazine — CSS案例进阶

9.3.4 核心人物

人物主要影响建议追踪
Håkon Wium LieCSS 共同作者CSS 历史
Bert BosCSS 共同作者CSS 历史
Eric MeyerCSS 推广与著作meyerweb.com
Tab Atkinsflex / grid 规范作者之一justifiably
Rachel AndrewGrid 规范编辑rachelandrew.co.uk
Lea VerouCSS WG 成员verou.me
Manuel Matuzović现代 CSS + a11ymatuzo.at

9.3.5 开发方法

方法具体动作何时用
One axis at a time父元素排列 = flex;区域排列 = grid选型
box-sizing everywhere全局 * { box-sizing: border-box }项目入口
Min-width 0 for flex kidsflex 子元素允许截断文字溢出
@layer for order把 reset / tokens / base / components 显式分层多人
Computed-style checkDevTools Computed 看最终值排错

9.3.6 必读资源子集(≥5 条)

  1. MDN CSS Reference
  2. CSS-Tricks — A Complete Guide to Flexbox
  3. CSS-Tricks — A Complete Guide to Grid
  4. Rachel Andrew — Grid by Example
  5. Lea Verou — CSS Secrets(书 + 博客)
  6. web.dev Learn CSS

9.4 经典问题与经典案例

#问题为什么重要最简答案
1flex 子元素文字不换行默认 min-width: auto 阻止截断给子元素 min-width: 0
2auto-fit vs auto-fill决定卡片数量auto-fit 让空轨道折叠成 0;auto-fill 保留
3subgrid 不生效父容器不是 grid必须 display: grid
4Grid 显式 / 隐式差异隐式行宽不对grid-auto-rows: minmax(...)
5sticky 在 overflow 父元素失效sticky 受 overflow 影响祖先中不能有 overflow: hidden / auto
6margin 折叠消失flex / grid 内不会折叠不奇怪,按容器上下文判定
7flex: auto vs 1弹性行为不同auto = 1 1 auto;1 = 1 1 0%;none = 0 0 auto
8place-items 是否一次设两个place-items: center = center / center
9Grid 行/列命名如何引用通过 grid-column: 1 / span 2命名用方括号 [name]
10多个 cascade 优先级估算错位顺序:inline > layer > specificity > order
11:focus 抢鼠标用户体验差:focus-visible
12aspect-ratiopadding-top hack老旧版兼容现代用 aspect-ratio: 16 / 9,老浏览器再垫 hack

9.5 学习难点

概念难点

难点为什么卡突破路径
盒模型 content-box vs border-box历史原因全局切 border-box,画图对比
BFC 创建方式多种都能触发 BFCoverflow: hidden / display: flow-root / flex / grid
Cascade 四维同时变拆成 origin / specificity / importance / order 四步
Flex 主轴交叉轴flex-direction 切换后变化用直尺画两条轴,每次切换重新标
Grid 命名线抽象用 named line 写一个 12 列 + masthead 的例子

思维难点

难点为什么卡突破路径
选 flex 还是 grid看不出”一维 vs 二维”行/列只有一个维度 = flex;行列同时 = grid
cascade 顺序被作者样式盖过specificity 算出后顺序又来了@layer 显式管理,少用 !important
计算值 vs 实际值em / rem / % 的级联DevTools Computed 看像素与 computed value

工程难点

难点为什么卡突破路径
大型 CSS 文件混沌没分层reset → tokens → base → components → utilities
grid + flex 混用的混乱同一容器两种模型同容器只用一种,跨容器切换
早期 IE11 兼容要求旧 grid 写法现代项目跳过;老项目查 [Autoprefixer]

9.6 技术标准与接口

9.6.1 Entity

名称版本发布组织状态
CSS Box Model L3持续W3C CSS WGCandidate Recommendation
CSS Positioned Layout L3持续W3C CSS WGWorking Draft
CSS Flexbox L1持续W3C CSS WGRecommendation
CSS Grid L1 / L2L1 REC,L2 CRW3C CSS WGRecommendation / CR
CSS Cascading L5 / L6L5 REC,L6 CRW3C CSS WGRecommendation / CR
CSS Custom Properties L1持续W3C CSS WGWorking Draft(事实标准)

9.6.2 Scope

9.6.3 Structure

9.6.4 Ecosystem

9.6.5 Depth Tiers

层级能力CSS 子主题可观察标准
L0知道存在知道盒模型、cascade、flex、grid
L1看得懂示例能读懂 MDN 与 cheatsheet 示例
L2能正确调用能写完整 flex / grid 布局
L3能解释与排错能解释 cascade、BFC、auto-fit vs auto-fill;能在 DevTools 找问题
L4能设计与扩展能设计 cascade 体系、为大型站点做布局策略

本子主题目标:L3

9.6.6 Source

10. 常见误区

11. 所有知识点分类(统一规则)

本子主题归属:前端与客户端 主 + 工程技术 辅。

直接依赖(0)

查看知识图谱