CSS 的弹性布局

作者:hubenchang0515日期:2025/11/2

#CSS 的弹性布局

在此之前,我们写的页面上元素是按照先后顺序排列的,块元素总是占据一行,不受我们控制。 例如之前 语义化 章节中的示例代码中,aside 块作为侧边栏,却并没有显示在侧边,而是单独占据一行。

本节将学习 CSS 中最常用的布局方式——弹性布局,它可以方便地控制容器内项目的排列、对齐和分布方式。

通过将一个元素样式的 display 属性设为 flex,可以将该元素设为弹性布局的 容器, 容器的直接子元素将不再占据一行。

示例:

1<div style="display:flex; height:100px;">
2    <main style="background-color:#212121; color:cyan;">
3        main
4    </main>
5    <aside style="background-color:#666; color:yellow;">
6        aside
7    </aside>
8</div>
9

弹性布局

    main


    aside

#主轴和交叉轴

弹性容器中,默认水平方向为主轴,竖直方向为交叉轴,子元素在主轴上依次排列。

可以通过容器的 flex-direction 属性改变方向:

  • row - 水平方向为主轴,竖直方向为交叉轴
  • column - 竖直方向为主轴,水平方向为交叉轴

示例:

1<div style="display:flex; flex-direction:column; height:100px;">
2    <main style="background-color:#212121; color:cyan;">
3        main
4    </main>
5    <aside style="background-color:#666; color:yellow;">
6        aside
7    </aside>
8</div>
9

flex-direction:column

    main


    aside

这个示例将弹性布局的主轴设为了数值方向;相应的,交叉轴为水平方向。

#flex-grow 和 flex-shrink

当子元素的总长度小于主轴长度时,可以给子元素的样式添加 flex-grow 使其长度增加。

这个属性的值表示当弹性容器没有被占满时,子元素增加的长度占剩余长度的比例。

下面这个示例将 <main> 元素的 flex-grow 值设为 5,<aside>flex-grow 元素设为 1。

因此剩余空间的 将分配给 <main> 元素, aside 元素。

1<div style="display:flex; height:100px;">
2    <main style="flex-grow:5; background-color:#212121; color:cyan;">
3        main
4    </main>
5    <aside style="flex-grow:1; background-color:#666; color:yellow;">
6        aside
7    </aside>
8</div>
9

HTML

    main


    aside

相似的,当子元素的总长度大于主轴长度时,可以给子元素的样式添加 flex-shrink 使其长度减少。

这个属性的值表示当弹性容器内容溢出时,子元素减少的长度占溢出长度的比例。

#主轴上的对齐方式

默认情况下,子元素在容器主轴上向起始边缘对齐,可以通过容器的 justify-content 属性修改对齐方式。

  • start - 子元素在容器主轴上向起始边缘对齐
  • end - 子元素在容器主轴上向末端边缘对齐
  • center - 子元素在容器主轴上居中对齐
  • space-between - 子元素在容器主轴均匀分布,两端不留空
  • space-around - 子元素在容器主轴均匀分布,两端留空为间隔的一半
  • space-evenly - 子元素在容器主轴均匀分布,两端留空和间隔一致

下面的示例可以清晰的查看这六种对齐方式的差异。

1<div style="display:flex; justify-content:start; height:100px; background-color:#212121;">
2    <div style="background-color:red;color:white;">item</div>
3    <div style="background-color:green;color:white;">item</div>
4    <div style="background-color:blue;color:white;">item</div>
5</div>
6
7<div style="display:flex; justify-content:end; height:100px; background-color:#212121;">
8    <div style="background-color:red;color:white;">item</div>
9    <div style="background-color:green;color:white;">item</div>
10    <div style="background-color:blue;color:white;">item</div>
11</div>
12
13<div style="display:flex; justify-content:center; height:100px; background-color:#212121;">
14    <div style="background-color:red;color:white;">item</div>
15    <div style="background-color:green;color:white;">item</div>
16    <div style="background-color:blue;color:white;">item</div>
17</div>
18
19<div style="display:flex; justify-content:space-between; height:100px; background-color:#212121;">
20    <div style="background-color:red;color:white;">item</div>
21    <div style="background-color:green;color:white;">item</div>
22    <div style="background-color:blue;color:white;">item</div>
23</div>
24
25<div style="display:flex; justify-content:space-around; height:100px; background-color:#212121;">
26    <div style="background-color:red;color:white;">item</div>
27    <div style="background-color:green;color:white;">item</div>
28    <div style="background-color:blue;color:white;">item</div>
29</div>
30
31<div style="display:flex; justify-content:space-evenly; height:100px; background-color:#212121;">
32    <div style="background-color:red;color:white;">item</div>
33    <div style="background-color:green;color:white;">item</div>
34    <div style="background-color:blue;color:white;">item</div>
35</div>
36

justify-content:start

item


item


item

justify-content:end

item


item


item

justify-content:center

item


item


item

justify-content:space-between

item


item


item

justify-content:space-around

item


item


item

justify-content:space-evenly

item


item


item

#交叉轴上的对齐方式

默认情况下,子元素在容器交叉轴上两端对齐,即占满整个交叉轴。可以通过容器的 align-items 属性修改对齐方式。

  • stretch - 子元素在容器交叉轴上两端对齐
  • start - 子元素在容器交叉轴上向起始边缘对齐
  • end - 子元素在容器交叉轴上向末端边缘对齐
  • center - 子元素在容器交叉轴上居中对齐

下面的示例可以清晰的查看这四种对齐方式的差异。

1<div style="display:flex; align-items:stretch; height:100px; background-color:#212121;">
2    <div style="background-color:red;color:white;">item</div>
3    <div style="background-color:green;color:white;">item</div>
4    <div style="background-color:blue;color:white;">item</div>
5</div>
6
7<div style="display:flex; align-items:start; height:100px; background-color:#212121;">
8    <div style="background-color:red;color:white;">item</div>
9    <div style="background-color:green;color:white;">item</div>
10    <div style="background-color:blue;color:white;">item</div>
11</div>
12
13<div style="display:flex; align-items:end; height:100px; background-color:#212121;">
14    <div style="background-color:red;color:white;">item</div>
15    <div style="background-color:green;color:white;">item</div>
16    <div style="background-color:blue;color:white;">item</div>
17</div>
18
19<div style="display:flex; align-items:center; height:100px; background-color:#212121;">
20    <div style="background-color:red;color:white;">item</div>
21    <div style="background-color:green;color:white;">item</div>
22    <div style="background-color:blue;color:white;">item</div>
23</div>
24

align-items:stretch

item


item


item

align-items:start

item


item


item

align-items:end

item


item


item

align-items:center

item


item


item

#换行

默认情况下,当子元素的总长度大于主轴长度时,子元素会溢出显示。 可以通过容器的 flex-wrap 属性让溢出的元素换行。

  • nowrap - 不换行
  • wrap - 当空间不足时自动换行
  • wrap-reverse - 当空间不足时自动换行,并且行的顺序逆转

下面的示例中容器宽度在不断变化,可以清晰的查看这三种方式的差异。

1<div style="display:flex; align-items:center; flex-wrap:nowrap; background-color:#212121;">
2    <div style="background-color:red;color:white; width:80px;">item</div>
3    <div style="background-color:green;color:white; width:80px;">item</div>
4    <div style="background-color:blue;color:white; width:80px;">item</div>
5    <div style="background-color:orange;color:white; width:80px;">item</div>
6    <div style="background-color:purple;color:white; width:80px;">item</div>
7    <div style="background-color:cyan;color:white; width:80px;">item</div>
8</div>
9
10<div style="display:flex; align-items:center; flex-wrap:wrap; background-color:#212121;">
11    <div style="background-color:red;color:white; width:80px;">item</div>
12    <div style="background-color:green;color:white; width:80px;">item</div>
13    <div style="background-color:blue;color:white; width:80px;">item</div>
14    <div style="background-color:orange;color:white; width:80px;">item</div>
15    <div style="background-color:purple;color:white; width:80px;">item</div>
16    <div style="background-color:cyan;color:white; width:80px;">item</div>
17</div>
18
19<div style="display:flex; align-items:center; flex-wrap:wrap-reverse; background-color:#212121;">
20    <div style="background-color:red;color:white; width:80px;">item</div>
21    <div style="background-color:green;color:white; width:80px;">item</div>
22    <div style="background-color:blue;color:white; width:80px;">item</div>
23    <div style="background-color:orange;color:white; width:80px;">item</div>
24    <div style="background-color:purple;color:white; width:80px;">item</div>
25    <div style="background-color:cyan;color:white; width:80px;">item</div>
26</div>
27

flex-wrap:nowrap

flex-wrap:nowrap


    item


    item


    item


    item


    item


    item

flex-wrap:wrap

flex-wrap:nowrap


    item


    item


    item


    item


    item


    item

flex-wrap:wrap-reverse

flex-wrap:nowrap


    item


    item


    item


    item


    item


    item

#行在交叉轴上的对齐方式

通过容器的 align-content 属性设置行在交叉轴上的对齐方式。

  • start - 行在容器交叉轴上向起始边缘对齐
  • end - 行在容器交叉轴上向末端边缘对齐
  • center - 行在容器交叉轴上居中对齐
  • space-between - 行在容器交叉轴上均匀分布,两端不留空
  • space-around - 行在容器交叉轴上均匀分布,两端留空为间隔的一半
  • space-evenly - 行在容器交叉轴上均匀分布,两端留空为和间隔一致

下面的示例可以清晰的查看这六种对齐方式的差异。

1<div style="display:flex; align-content:start; align-items:start; flex-wrap:wrap; height:100px; width:80px; background-color:#212121;">
2    <div style="background-color:red;color:white; width:40px;">item</div>
3    <div style="background-color:green;color:white; width:40px;">item</div>
4    <div style="background-color:blue;color:white; width:40px;">item</div>
5</div>
6
7<div style="display:flex; align-content:end; align-items:start; flex-wrap:wrap; height:100px; width:80px; background-color:#212121;">
8    <div style="background-color:red;color:white; width:40px;">item</div>
9    <div style="background-color:green;color:white; width:40px;">item</div>
10    <div style="background-color:blue;color:white; width:40px;">item</div>
11</div>
12
13<div style="display:flex; align-content:center; align-items:start; flex-wrap:wrap; height:100px; width:80px; background-color:#212121;">
14    <div style="background-color:red;color:white; width:40px;">item</div>
15    <div style="background-color:green;color:white; width:40px;">item</div>
16    <div style="background-color:blue;color:white; width:40px;">item</div>
17</div>
18
19<div style="display:flex; align-content:space-between; align-items:start; flex-wrap:wrap; height:100px; width:80px; background-color:#212121;">
20    <div style="background-color:red;color:white; width:40px;">item</div>
21    <div style="background-color:green;color:white; width:40px;">item</div>
22    <div style="background-color:blue;color:white; width:40px;">item</div>
23</div>
24
25<div style="display:flex; align-content:space-around; align-items:start; flex-wrap:wrap; height:100px; width:80px; background-color:#212121;">
26    <div style="background-color:red;color:white; width:40px;">item</div>
27    <div style="background-color:green;color:white; width:40px;">item</div>
28    <div style="background-color:blue;color:white; width:40px;">item</div>
29</div>
30
31<div style="display:flex; align-content:space-evenly; align-items:start; flex-wrap:wrap; height:100px; width:80px; background-color:#212121;">
32    <div style="background-color:red;color:white; width:40px;">item</div>
33    <div style="background-color:green;color:white; width:40px;">item</div>
34    <div style="background-color:blue;color:white; width:40px;">item</div>
35</div>
36

align-content:start

item


item


item

align-content:end

item


item


item

align-content:center

item


item


item

align-content:space-between

item


item


item

align-content:space-around

item


item


item

align-content:space-evenly

item


item


item

CSS 的弹性布局》 是转载文章,点击查看原文


相关推荐


介绍一个小工具-pake
字节逆旅2025/10/31

今天我安利的这个神器,非常有意思!它叫 Pake(发音类似 "pack")。 Pake 是个啥? 简单说,Pake 就一个命令行小工具,网页的“一键打包机”。你给它一个网址,它“嗖”地一下,就能帮你生成一个跨平台的桌面 App。 它最牛的地方有三点: 轻到离谱! 它用 Rust 语言写的,底层是 Tauri 框架。打包出来的 App 只有几 MB,对比那些动辄上百 MB 的“electron”,简直是羽毛对大象。 快如闪电! 启动速度、运行流畅度都堪比原生应用,内存占用也极低。 小白友好!


Python爬虫抓取豆瓣TOP250数据
蒋星熠Jaxonic2025/10/28

目录 一、开门见山,探究网页结构 二、确定思路 1.拿到页面源代码/响应 2.编写正则,提取页面数据 3.保存数据 三、步骤详解 1.初步爬取 2.绕过反爬 3.编写正则表达式与正则匹配 4.翻页爬取 5.注意点 🌟 Hello,我是蒋星熠Jaxonic! 🌈 在浩瀚无垠的技术宇宙中,我是一名执着的星际旅人,用代码绘制探索的轨迹。 🚀 每一个算法都是我点燃的推进器,每一行代码都是我航行的星图。 🔭 每一次性能优化都是我的天文望远镜,每一次架构


仓颉语言性能优化指南:实测对比,让鸿蒙应用运行效率提升 40%
Jinkxs2025/10/25

👋 大家好,欢迎来到我的技术博客! 💻 作为一名热爱 Java 与软件开发的程序员,我始终相信:清晰的逻辑 + 持续的积累 = 稳健的成长。 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🎯 本文将围绕一个仓颉相关话题展开,希望能为你带来一些启发或实用的参考。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 仓颉语言性能优化指南:实测对比,让鸿蒙应用运行效率提升 40% 🚀🌐 仓颉语言与鸿蒙生


http 状态码
扁豆的主人2025/10/23

常见响应码 5字头:服务器错误 500 Internal Server Error 一般来说,是由于服务器端的源代码出现错误导致的。 501 Not Implemented 服务器不支持当前请求所需要的某个功能。 502 Bad Gateway 网关错误,服务器尝试执行请求,但从上游无服务收到无效响应。 503 Service Unavailable 服务器当前无法处理请求,由于超载或停机维护。 504 Gateway Timeout 网关超时,请求处理时间超过了


Edge浏览器安装Vue.js devtools插件后F12开发者工具有时不显示Vue标签页
cgs1082025/10/22

Edge 浏览器插件下载地址:https://microsoftedge.microsoft.com/addons/search/vue?hl=en-US 安装 Vue.js devtools 和 Vue Devtools Unlocker,如下图:


2025年远程控制软件横评:UU远程、ToDesk、向日葵
攻城狮7号2025/10/20

> 💡 原创经验总结,禁止AI洗稿!转载需授权 > 声明:本文所有观点均基于多个远控软件实测总结,数据说话,拒绝空谈! public class SelfIntroduction { public static String introduceMyself() { String name = "攻城狮7号"; String role = "Tech Enthusiast"; String[] likes = {"coding", "


GPT-2 中的 Pre-Layer Normalization (Pre-LN) 架构详解
mwq301232025/10/19

GPT-2 中的 Pre-Layer Normalization (Pre-LN) 架构详解 1. 概述 Pre-Layer Normalization (Pre-LN) 是一种对原始 Transformer 架构的重要改进。顾名思义,它的核心思想是将层归一化 (Layer Normalization) 操作从残差连接之后移动到每个子层(如自注意力、前馈网络)的之前。 这一看似微小的结构调整,却极大地提升了深度 Transformer 模型训练的稳定性,有效缓解了梯度消失或爆炸的问题。GPT-2


管理 Claude code上下文:实用手册
是魔丸啊2025/10/18

转载 Anthropic 的 Claude 代码和更广泛的 Claude 系列现在为开发者提供了前所未有的控制能力,可以控制模型看到的内容量和推理深度。最近的产品更新(特别是 Sonnet 4 的 100 万 token 上下文窗口和 Claude 扩展的"思考"控制)使上下文管理变得更加强大和重要:您可以在单个会话中处理整个代码库——但前提是您需要有意地构建提示、文件和会话状态。本文解释了如何可靠地管理 Claude 代码的上下文:命令和用法、思考预算控制、CLAUDE.md 模式、子代理工作


Nx带来极致的前端开发体验——任务缓存
西陵2025/10/16

前言 前面我们讲过,为了提高项目的构建速度,社区将大部分的精力放到构建工具上,例如rspack、esbuild、swc等,利用语言优势提升构建速度。而像 webpack 这种老牌构建工具则将优化方向放在缓存上,但是他缓存的是构建流程中的中间结果,例如每个文件经过 loader 转换后的产物。 而本章节要介绍的任务缓存是指缓存任务执行之后的产物,例如构建或者测试任务,对于一个 package 来说,如果他的代码没发生改变,下一次执行 build 命令时可以直接读取上一次的构建产物,而无需再次进行构


excel中关联word邮件合并使用
山西璟绘地理信息有限责任公司2025/10/15

你在日上的工作中是不是需要批量的输出格式相同但是局部需要替换的文档,如果是几份就是人工修改一下,但是如果你面对的石海量的文档,你还会人工编辑吗?首先时间不容许,其次性价比特别低,如果站在打工摸鱼的角度无可厚非,但是如果你真的愿意提高效率,接下来讲的就是你需要的,开整。 这个就是典型的使用场景: 变量: 1、统一社会信用代码 2、名称 3、原法定代表人 4、现法定代表人 5、行政村盖章落款 6、日期 准备工作: 1、首先做好一个模板,如上图所示 2、建立自己的数据库,一般

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2025 聚合阅读