news 2026/10/18 7:46:02

前端教学4-Flex 布局详解与常用方法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
前端教学4-Flex 布局详解与常用方法

Flex 布局详解与常用方法

一、Flex 是什么

Flex(Flexible Box,弹性盒子)是 CSS3 提供的一种一维布局模型,专门用于在容器中对项目进行排列、对齐和分配空间。

一句话概括:给父容器加上display: flex,子元素就能灵活地排列和对齐。

为什么要用 Flex?

在 Flex 出现之前,网页布局靠float+position,缺点:

  • 垂直居中困难
  • 多列等高麻烦
  • 顺序调整需改 HTML

Flex 解决了这些痛点,是现代网页布局的首选方案。


二、核心概念:两个角色

Flex 布局中只有两个角色:

┌─────────────────────────────────┐ │ Flex Container(容器) │ ← 父元素:display: flex │ ┌────┐ ┌────┐ ┌────┐ │ │ │项目1│ │项目2│ │项目3│ │ ← 子元素:Flex Item │ └────┘ └────┘ └────┘ │ └─────────────────────────────────┘
角色英文设置位置作用
容器Container父元素统一管理子元素的排列方式
项目Item子元素各自可以有自己的伸缩规则

两条轴线(理解 Flex 的关键)

主轴 (main axis) → 方向由 flex-direction 决定 ┌──────────────────────────────────────┐ │ ┌────┐ ┌────┐ ┌────┐ │ 交叉轴 │ │ │ │ │ │ │ │ ( cross │ │ │ │ │ │ │ │ axis) │ └────┘ └────┘ └────┘ │ │ │ └──────────────────────────────────────┘
  • 主轴(main axis):项目排列的方向(默认水平)
  • 交叉轴(cross axis):与主轴垂直的方向

三、容器属性(6 个常用)

1.flex-direction:主轴方向

决定项目沿着哪个方向排列。

.container{display:flex;flex-direction:row;/* 默认:水平从左到右 */flex-direction:row-reverse;/* 水平从右到左 */flex-direction:column;/* 垂直从上到下 */flex-direction:column-reverse;/* 垂直从下到上 */}

2.justify-content:主轴对齐

控制项目在主轴方向的对齐与分布。

.container{display:flex;justify-content:flex-start;/* 靠左(默认) */justify-content:flex-end;/* 靠右 */justify-content:center;/* 居中 */justify-content:space-between;/* 两端对齐,首尾贴边 */justify-content:space-around;/* 每个项目左右间距相等 */justify-content:space-evenly;/* 所有间距完全相等 */}

可视化效果:

flex-start: [■][■][■] center: [■][■][■] space-between: [■] [■] [■] space-around: [■] [■] [■] space-evenly: [■] [■] [■]

3.align-items:交叉轴对齐

控制项目在交叉轴方向(单行)的对齐方式。

.container{display:flex;align-items:stretch;/* 拉伸填满(默认) */align-items:flex-start;/* 顶部对齐 */align-items:flex-end;/* 底部对齐 */align-items:center;/* 垂直居中 */align-items:baseline;/* 文字基线对齐 */}

最经典用法:垂直水平双居中

.center-box{display:flex;justify-content:center;/* 主轴居中 */align-items:center;/* 交叉轴居中 */}

4.flex-wrap:是否换行

.container{display:flex;flex-wrap:nowrap;/* 不换行,挤压项目(默认) */flex-wrap:wrap;/* 换行 */flex-wrap:wrap-reverse;/* 反向换行 */}

5.align-content:多行交叉轴对齐

当项目换行了(多行),控制行与行之间的分布。

.container{display:flex;flex-wrap:wrap;align-content:flex-start;/* 多行靠顶部 */align-content:center;/* 多行整体居中 */align-content:stretch;/* 各行拉伸填满(默认) */align-content:space-between;/* 行与行两端对齐 */}

注意:align-content只在多行时生效,单行时用align-items。

6.flex-flow:方向 + 换行的简写

.container{flex-flow:row wrap;/* 等同于 flex-direction: row; flex-wrap: wrap; */}

四、项目属性(5 个常用)

1.flex-grow:放大比例

当容器有剩余空间时,项目如何分配多余空间。

.item{flex-grow:0;/* 默认:不放大 */flex-grow:1;/* 等分剩余空间 */}
/* 三个项目:第一个占 1 份,第二个占 2 份,第三个不放大 */.item1{flex-grow:1;}.item2{flex-grow:2;}.item3{flex-grow:0;}

2.flex-shrink:缩小比例

当容器空间不足时,项目如何缩小。

.item{flex-shrink:1;/* 默认:等比缩小 */flex-shrink:0;/* 不缩小 */}

3.flex-basis:项目基础大小

.item{flex-basis:200px;/* 项目主轴方向初始大小为 200px */flex-basis:auto;/* 默认:由内容决定 */}

4.flex:简写(最常用)

.item{flex:1;/* 等同于 flex: 1 1 0% */flex:0 0 200px;/* 不放大不缩小,固定 200px */flex:auto;/* 等同于 flex: 1 1 auto */flex:none;/* 等同于 flex: 0 0 auto */}

常用取值:

写法含义场景
flex: 1等比分占剩余空间自适应列
flex: 0 0 200px固定 200px,不伸缩固定宽度的侧栏
flex: 2 1 0%放大比例 2某列占两倍空间

5.order:排列顺序

.item1{order:2;}/* 排第二 */.item2{order:1;}/* 排第一(数字越小越靠前) */.item3{order:3;}/* 排第三 */

默认order: 0,可以用负数。

6.align-self:单个项目的交叉轴对齐

覆盖容器的align-items。

.item2{align-self:center;/* 只有这个项目垂直居中 */}

五、常用布局案例

案例 1:水平垂直居中(最经典)

<divclass="box">居中文字</div>
.box{display:flex;justify-content:center;align-items:center;width:300px;height:200px;background:#2c7a4b;color:white;}

案例 2:导航栏

<navclass="nav"><ahref="#">首页</a><ahref="#">产品</a><ahref="#">新闻</a><ahref="#"style="margin-left:auto;">联系我们</a></nav>
.nav{display:flex;align-items:center;gap:20px;height:60px;padding:0 20px;background:#333;}.nav a{color:white;text-decoration:none;}

技巧:margin-left: auto可以把"联系我们"推到最右边。

案例 3:卡片网格(自适应换行)

<divclass="cards"><divclass="card">卡片1</div><divclass="card">卡片2</div><divclass="card">卡片3</div><divclass="card">卡片4</div></div>
.cards{display:flex;flex-wrap:wrap;gap:15px;}.card{flex:1 1 200px;/* 最小 200px,可伸缩 */height:120px;background:#e3f2e1;border-radius:8px;display:flex;align-items:center;justify-content:center;}

案例 4:左右分栏(侧栏固定+主内容自适应)

<divclass="layout"><asideclass="sidebar">侧边栏 200px</aside><mainclass="main">主内容自适应</main></div>
.layout{display:flex;gap:20px;}.sidebar{flex:0 0 200px;/* 固定 200px */background:#f0f0f0;}.main{flex:1;/* 占据剩余空间 */background:#e3f2e1;}

案例 5:图文并排

<divclass="item"><imgsrc="img/avatar.png"alt=""><div><h3>用户名</h3><p>个人简介文字...</p></div></div>
.item{display:flex;align-items:center;gap:15px;}.item img{width:60px;height:60px;border-radius:50%;}

六、Flex 速查表

容器属性

属性常用值作用
flex-directionrow/column主轴方向
justify-contentcenter/space-between主轴对齐
align-itemscenter/stretch交叉轴对齐
flex-wrapwrap/nowrap是否换行
align-contentcenter/stretch多行交叉轴对齐

项目属性

属性常用值作用
flex1/0 0 200px伸缩简写
flex-grow0/1/2放大比例
flex-shrink0/1缩小比例
flex-basis200px/auto基础大小
order整数排列顺序
align-selfcenter/flex-start单独对齐

七、教学建议

  1. 先画轴线:讲 Flex 之前一定要在黑板上画出"主轴"和"交叉轴",学生才能理解justify-content和align-items的区别。
  2. 动手演示:在浏览器开发者工具中勾选/取消 Flex 属性,让学生实时看到效果变化,比纯理论更直观。
  3. 从常用入手:justify-content、align-items、flex这三个属性覆盖了 80% 的使用场景,优先讲透。
  4. 对比 float:用"垂直居中"这个经典痛点做对比——float 需要 3 行 hack,Flex 只需 1 行,学生立刻能体会 Flex 的优势。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/18 7:45:52

图神经网络助力工业设备关联建模与故障传播分析实战

做工业智能运维这些年&#xff0c;我越来越觉得&#xff0c;单点设备的故障预测虽然重要&#xff0c;但真正的复杂度都藏在设备与设备之间的关联关系里。图神经网络在工业设备关联建模与故障传播分析这个方向上&#xff0c;这几年沉淀了不少可靠玩法&#xff1a;把产线的物理连…

作者头像 李华
网站建设 2026/10/18 7:41:45

鸿蒙开发深度实践:数感星球架构设计与性能优化全解析

鸿蒙开发新纪元&#xff1a;聚焦数感星球应用的深度实践与人才需求解析先说个背景。我自己在移动端开发这行摸爬了快十年&#xff0c;从早期的塞班、Windows Mobile&#xff0c;到后来的Android和iOS&#xff0c;再到这两年一头扎进鸿蒙的生态&#xff0c;确实感觉到这个领域正…

作者头像 李华
网站建设 2026/10/18 7:39:41

Flutter鸿蒙适配下的私有化包管理仓库smartpub设计与实践

最近团队在忙一件让所有 Flutter 基建同学都头大的事&#xff1a;把组件库体系从“一套 Android/iOS 走天下”改造成“Android、iOS、鸿蒙三端统一供给”。组件本身改起来倒还好&#xff0c;真正卡住进度的&#xff0c;是依赖分发和版本治理。同一个组件在 Android 上能编过&am…

作者头像 李华
网站建设 2026/10/18 7:37:19

上线漏测的根因与对策:从用例设计到复盘改进

项目上线当晚&#xff0c;群里消息炸了&#xff1a;用户反馈下单后库存没扣减&#xff0c;或者扣了两次。开发查了半小时&#xff0c;定位到“并发请求下同一个订单被重复提交&#xff0c;库存被减了两次”。然后所有人的目光转向测试&#xff1a;“这个场景你们没测吗&#xf…

作者头像 李华
网站建设 2026/10/18 7:34:53

Harness Engineering:大模型应用落地的核心工程架构

1. 为什么现在大家都在聊 Harness Engineering最近在几个技术社区里&#xff0c;关于大模型应用架构的讨论越来越集中到一个词上&#xff1a;Harness Engineering。说实话&#xff0c;第一次看到这个词的时候&#xff0c;我也愣了一下——这又是什么新瓶装旧酒的概念&#xff1…

作者头像 李华