📱 第八课:响应式设计 — 网页的变形金刚

你的主页在电脑上很漂亮,但用手机打开会是什么样?先看两组数据:

💻 电脑📱 手机
屏幕宽度大约 1920px大约 390px(窄了 5 倍
操作方式鼠标,点得准手指,按钮太小吃不到
屏幕方向横着竖着

宽度差了 5 倍,如果页面写死宽度,手机上就会出现:文字挤成蚂蚁、横向滚动条、点不动的按钮。

🤖 总比喻:响应式网页(responsive design)就是一个变形金刚——
同一个页面,屏幕宽时是汽车形态,屏幕窄时自动变成人形。
今天学的 @media,就是教它"看场景变形"的规则。

📜 2. 变形的通行证:viewport 一行

变形之前,得先让手机"说实话"。检查你的主页 <head> 里有没有这一行:

<meta name="viewport" content="width=device-width, initial-scale=1.0">

拆开看:width=device-width = "页面宽度 = 设备真实宽度"。

🎭 比喻:没有这行,手机浏览器会假装自己是个 980px 宽的电脑屏幕,把你的页面缩成微缩景观——字小到要用放大镜。
加上这行,手机才用自己真实的 390px 来渲染页面。

好消息:你的 my-homepage.html 第 5 行已经有这行了(当时照着模板写的),通行证已到手。今天不用改它,知道它干嘛的就行。

🔀 3. @media = CSS 版的 if(第三课老朋友!)

你还记得第三课学的 if 吗?JS 里靠它做判断,CSS 里也有自己的"if"——就是 @media。对比一下:

JS(第三课)CSS(今天)
写法if (天黑了) { 开灯 }@media (屏幕窄) { 变竖排 }
判断什么变量、事件屏幕宽度
成立后干嘛执行 {} 里的代码应用 {} 里的样式

CSS 会实时检查:窗口一变窄,条件成立,新样式立刻生效;变宽了,条件不成立,样式自动作废。全程不用刷新,这就是"响应式"的由来。

🔧 4. 语法拆解:一句话说清 @media

新代码先标序号,对照着看:

@media (max-width: 600px) { /* ① + ② */
    .robot { flex-direction: column; } /* ③ */
}
序号部分意思
@media宣告:"下面是条件样式,别无条件执行"
(max-width: 600px)条件:屏幕宽度 ≤ 600px(max 最多,见下节)
{ ... }条件成立时,这里面的样式才生效

整句翻译:当屏幕宽度不超过 600px 时,把 .robot 变成竖排。
是不是和 if (屏幕窄) { 变竖排 } 一模一样?😄

⚖️ 5. 对比:max-width 还是 min-width?

写法生效条件人话适合场景
@media (max-width: 600px)宽度 ≤ 600"最多 600 时"手机优先:给窄屏写特殊样式
@media (min-width: 900px)宽度 ≥ 900"至少 900 时"桌面优先:给大屏加料

🎭 记忆口诀:
max-width = 屋顶——从上往下,窄屏才生效;
min-width = 地板——从下往上,宽屏才生效。

判断条件的临界值叫断点(breakpoint)——"变形金刚变形的那个点"。常用参考:

断点对应设备
600px手机 📱
900px平板 📟
1200px大屏电脑 🖥️
🔗 条件还能组合:and 连接,比如 (max-width: 900px) and (min-width: 601px) = "宽度在 601~900 之间"(平板专属区间)。本课件下面的变形金刚就用到了这招。

🎮 6. 亲手玩:变形金刚舞台

下面三个盒子就是我们的变形金刚,它的变形规则已经写在本课件里了。
👉 抓住浏览器右边缘,左右拖动改变窗口宽度,盯着它看:

当前窗口宽度:?px   🖥️ 桌面形态:横排·蓝 📟 平板形态:横排·橙 📱 手机形态:竖排·红

📦 盒子 A
📦 盒子 B
📦 盒子 C

🔍 变形规则(就三条,都写在 <style> 里):≤900 变橙色 → ≤600 变竖排+红色

三条规则原文,注意书写顺序:先 900 后 600——窄屏时两条都命中,后写的 600 覆盖 900(CSS 的覆盖规则,老朋友了):

/* 平板:变色 */
@media (max-width: 900px) {
    .robot-part { background: #f59e0b; }
}

/* 手机:变竖排 + 换色 */
@media (max-width: 600px) {
    .robot { flex-direction: column; }
    .robot-part { background: #ef4444; }
}
🔧 偷懒绝招:手机模拟器。不用真拿手机——按 F12 → 点左上角手机+平板图标(Toggle device toolbar)→ 顶部选 iPhone 型号,浏览器会假装自己是那台手机,还能旋转屏幕。

🧰 7. 响应式三件套(@media 之外的好习惯)

光会变形还不够,这三招能让你少写一半的 @media:

招式代码比喻
① 图片别撑爆 img { max-width: 100%; } 图片像,倒进多宽的杯子就变成多宽,绝不溢出来
② 卡片会换行 flex-wrap: wrap; 第五课老朋友!塞不下就自动去下一行(你的主页卡片已经在用了)
③ 宽度别写死 % / max-width 代替固定 px 写死 800px 的手机就是灾难;写 100% 的手机天然适配
🎯 发现了吗:你的主页 .card-row 早就用了第②招——手机上看技能卡已经是自动换行的。响应式不是推倒重来,而是补上最后一块短板

🏠 8. 实战:给主页装上"变形规则"

打开 my-homepage.html,在 <style>最后面</style> 之前)加一段 @media。

第一步:导航栏变形(手机上一排挤不下)

/* ⭐ 手机形态:导航栏改竖排居中 */
@media (max-width: 600px) {
    .navbar {
        flex-direction: column; /* 横排变竖排 */
        gap: 8px; /* 上下留点缝 */
    }
    .navbar .links a { margin: 0 10px; font-size: 14px; }
}

第二步:作品卡片占满整行(200px 宽在手机上太窄)

@media (max-width: 600px) {
    .project-card { width: 100%; } /* 不写死 200px,手机上一行一张 */
}

第三步:验证

保存 → 按 F12 打开手机模拟器(或直接拖窄窗口)→ 检查:
✅ 导航栏变竖排居中,logo 在上、链接在下
✅ 作品卡片一行一张,手指点起来舒服
✅ 切回宽窗口,一切恢复原样(变形金刚变回来了)

🛠️ 9. 动手挑战

✏️ 两个挑战:

① 主页装上变形规则(必做)
按第 8 节两步把 @media 写进 my-homepage.html,用 F12 手机模拟器验证三种形态都不乱:电脑 / 平板 / 手机。

② 附加题:手机上的小细节
手机屏上 120px 的头像有点占地方,把它缩小到 90px:
@media (max-width: 600px) {
  .avatar { width: 90px; height: 90px; }
}

(提示:写在同一个 @media 里也行,但分开写更清爽——一个变形规则管一件事)

老规矩:改代码 → 保存 → 手机模拟器验证。变形规则写错时最常见的问题:忘了加分号、花括号没配对——和普通 CSS 一模一样。

📋 10. 今日总结

知识点一句话
响应式设计 ⭐同一个页面,不同屏幕自动变形
@media 语法 ⭐@media (max-width:600px) { } —— CSS 的条件判断,实时生效不用刷新
max 还是 minmax-width ≤600 手机优先;min-width ≥900 桌面优先
viewport手机按真实宽度渲染的"通行证"(主页已有了)
三件套图片 max-width:100%flex-wrap、宽度别写死 px
🎉 完成挑战后:你的主页在手机、平板、电脑上全都好看——
这不只是"会写网页"了,这是真正网站的最低门槛:
用户用什么设备打开,它都从容应对 🤖

✅ 下一步?

🌍第九课:把主页发布到网上全世界的人用手机就能打开你的主页——你的第一个真正上线的网站

先做挑战,做完喊我检查!🚀