你好呀!👋 作为前端新手,是不是还在为页面布局头疼?传统的浮动、定位写法繁琐又容易出bug?别担心,今天我们就来学习Flex布局——这个让前端布局变得简单高效的神器!

一、什么是Flex布局?

Flex(弹性布局)是CSS3推出的一维布局模型,专门用来解决元素的排列、对齐和空间分配问题。
它的核心思想很简单:
1、给父元素设置  display: flex ,它就变成了一个Flex容器

2、容器里的直接子元素自动成为Flex项目

3、容器可以控制项目的排列方向、对齐方式,项目也能自己决定如何放大或缩小
和传统布局相比,Flex最大的优势就是灵活、直观、代码少,特别适合做导航栏、卡片流、居中对齐这类常见场景。

二、搞懂Flex核心基础概念

1. 开启Flex布局

只要给父元素加上这行代码,就能瞬间开启弹性布局模式

.container {
  display: flex;
  width: 600px;
  height: 300px;
  border: 2px solid #aaa;
}

👉 效果:容器里的子元素会自动水平排成一行,哪怕它们原本是块级元素(比如div)。

2. 控制排列方向:flex-direction

通过这个属性,你可以自由切换项目的排列方向:

row (默认):水平从左到右

row-reverse :水平从右到左

column :垂直从上到下

column-reverse :垂直从下到上

.container {
  display: flex;
  flex-direction: column; /* 让项目垂直排列 */
}

3. 控制换行:flex-wrap

默认情况下,所有项目都会挤在一行,哪怕超出容器宽度也会被压缩。想让项目自动换行?用  flex-wrap :

.container {
  display: flex;
  flex-wrap: wrap; /* 超出容器自动换行 */
  /* flex-wrap: wrap-reverse; 反向换行,第一行在底部 */
}

💡 关键提醒:只有设置了 flex-wrap: wrap ,多行布局的 align-content  属性才会生效!

4. 主轴对齐:justify-content

这个属性用来控制项目在主轴(默认水平方向)上的对齐方式,只有当主轴有剩余空间时才会生效:

属性值 效果
flex-start 项目靠主轴起点(左)对齐(默认)
flex-end 项目靠主轴终点(右)对齐
center 项目在主轴方向居中
space-between 项目间距相等,首尾紧贴容器边缘
space-around 项目两侧外边距相等,项目间间距是边缘的2倍
space-evenly 项目之间、项目与容器边缘间距完全相等

.container {
  display: flex;
  justify-content: space-between; /* 两端对齐,中间均分 */
}

5. 交叉轴对齐:align-items & align-content
 

(1)align-items:控制单行项目在交叉轴(默认垂直方向)上的对齐方式

-  stretch (默认):拉伸填满交叉轴

-  flex-start :顶部对齐

-  flex-end :底部对齐

-  center :垂直居中

-  baseline :基线对齐

(2)align-content:控制多行项目在交叉轴上的整体对齐方式,用法和  justify-content  类似

.container {
  display: flex;
  align-items: center; /* 单行项目垂直居中 */
}

三、Flex容器常用属性全解

容器定好规则后,项目可以通过三个核心属性来控制自己的尺寸变化:

1. flex-basis:初始尺寸
 

定义项目在主轴上的理想初始大小,优先级高于  width / height :

 .item {
  flex-basis: 100px; /* 项目初始宽度为100px */
}

2. flex-grow:放大比例

当容器有剩余空间时,项目会按 flex-grow  的比例瓜分空间,默认值为 0 (不放大):

.item1 {
  flex-grow: 1; /* 占1份剩余空间 */
}
.item2 {
  flex-grow: 2; /* 占2份剩余空间 */
}

3. flex-shrink:缩小比例

当容器空间不足时,项目会按  flex-shrink  的比例压缩,默认值为  1 (自动缩小),设为  0  则禁止缩小:

.item {
  flex-shrink: 0; /* 空间不足也不缩小,保持原有尺寸 */
}

4. 简写形式:flex

日常开发中,我们通常用简写  flex  来合并三个属性,更简洁高效:
 
-  flex: 1  →  flex: 1 1 0% (自动填充剩余空间)

-  flex: 0 0 120px  → 固定120px,不放大也不缩小

-  flex: auto  →  flex: 1 1 auto

四、手把手两大实战案例

案例1:响应式导航栏

实现左Logo、中菜单、右按钮的自适应导航:

<div style="display: flex; align-items: center; height: 60px; padding: 0 20px; background: #333; color: white;">
 
  <div style="flex: 0 0 120px; font-weight: bold;">LOGO</div>
  
 
  <div style="flex: 1 1 0; margin: 0 20px;">
    <div style="display: flex; gap: 15px;">
      <span>首页</span>
      <span>产品</span>
      <span>关于我们</span>
      <span>联系</span>
    </div>
  </div>
 
  <div style="flex: 0 0.5 80px; text-align: center;">登录</div>
</div>

案例2:图片画廊布局

实现多行图片均匀排列,自动换行且居中:

.gallery {
  display: flex;
  flex-wrap: wrap; 
  justify-content: center; 
  align-content: space-around; 
  width: 800px;
  height: 500px;
  border: 10px solid #333;
}
.photo {
  flex-basis: 160px; 
  height: 120px;
  color: white;
  text-align: center;
  line-height: 120px;
}

👉 效果:无需手动计算间距和行数,Flex会自动帮你排版,代码简洁易维护。

五、新手必记避坑小技巧

1. 先定轴,再对齐:先确定主轴和交叉轴,再选择对应的对齐属性

2. 换行靠wrap,多行靠align-content:只有换行后,多行交叉轴对齐才生效

3. 缩放记grow和shrink:富余空间用  flex-grow  放大,空间不足用  flex-shrink  缩小

4. 多用简写提升效率:优先使用  flex: n  简写,让代码更简洁

💡 小建议:打开浏览器开发者工具,试着修改上面的代码,看看不同属性值带来的变化,这是最快的学习方式!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐