Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)前言我们知道 网页展示就好比一个个盒子堆叠在一起 通过调整盒子的大小 位置 样式等 形成了各式各样的页面 当我们在开发一个页面的时候 我们常规的做法可能是 搭建框架 划分区域 定制排版 调整位置 嵌入内容 微调与增添样式 今天所介绍的是基础且关键的一环布局排版 其中 展开布局中常用的技术 Flex 布局 Flex 布局是什么 Flex 是 FlexibleBox 的缩写 意为 弹性布局 用来为盒状模型提供最大的灵活性 任何一个容器都可以指定为 Flex 布局 box

目录​​​​​​​

前言

Flex 布局是什么?

Flex 简介

Flex 容器属性

Flex 基本使用

场景一

flex-direction

场景二

justify-content

align-items

flex-wrap

场景三


前言

我们知道,网页展示就好比一个个盒子堆叠在一起,通过调整盒子的大小、位置、样式等,形成了各式各样的页面。当我们在开发一个页面的时候,我们常规的做法可能是:搭建框架、划分区域、定制排版、调整位置、嵌入内容、微调与增添样式。

布局排版是页面基础且关键的一环。其中,常用的自适应布局技术:Flex布局。

Flex 布局是什么?

Flex 简介

Flex 是 Flexible Box 的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。

任何一个容器都可以指定为 Flex 布局。

.box { display: flex; }

行内元素也可以使用 Flex 布局。

.box { display: inline-flex; }

Webkit 内核的浏览器,必须加上-webkit前缀。

.box { display: -webkit-flex; /* Safari */ display: flex; }

采用 Flex 布局的元素,称为 Flex 容器(flex container),简称”容器”。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称”项目”。

Flex 容器属性

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content

接下来,咱们通过具体实例介绍Flex属性的使用与其在布局上达成的效果。 

Flex 基本使用

场景一

整个页面分为两大部分,我们希望左边部分作为菜单栏,宽度固定;右边部分作为内容展示区,宽度自适应且占满剩余部分。

类似如下布局

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

常规方式:浮动(float)

首先,将框架搭起来

 
   

为了方便查看效果,给每个盒子设置大小与添加背景色

初始页面展示效果

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

现在,使用浮动(float),使左边跟右边并列布局

页面展示效果

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

此时,再将右边的宽度通过 calc() 方法计算,实现右边自适应

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

缩小窗口,查看效果

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

此时,实现了场景一的需求,效果看起来也还OK。但是有个问题,现在的这个布局使用的是浮动,即代表着这两个块脱离了文档流,如果页面有其他布局区域,如头部导航栏、底部关于栏、甚至是其他主内容区,这时候我们可能就需要花点时间去清除浮动带来的影响,或者是增加更多的浮动来完成其他区域的布局。

那么有没有一种布局是既可以不使用浮动(或者说是不脱离文档流),又能实现上面的布局呢?答案是肯定的,可以使用Flex(弹性布局),且写起来也更简便。

现在,我们将浮动样式去掉,在包含左右两个盒子的父盒子加上 display:flex,表示使用弹性布局

此时查看页面效果

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

实现右边部分自适应只需要为右边添加样式 flex:1 即可

.right-content { box-sizing: border-box; width: 200px; height: 200px; background: rgb(68, 133, 255); /* 表示该盒子自动占满剩余空间(往下展开) */ flex: 1; }

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

此时左右两个盒子并列布局,且右边自适应,why?以下详细展开。

flex-direction

flex-direction属性决定主轴的方向,即项目(或者说是子盒子)的排列方向。

它可能有4个值。

  • row(默认值):主轴为水平方向,起点在左端。
  • row-reverse:主轴为水平方向,起点在右端。
  • column:主轴为垂直方向,起点在上沿。
  • column-reverse:主轴为垂直方向,起点在下沿。

布局图示

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

上面例子不设置该属性,因此为默认值(row),即主轴水平、从左到右排列。

场景二

整个页面分为多个部分,我们希望这些部分是并列布局,且宽度自适应。

页面布局如下(以三个部分举例,若更多部分做法一致)

 
   

初始样式(同样,父盒子使用flex布局)

初始页面效果

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

现在,我们三个子盒子的宽度是固定的,因此实现不了自适应,我们可以使用 %(百分比)方式设置各个子盒子相对于父盒子所占的百分比

页面展示效果

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

缩小查看页面展示效果

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

注意观察,此时三个子盒子的宽度总和等于父盒子的宽度,即30% + 40% + 30% = 100%。

如果三个盒子的宽度占比总和小于100%,即都为30%,页面效果如下

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

此时页面会多出空的部分,我们可以将这部分利用起来。

justify-content

该属性定义了项目在主轴上的对齐方式。

它可能取5个值,具体对齐方式与轴的方向有关。下面假设主轴为从左到右。

此时主轴(flex-direction)为默认的row,即水平方向,从左到右。

  • flex-start(默认值):左对齐(即上面页面展示效果)
  • flex-end:右对齐
  • center: 居中
  • space-between:两端对齐,项目之间的间隔都相等。
  • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

接下来我们一一展示属性达成的效果

flex-start

如上图

flex-end

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

center

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

space-between(注意空白部分分配情况)

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

space-around(注意空白部分分配情况)

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

以上就是justify-content不同取值的布局效果,最后两个取值就是如何分配剩余的空白部分。

还有一个与justify-content相似的属性是align-items。

align-items

该属性定义项目在交叉轴上如何对齐。(如果主轴为水平,那么交叉轴就是垂直)

它可能取5个值。具体的对齐方式与交叉轴的方向有关,下面假设交叉轴从上到下。

  • flex-start:交叉轴的起点对齐。
  • flex-end:交叉轴的终点对齐。
  • center:交叉轴的中点对齐。
  • baseline: 项目的第一行文字的基线对齐。
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

flex-startflex-endcenter与justify-content中展示效果类似,只是一个是水平方向一个是垂直方向。各属性布局效果如下:

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

回到场景二,如果三个盒子的宽度占比总和大于100%,页面效果又是怎样的?

现在,调整父盒子的宽度为1000px

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

如果子盒子为40%,宽度理应为400px,但是有下图可知,宽度小于400px了 

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

此时宽度被压缩了,其实此时是按照比例缩小了,由之前的按照100份来占比,现在相当于按照1100份来占比(40% 40% 30%),此时的宽度就是1000 * (40/110) 大概就是363.64。

那如果我们就想宽度是那么多,不能有误差,该怎么办呢?

flex-wrap

默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,如果一条轴线排不下,如何换行。在宽度总和超出父盒子的宽度时,希望保持每个子盒子的准确宽度,那就只能分行排列(一行排列会被按比例压缩,如上图)。

它可能有3个值。

  • nowrap(默认值):不换行。
  • wrap:换行。
  • wrap-reverse:换行,第一行在下方。 

分别对应以下图 

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

此时设置flex-wrap:wrap,允许换行 

.main-content { width: 100%; height:100%; background: #72f884; /* 使用flex弹性布局 */ display: flex; /* 使用flex-wrap,wrap为允许换行,nowrap为不允许换行 */ flex-wrap: wrap; }

再次查看页面展示效果

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)换行之后子盒子的宽度正常,不被压缩了。 

场景三

现在希望将场景一与场景二结合,即在一个页面中分为左右两大部分,左边部分是菜单栏(宽度固定200px);右边部分是内容展示区,宽度自适应且占满,内容展示区里面又分为三部分,每个部分宽度为该区域的30%。

1、搭建左右两大部分

html

 
   

css

页面展示效果

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

2、布局右边部分

里面分为三部分(用一个新的div包裹,结构分明)

html

 
   

css

.right-content-item { width: 100%; height: 100%; } .right-content-item-list { width: 30%; height: 30%; background: rgb(242, 245, 37); }

页面展示效果

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

此时右边部分(新增的div)内容区使用flex布局

.right-content-item { width: 100%; height: 100%; display: flex; }

页面展示效果

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

此时使用justify-content属性

.right-content-item { width: 100%; height: 100%; display: flex; justify-content: space-around; }

页面展示效果

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

缩小窗口,查看页面展示效果

Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)

无论窗口放大或缩小,都能实现自适应。在该例子中,可以知道,flex布局里面的子盒子依然可以使用flex布局,即可以嵌套使用,可用该特点结合flex中的各个属性实现多种自适应布局场景。

最后flex-flow跟align-content不展开,可以自行了解。

参考:

Flex 布局教程:语法篇 – 阮一峰的网络日志Css 弹性布局(Flex)详细介绍(Flex 属性详解、场景分析)https://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203118.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午10:32
下一篇 2026年3月19日 下午10:33


相关推荐

  • Mac的pycharm中快捷键command+a不能全选「建议收藏」

    Mac的pycharm中快捷键command+a不能全选「建议收藏」问题:今天在pycharm中想使用快捷键全选结果:command+a的时候不是全选而是showusages原因:是因为安装了ideavim插件解决方法:卸载掉ideavim插件找到这个插件ideavim卸载uninstall卸载之后提示重启,重启就ok了。…

    2022年5月9日
    136
  • 好玩的智力小游戏(海盗分金)

    好玩的智力小游戏(海盗分金)

    2022年1月25日
    41
  • python和c++哪个好_python地名识别

    python和c++哪个好_python地名识别Ctrl+N按文件名搜索py文件ctrl+n可以搜索py文件勾选上面这个框可以搜索工程以外的文件Ctrl+shift+N按文件名搜索所有类型的文件Ctrl+shift+N可以搜索py文件,也可以搜索其它类型的文件。除了搜索不同类型的文件,Ctrl+shift+N还有一个强大之处是可以搜索路径,只需要在你搜索的词前面或后面加上/ctrl+shift+f全局字符串搜索这种搜索的名字叫做”fin…

    2022年8月28日
    4
  • ELF文件格式简介「建议收藏」

    ELF文件格式简介「建议收藏」  简单了解下ELF文件的格式。1简介  可执行与可链接格式(ExecutableandLinkableFormat,ELF),常被称为ELF格式,是一种用于可执行文件、目标代码、共享库和核心转储(coredump)的标准文件格式,一般用于类Unix系统,比如Linux,Macox等。ELF格式灵活性高、可扩展,并且跨平台。比如它支持不同的字节序和地址范围,所以它不会不兼容某一特别的CPU或指令架构。这也使得ELF格式能够被运行于众多不同平台的各种操作系统所广泛采纳。  E.

    2025年7月30日
    5
  • MySQL数据库基础知识_Mysql教程

    MySQL数据库基础知识_Mysql教程一、数据库基础知识在任何一个关系数据库中,第一范式是对关系模式的基本要求,不满足第一范式的数据库就不是关系数据库第二范式定义:若关系模式R∈1NFR\in1NF,且关系模式R的每个非主属性完全函数依赖于码(候选码),则R∈2NFR\in2NF第三范式定义:在2NF基础上,若一个关系模式中所有非主属性完全依赖于码并且不传递依赖于码,则R∈3NFR\in3NFBC范式定义:设关系模式R(U,F)

    2022年8月22日
    7
  • Linux使用rpm命令卸载软件[通俗易懂]

    Linux使用rpm命令卸载软件[通俗易懂]window上面要卸载一个软件很容易,在系统软件管理里面或者通过第三应用工具,比如360软件管理。如果是Linux需要卸载一个软件应该怎么样操作??rpm-q-a#查询所有已安装的软件-qquery查询-aall所有查询所有安装的软件[root@cdh1~]#rpm-q-agnome-session-xsession-2.28.0-18.el6.x86_64m17n-contrib-assamese-1.1.10-4.el6_1.1.noarchm17n-con

    2025年9月23日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号