CSS 基础与现代布局:盒模型 / cascade / Flexbox / Grid
0. 元信息
- 主题路径:
docs/topics/html-css-responsive/subtopics/css-fundamentals-and-layout/ - 父主题:
html-css-responsive - 主分类:前端与客户端
- 辅助分类:工程技术
- 适合对象:会用 CSS 写样式,但理解停在”试着改”层面的开发者
- 建议周期:1
1.5 周(每周 812 小时) - 前置知识:HTML 语义化(
html-semantics-and-forms子主题) - 最终目标:能解释盒模型、cascade、specificity,写出健壮的 Flexbox 与 Grid 布局
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.25 | 1.5h | content-box vs border-box + margin collapse |
| 2. 文档流 | 0.25 | 1.5h | block / inline / BFC / IFC |
| 3. 定位 | 0.25 | 1.5h | static / relative / absolute / fixed / sticky |
| 4. cascade | 0.25 | 1.5h | specificity / @layer / :where() / !important |
| 5. 变量与继承 | 0.25 | 1.5h | custom properties / inherit / initial / unset / revert |
| 6. Flexbox | 0.5 | 1.5~2h | 主轴 / 交叉轴 / 弹性 / 换行 / gap / min-width:0 |
| 7. Grid | 0.5 | 1.5~2h | 显式 vs 隐式 / 命名线 / area / subgrid / auto-fit |
| 8. columns | 0.25 | 1.5h | column-count / column-gap / column-span |
| 9. 综合 | 0.5 | 1.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. cascade | specificity、origin、order、@layer、:where()、!important | 写一遍四层 layer 顺序 | 能用 cascade 矩阵算最终值 |
| 5. 变量与继承 | custom properties、inherit / initial / unset / revert | token 系统 8 个变量 | 能解释为什么不写 --brand 会变 null |
| 6. Flexbox | 容器 + 项目、flex-direction / flex-wrap / flex / gap / align-* / justify-* / place-* / min-width:0 | navbar + 卡片列表 + sticky footer | 能解释 flex: 1 等于什么 |
| 7. Grid | 显式 vs 隐式、grid-template / grid-area / gap / auto-fit / minmax / subgrid | 12 列布局 + 杂志 masonry | 能口算 auto-fit minmax(250px, 1fr) 在 1200px 下几列 |
| 8. columns | column-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: hidden 或 display: flow-root)解决 margin collapse;写 1 个 inline + block 混排 | 截图 + 笔记 | margin 在 BFC 内不向父外折叠;inline 元素能水平排列 |
| Day 3 | 定位:写 sticky 标题栏(要求在滚动时吸附),并故意在祖先加 overflow: hidden 复现”sticky 失效” | 截图 + 笔记 | 移除 overflow: hidden 后 sticky 恢复;能解释为何 sticky 受 overflow 限制 |
| Day 4 | cascade:写 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 6 | Flexbox:写 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. 阶段通用验收
- 不看答案重写该阶段的最小 demo(盒模型 / cascade / flex / grid 各 1 个);
- 解释”content-box vs border-box”、“BFC 为何解决 margin collapse”、“@layer 顺序与 specificity 谁先”、“flex 1 vs auto vs none”;
- 截图 3 种宽度(360 / 768 / 1440)+ DevTools Computed + Cascade 面板;
- 至少 1 张图标记”每条样式的来源”(手画或 DevTools 截图);
- 列出至少 3 类边界:长串文本不撑爆 / sticky 不失效 /
auto-fit在窄屏保留至少 1 列; - 给出 cascade 顺序的 4 维矩阵(origin / importance / specificity / order);
- 能修改现有页面(加 layer、调 cascade、修 sticky)而不是只能照抄。
6. 最终验收
- 独立完成:1 份完整落地页(nav / hero / 3 列特性 / 页脚),用 flex + grid 拼装;
- 至少完成 9 个练习:3 个盒模型 / BFC、2 个 cascade 矩阵、2 个 flex 布局、2 个 grid 布局;
- 4 个断点:360 / 768 / 1024 / 1440(同一组件);
- 能口算
auto-fit minmax(250px, 1fr)在 1200px 下几列(答:4 列); - 能解释
flex: 1等于什么(答:flex: 1 1 0%); - DevTools Computed + Cascade 面板可定位每条样式的来源;
- 用 10 分钟讲清”盒模型 → 文档流 → 定位 → cascade → flex / grid”链路。
7. 综合项目
首选:用 flex + grid 拼一个单页复杂布局(含 sticky 头部 / hero / 3 列特性 / 卡片网格 / 杂志 masonry / 页脚),覆盖桌面 / 平板 / 手机 3 个断点,落地”cascade 显式分层 + 4 维矩阵”。
必做:
- 全局
* { box-sizing: border-box }+ reset; @layer4 段:reset / tokens / base / components;- token 系统:颜色 / 字号 / 间距 / 圆角 / 阴影 至少各 1 组;
- sticky 头部 1 个 + flex navbar 1 个 + grid 3 列特性 1 个 + grid
auto-fit minmax(...)卡片 1 个; - 长串处理:标题
min-width: 0截断或text-overflow: ellipsis; - 至少 1 处用
subgrid对齐卡片内部; - DevTools Computed + Cascade 截图,标出”每条样式的来源”;
- 真机或 Device Mode 在 360 / 768 / 1440 各拍 1 张。
备选:重构一套遗留的”全 float + 固定宽度”页面为 flex + grid 布局,附”原 vs 新”截图与 DevTools 标注。
notes/ 与 README 存放规范
所有截图、DevTools Computed / Cascade 标注、token 表统一存放在项目根目录的 notes/ 子目录或 README 的对应章节;提交时一并带上。综合项目的 notes/ 至少包含:
notes/design.md:cascade 分层、token 表、布局策略(flex / grid 选型);notes/test.md:每张截图对应的断点、DevTools 标注、cascade 矩阵推导;notes/retrospective.md:复盘(用时、难点、收获、未完成项)。
任何综合项目都必须包含:
- 需求与受众;
- cascade 分层表(reset / tokens / base / components);
- token 系统源码(CSS 自定义属性 +
:root); - 完整源码(HTML + CSS,可含少量 JS 用于汉堡菜单);
- 4 断点截图(360 / 768 / 1024 / 1440);
- DevTools 标注:每条样式来源(手画或截图);
- README:项目介绍、运行步骤、目录结构、复盘;
- 复盘记录:用时、难点、收获、下一步。
本主题贡献(Loop 6-D · html-css-responsive / css-fundamentals-and-layout)
本主题给父主题与所有前端子主题铺好”模型 → 规则 → 一维 → 二维”的布局地基,并把 Box Model、Cascade、Flexbox、Grid 四个抽象概念落到能讲清来源、能用 DevTools 复算的工程实践。
3 项核心职责
- 盒模型与文档流:用
box-sizing切换(content-box vs border-box)+ BFC(overflow: hidden或display: flow-root)+ IFC / 定位(static / relative / absolute / fixed / sticky)的对比 demo,把 margin collapse、sticky 失效等”卡半天”的问题用 DevTools 截图定格。 - Cascade 显式分层:用
@layer写 4 段顺序(reset / tokens / base / components),配合:where()把特异性清零、:is()/:has()收敛选择器,搭出一份 cascade 4 维矩阵(origin / importance / specificity / order),能在 DevTools Cascade 面板逐条指出”这条样式为什么赢”。 - Flexbox + Grid 实战:把 navbar / sticky footer / 3 列特性 / 卡片网格 / 杂志 masonry 用 Flexbox(一维)+ Grid(二维)各归其位,用
auto-fit minmax(...)+subgrid+min-width: 0三件套把”文字撑爆 / 列数不对 / 卡片不对齐”三类边界逐个收掉。
4 项交付物
- 盒模型 / BFC 对比 demo:同一组件在
content-box与border-box下的 DevTools Computed 截图,配 BFC 触发 / 关闭时的 margin 行为录屏。 - Cascade 4 段
@layer模板:reset / tokens / base / components 四层源码 + cascade 矩阵推导表,能口算auto-fit minmax(250px, 1fr)在 1200px 下几列、能口答flex: 1=flex: 1 1 0%。 - Flexbox / Grid 实战页:整页复杂布局(nav / hero / 3 列特性 / 卡片网格 / 页脚),4 断点(360 / 768 / 1024 / 1440),DevTools 标注每条样式来源。
- 遗留页面重构对比:把”全 float + 固定宽度”的遗留页改写为 flex + grid,附”原 vs 新”截图与 DevTools 标注。
3 个验收指标
- 能不看答案重写 4 个最小 demo:盒模型切换 / cascade 4 段 / flex 三件套 / grid auto-fit。
- DevTools Computed + Cascade 面板:每条样式可定位到
@layer或选择器,P75 ≤ 5 秒定位。 - 4 断点截图齐全(360 / 768 / 1024 / 1440),覆盖桌面 / 平板 / 手机,遗留页重构后无 float。
8. 推荐开源资料
许可证提示: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 L1 | Flexbox | 查每个属性的精确行为 |
| CSS Grid L1 + L2 | Grid 与 subgrid | 查 auto-fit / auto-fill 行为 |
| CSS Cascading L5 / L6 | cascade 规则 | 对照表查优先级 |
| Ethan Marcotte, Responsive Web Design (2010) | RWD 起源 | 历史与动机 |
9.3.2 经典书籍
| 书 | 作者 | 用法 |
|---|---|---|
| CSS: The Definitive Guide | Eric Meyer / Estelle Weyl | 词典式查 |
| CSS Secrets | Lea Verou | 案例与高级技巧 |
| Flexbox in CSS | Estelle Weyl | Flexbox 主线 |
| Grid Layout in CSS | Eric Meyer | Grid 主线 |
| Bulletproof Web Design | Dan Cederholm | 弹性与渐进增强思路 |
9.3.3 优秀博客 / 文档
| 资料 | 特点 | 用法 |
|---|---|---|
| MDN CSS | 权威 | 默认查文档 |
| CSS-Tricks — A Complete Guide to Flexbox | Flex cheatsheet | 速查 |
| CSS-Tricks — A Complete Guide to Grid | Grid cheatsheet | 速查 |
| Rachel Andrew 博客 | Grid 规范作者 | Grid 一手 |
| Lea Verou 博客 | CSS WG 成员 | 现代 CSS 一手 |
| Josh Comeau — Flexbox & Grid | 可视化教学 | 难概念入门 |
| web.dev — Learn CSS | Google 出品 | 主线 |
| Smashing Magazine — CSS | 案例 | 进阶 |
9.3.4 核心人物
| 人物 | 主要影响 | 建议追踪 |
|---|---|---|
| Håkon Wium Lie | CSS 共同作者 | CSS 历史 |
| Bert Bos | CSS 共同作者 | CSS 历史 |
| Eric Meyer | CSS 推广与著作 | meyerweb.com |
| Tab Atkins | flex / grid 规范作者之一 | justifiably |
| Rachel Andrew | Grid 规范编辑 | rachelandrew.co.uk |
| Lea Verou | CSS WG 成员 | verou.me |
| Manuel Matuzović | 现代 CSS + a11y | matuzo.at |
9.3.5 开发方法
| 方法 | 具体动作 | 何时用 |
|---|---|---|
| One axis at a time | 父元素排列 = flex;区域排列 = grid | 选型 |
| box-sizing everywhere | 全局 * { box-sizing: border-box } | 项目入口 |
| Min-width 0 for flex kids | flex 子元素允许截断 | 文字溢出 |
| @layer for order | 把 reset / tokens / base / components 显式分层 | 多人 |
| Computed-style check | DevTools Computed 看最终值 | 排错 |
9.3.6 必读资源子集(≥5 条)
- MDN CSS Reference
- CSS-Tricks — A Complete Guide to Flexbox
- CSS-Tricks — A Complete Guide to Grid
- Rachel Andrew — Grid by Example
- Lea Verou — CSS Secrets(书 + 博客)
- web.dev Learn CSS
9.4 经典问题与经典案例
| # | 问题 | 为什么重要 | 最简答案 |
|---|---|---|---|
| 1 | flex 子元素文字不换行 | 默认 min-width: auto 阻止截断 | 给子元素 min-width: 0 |
| 2 | auto-fit vs auto-fill | 决定卡片数量 | auto-fit 让空轨道折叠成 0;auto-fill 保留 |
| 3 | subgrid 不生效 | 父容器不是 grid | 必须 display: grid |
| 4 | Grid 显式 / 隐式差异 | 隐式行宽不对 | 用 grid-auto-rows: minmax(...) |
| 5 | sticky 在 overflow 父元素失效 | sticky 受 overflow 影响 | 祖先中不能有 overflow: hidden / auto |
| 6 | margin 折叠消失 | flex / grid 内不会折叠 | 不奇怪,按容器上下文判定 |
| 7 | flex: auto vs 1 | 弹性行为不同 | auto = 1 1 auto;1 = 1 1 0%;none = 0 0 auto |
| 8 | place-items 是否一次设两个 | 是 | place-items: center = center / center |
| 9 | Grid 行/列命名如何引用 | 通过 grid-column: 1 / span 2 | 命名用方括号 [name] |
| 10 | 多个 cascade 优先级 | 估算错位 | 顺序:inline > layer > specificity > order |
| 11 | :focus 抢鼠标 | 用户体验差 | 用 :focus-visible |
| 12 | aspect-ratio 与 padding-top hack | 老旧版兼容 | 现代用 aspect-ratio: 16 / 9,老浏览器再垫 hack |
9.5 学习难点
概念难点
| 难点 | 为什么卡 | 突破路径 |
|---|---|---|
| 盒模型 content-box vs border-box | 历史原因 | 全局切 border-box,画图对比 |
| BFC 创建方式 | 多种都能触发 BFC | overflow: 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 WG | Candidate Recommendation |
| CSS Positioned Layout L3 | 持续 | W3C CSS WG | Working Draft |
| CSS Flexbox L1 | 持续 | W3C CSS WG | Recommendation |
| CSS Grid L1 / L2 | L1 REC,L2 CR | W3C CSS WG | Recommendation / CR |
| CSS Cascading L5 / L6 | L5 REC,L6 CR | W3C CSS WG | Recommendation / CR |
| CSS Custom Properties L1 | 持续 | W3C CSS WG | Working Draft(事实标准) |
9.6.2 Scope
- CSS Working Group 定义 CSS 各模块与属性。
- 浏览器实现在 caniuse 上可见。
- 工具链(Lightning CSS / PostCSS)负责把现代语法降到目标浏览器。
9.6.3 Structure
- 核心属性速记:
- 布局:
display、position、inset、flex/grid相关属性。 - 间距:
margin、padding、gap、row-gap、column-gap。 - Cascade:
@layer、:where()、:is()、:not()、:has()、!important。 - 现代:
aspect-ratio、color-scheme、accent-color、subgrid、place-*。
- 布局:
9.6.4 Ecosystem
- 工具:Lightning CSS、PostCSS、Tailwind / UnoCSS、Sass、stylelint、autoprefixer。
- 调试:Chrome DevTools、Firefox DevTools、Safari Web Inspector、Web Inspector Agent。
- 学习:Flexbox Froggy、Grid Garden、CSS Diner、CSS Battle。
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
- W3C CSS WG:各模块当前状态。
- MDN CSS:属性与示例权威。
- caniuse:浏览器支持。
- 引用快照日期:2026-07-30。
10. 常见误区
- 忘记
display: grid,子元素按普通 block 排; auto-fit minmax(...)写错顺序;- flex 子元素忘
min-width: 0导致溢出; - 用
position: absolute把元素甩出屏幕忘记inset: 0; position: sticky失效不查 overflow 祖先;- margin collapse 期望消失而 flex/grid 不折叠;
@layer顺序与 specificity 混;- 用
!important强行覆盖; - 忘记
box-sizing: border-box全局; - Grid
grid-template-areas名字写错一处全部失效; place-items与align-items/justify-items重复写;- Grid 子元素用
flex父属性; aspect-ratio与width:100%一起漏写height:auto;- 媒体查询走
max-width而非min-width(desktop-first 思维未切); - DevTools 不开”computed” / “specificity”找根因;
- 用 polyfill 兼容旧 IE,但项目其实没要求。
11. 所有知识点分类(统一规则)
本子主题归属:前端与客户端 主 + 工程技术 辅。