🧩 第五课:CSS Flexbox — 让元素乖乖排队

到目前为止,你放元素它们都是一块块从上往下叠(像叠石头 🪨)。

可真实的网页不是这样排的——导航栏横着排、卡片一行三个、内容要水平垂直居中。

对比一下:

默认排版(没有 Flex)Flexbox 排版
排列方向从上往下堆想横就横、想竖就竖
水平居中各种歪招justify-content: center 一句搞定
两端分开手动算宽度space-between 一句搞定
剩余空间空着浪费flex: 1 自动吃满

Flexbox 就像给盒子装上了"智能排队系统"——盒子里的元素听你指挥,指哪排哪。它是现代网页布局的必备技能,也是大学课程和面试的高频考点。

🧙 2. 一句咒语 + 两个角色

两个角色

🛒 容器(父盒子):开了 flex 的那个大盒子,负责指挥
🧍 项目(子元素):大盒子里面装的东西,负责听话

一句咒语

.box {
  display: flex;
}

容器上加 display: flex,它里面所有子元素立刻进入"弹性排队模式"。

🚌 比喻:容器 = 公交车,项目 = 乘客。
上了车(display:flex)之后,"谁站哪、谁挨着谁"就由接下来学的几个属性指挥——它们都是写在容器上的命令。

🎛️ 3. 布局实验室 — Flex 的"遥控器"

下面四个彩色盒子,用按钮随便摆弄,效果立刻可见 👇

1
2
3
4

🧭 排队方向 flex-direction

🎪 主轴站位 justify-content

📏 交叉轴对齐 align-items

↔️ 间距 gap

两个"轴"——最重要的概念

主轴 = 排队的方向(横排时是"横",竖排时是"竖")
交叉轴 = 和主轴垂直的方向

⚠️ 注意角色互换:横排时 justify-content 管左右、align-items 管上下;
换成竖排,两个属性角色互换!按"竖排 ↓"再点各按钮试试。

justify-content 各取值的比喻

效果比喻
flex-start挤在起点大家都挤在车头
center整体居中都站到车厢中间
flex-end挤在终点都挤在车尾
space-between两端贴边、中间平均头尾各一个,中间的人平均分位置
space-around每人前后空隙相等每个人左右留一样的位置
space-evenly所有空隙完全相等最公平:人和人、人和墙之间都一样宽

align-items 各取值的比喻

四个盒子高度不一样(2 最高、3 没写高度),就像高矮不同的同学站一排:

效果比喻
flex-start顶部对齐对齐头顶
center垂直居中对齐胸口
flex-end底部对齐对齐脚底
stretch拉满整个高度统一拉成一样高

💡 3 号盒子故意没写高度——点"拉满"和"居中对齐",看它怎么变化!

🥖 4. flex: 1 — 橡皮筋,吃掉剩余空间

做网页软件最常见的一招:左边固定侧边栏 + 右边内容区自动占满剩余

.layout { display: flex; }
.side { width: 120px; } /* 固定宽度 */
.main { flex: 1; } /* 剩下的空间全是我的! */

📌 侧边栏
固定 120px
📄 主内容区
flex: 1 → 剩下的空间全归我
📌 侧边栏
固定 100px
🥖 比喻:flex: 1 就像橡皮筋——谁写了它,谁就把所有空闲位置拉过来占满。
flex: 2 则比 flex: 1 多占一倍(按比例分)。

🥋 5. 实战三招 — 真实网站天天用

招一:导航栏(logo 靠左,链接靠右)

.navbar {
  display: flex;
  justify-content: space-between; /* 左右两组两端分开 */
  align-items: center; /* 不管谁高谁矮,垂直居中 */
}

招二:居中神器

让一个东西水平垂直都居中,就这三句:

display: flex;
justify-content: center; /* 水平居中 */
align-items: center; /* 垂直居中 */
我被完美居中 ✨

招三:自动换行 flex-wrap

卡片太多塞不下怎么办?flex-wrap: wrap 让它们自动换行,绝不挤扁。

📇 卡片 1
📇 卡片 2
📇 卡片 3
📇 卡片 4
📇 卡片 5
📇 卡片 6
📇 卡片 7
📇 卡片 8

试试把浏览器窗口拉窄,卡片会自动换行 🪄

🛠️ 6. 动手试一试!

✏️ 四个小挑战:
① 实验室:按"竖排 ↓",再点一遍各个按钮,感受 justify-contentalign-items角色互换
② 给导航栏中间加一个灰色的"搜索框"方块,让 logo / 搜索框 / 链接 三块等距分开(提示:中间方块固定宽 width: 200px,颜色浅灰)
③ 在"边栏+主区"布局右边再加一个固定 100px 的右侧栏(复制一份侧边栏的代码改改就行)
④ 把"自动换行"的 flex-wrap: wrap 改成 nowrap,保存刷新,看卡片被挤成什么样

操作方式:用记事本打开 C:\Users\HP\lesson1\lesson5-flexbox.html → 改代码 → 保存 → 刷新浏览器看效果。

📋 7. 今日总结

属性作用常用值
display: flex打开弹性模式(咒语)写在容器上
flex-direction排队方向row / column
justify-content主轴上的站位center / space-between / space-evenly
align-items交叉轴上的对齐center / flex-start / stretch
gap项目之间的间距10px
flex: 1吃掉剩余空间写在项目上
flex-wrap自动换行wrap
🎉 恭喜!你现在能做出真正的网页布局了:导航栏、多列、居中——现代网站 90% 的排版都用这套。
记住八个字:"容器开 flex,项目听指挥"

✅ 下一步?

你已经有完整能力做一个像样的网站了,接下来建议:

🏠完整小项目:个人主页HTML + CSS + JS + Flexbox 全用上,把学到的东西焊死
💾JS 进阶②:localStorage让待办清单"刷新不丢",网页第一次拥有记忆
📱响应式设计同一个页面,手机电脑都好看

告诉我你想学哪个,或者直接说"下一课" 🚀