CSS Flex 布局:弹性布局的完全指南

1. 什么是 Flex 布局?

CSS Flexbox(弹性盒模型)是一种高效的布局方式,它可以让容器内的元素在主轴(水平或垂直)上动态排列,并自动适应不同屏幕尺寸。Flexbox 主要用于构建一维布局,即元素主要沿着**主轴(main axis)**排列,而不是像 CSS Grid 那样管理二维布局。

2. Flex 容器与子项

在使用 Flexbox 布局时,我们需要将父元素设为 display: flex;,使其成为 Flex 容器 ,然后所有子元素都会成为 Flex 子项,从而可以使用弹性布局的特性。

css 复制代码
.container {
  display: flex;
  background-color: #f4f4f4;
  padding: 10px;
}

.item {
  background-color: #4caf50;
  color: white;
  padding: 20px;
  margin: 5px;
}
ini 复制代码
<div class="container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
</div>

3. 主轴方向 (flex-direction)

flex-direction 决定了主轴的方向,影响子项的排列方式:

  • row(默认值):从左到右(横向)
  • row-reverse:从右到左(横向反转)
  • column:从上到下(纵向)
  • column-reverse:从下到上(纵向反转)
css 复制代码
.container {
  display: flex;
  flex-direction: row; /* 可改为 column, row-reverse, column-reverse */
}

4. 主轴对齐 (justify-content)

justify-content 用于控制子项在主轴上的对齐方式

  • flex-start(默认):子项靠左(横向)或靠上(纵向)排列
  • flex-end:子项靠右(横向)或靠下(纵向)排列
  • center:子项居中
  • space-between:首尾子项贴边,中间子项平均分布
  • space-around:每个子项两侧有相等间距
  • space-evenly:每个子项间距完全相等
css 复制代码
.container {
  display: flex;
  justify-content: center; /* 试试 space-between, space-around 等 */
}

5. 交叉轴对齐 (align-items)

align-items 控制子项在交叉轴上的对齐方式

  • stretch(默认):子项填充容器高度
  • flex-start:子项从交叉轴起点对齐
  • flex-end:子项从交叉轴终点对齐
  • center:子项在交叉轴居中
  • baseline:子项的文本基线对齐
css 复制代码
.container {
  display: flex;
  align-items: center; /* 试试 flex-start, flex-end, baseline */
}

6. 多行换行 (flex-wrap)

默认情况下,Flexbox 会尝试把所有子项放入同一行 ,如果想让子项在容器满时自动换行,可以使用 flex-wrap

  • nowrap(默认):不换行
  • wrap:自动换行
  • wrap-reverse:换行但顺序反转
css 复制代码
.container {
  display: flex;
  flex-wrap: wrap;
}

7. 伸缩比例 (flex-grow, flex-shrink, flex-basis)

Flex 子项可以通过 flex 相关属性控制其占据的空间比例:

  • flex-grow:控制子项如何扩展,占据剩余空间,默认 0(不扩展)。
  • flex-shrink:控制子项如何收缩,默认 1(允许收缩)。
  • flex-basis:设定初始大小(可以是 auto、具体 px 值或百分比)。
css 复制代码
.item {
  flex-grow: 1; /* 让所有子项平均分配空间 */
}

多个子项有不同 flex-grow 时,它们会按照比例分配空间。例如:

css 复制代码
.item:nth-child(1) { flex-grow: 2; } /* 这个子项占 2 份 */
.item:nth-child(2) { flex-grow: 1; } /* 这个子项占 1 份 */
.item:nth-child(3) { flex-grow: 1; } /* 这个子项占 1 份 */

8. 复杂布局示例

我们可以结合上述属性创建一个响应式布局:

css 复制代码
.container {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-around;
  align-items: center;
  height: 200px;
  background-color: lightgray;
}

.item {
  flex: 1;
  min-width: 100px;
  text-align: center;
  padding: 20px;
  background-color: steelblue;
  color: white;
  margin: 5px;
}
ini 复制代码
<div class="container">
  <div class="item">A</div>
  <div class="item">B</div>
  <div class="item">C</div>
</div>

9. 总结

Flexbox 提供了一种灵活的布局方式,可以轻松实现水平和垂直居中、动态调整子项大小、创建响应式布局等。掌握 flex-directionjustify-contentalign-itemsflex-grow 等核心属性后,就可以轻松构建现代化的网页布局。

你是否已经在项目中使用 Flexbox?如果遇到问题或有更好的实践,欢迎交流! 🚀

相关推荐
inxunoffice14 分钟前
批量在多个 PDF 的指定位置插入页,如插入封面、插入尾页
前端·pdf
木木黄木木19 分钟前
HTML5 Canvas绘画板项目实战:打造一个功能丰富的在线画板
前端·html·html5
豆芽81921 分钟前
基于Web的交互式智能成绩管理系统设计
前端·python·信息可视化·数据分析·交互·web·数据可视化
不是鱼21 分钟前
XSS 和 CSRF 为什么值得你的关注?
前端·javascript
顺遂时光24 分钟前
微信小程序——解构赋值与普通赋值
前端·javascript·vue.js
anyeyongzhou26 分钟前
img标签请求浏览器资源携带请求头
前端·vue.js
Captaincc35 分钟前
腾讯云 EdgeOne Pages「MCP Server」正式发布
前端·腾讯·mcp
最新资讯动态1 小时前
想让鸿蒙应用快的“飞起”,来HarmonyOS开发者官网“最佳实践-性能专区”
前端
雾岛LYC听风1 小时前
3. 轴指令(omron 机器自动化控制器)——>MC_GearInPos
前端·数据库·自动化
weixin_443566981 小时前
39-Ajax工作原理
前端·ajax