CSS Flex布局

前言

Flex布局(弹性盒子布局) 是一种用于在容器中进行灵活和自适应布局的CSS布局模型。通过使用Flex布局,可以更方便地实现各种不同尺寸和比例的布局,使元素在容器内自动调整空间分配。


目录

容器属性

🍁display属性

🍁flex-direction属性

🍁flex-wrap属性

🍁flex-flow属性

🍁justify-content属性

🍁align-items属性

🍁align-content属性

项目属性

🍀order属性

🍀flex-basis属性

🍀flex-grow属性

🍀flex-shrink属性

🍀flex属性

🍀align-self属性


Flex-组成

Flex布局由以下几个主要组成部分组成:

  1. 容器(Container):采用Flex布局的父元素即为容器。
  2. 项目(Item):容器内的子元素即为Flex项目,也称为Flex项。
  3. 主轴(Main Axis):Flex容器的主要方向被称为主轴。默认情况下,主轴的方向是从左到右(水平方向)。
  4. 侧轴/交叉轴(Cross Axis):与主轴垂直的方向被称为侧轴。默认情况下,它是从上到下(垂直方向)。

我对Flexbox布局模式的理解 - 知乎

Flex布局的相关属性:

容器属性
display指定元素作为Flex容器,并定义其内部项目的布局方式。
flex-direction指定Flex容器内项目的排列方向。
flex-wrap定义Flex容器内的项目超出一行时是否换行。
flex-flowflex-direction和flex-wrap的合并简写属性。
justify-content沿主轴方向对齐Flex容器内的项目。
align-items沿侧轴方向对齐Flex容器内的项目。
align-content在存在多行的情况下,沿侧轴方向对齐Flex容器内的行。
项目属性
order定义项目的显示顺序。数值越小,排列越靠前。
flex-basis定义项目在分配多余空间之前的基准值,默认为auto。
flex-grow定义项目在剩余空间中的放大比例。
flex-shrink定义项目在空间不足时的缩小比例。
flexflex-grow、flex-shrink、flex-basis的合并简写属性。
align-self单独设置某个项目在侧轴上的对齐方式,覆盖父容器的align-items属性。


容器属性

🍁display属性

在Flex布局中,display属性用于定义容器元素的布局类型。只有在容器元素上设置display属性并取值为flexinline-flex才能启用flex布局。

  • display: flex; 将容器元素设置为块级的Flex容器,使其内部子元素按照Flex布局规则排列。容器元素将占据一行,并根据主轴和侧轴来对齐、伸缩和分配空间
  • display: inline-flex; 将容器元素设置为行内的Flex容器,使其内部子元素按照Flex布局规则排列。容器元素将与其他行内元素在同一行内,并根据主轴和侧轴来对齐、伸缩和分配空间。

img

示例:

HTML代码:

<div class="box"><div>Item 1</div><div>Item 2</div><div>Item 3</div>
</div>

CSS代码:

/* Flex容器 */
.box {display: flex;height: 200px;border: 1px solid black;
}
/* Flex项目 */
.box div {width: 200px;height: 100px;background-color: orange;margin: 0 15px;
}

上述代码中,创建了一个Flex容器.box,里面包含三个Flex项目,并设置了其他属性方便展示效果。

预览:


🍁flex-direction属性

flex-direction属性用于修改Flex容器的主轴方向,若主轴方向修改了,那么侧轴就会相应旋转90度,Flex项目的排列方向就可能会发生改变,因为Flex项目一般沿主轴方向排列。

flex-direction属性取值:

  • row(默认值):Flex项目水平排列,从左到右。主轴为水平方向。

img


  • row-reverse:Flex项目水平排列,从右到左。主轴为水平方向,但方向与row相反。

img


  • column:Flex项目垂直排列,从上到下。主轴为垂直方向。

img


  • column-reverse:Flex项目垂直排列,从下到上。主轴为垂直方向,但方向与column相反。

img


示例:

/* Flex容器 */
.box {display: flex;flex-direction: column;height: 200px;border: 1px solid black;
}
/* Flex项目 */
.box div {width: 200px;height: 50px;background-color: orange;margin: 5px 0;
}

上述代码中,将主轴修改为垂直方向。

预览:


🍁flex-wrap属性

Flex项目会自动挤压或拉伸,默认情况下,所有Flex项目会在一行显示。flex-wrap属性用于控制Flex项目在容器内空间不足时是否换行。

img

 flex-wrap属性取值:

  • nowrap(默认值):Flex项目不换行,会尽量在一行内排列。
  • wrap:Flex项目根据需要进行换行排列,如果项目在一行内无法容纳,就会移到下一行。
  • wrap-reverse:与wrap类似,但是换行方式相反,从下往上排列。

示例:

在默认情况下,设置5个项目,将容器和项目的宽度固定,令项目总宽度超过容器宽度。

HTML代码:

<div class="box"><div>Item 1</div><div>Item 2</div><div>Item 3</div><div>Item 4</div><div>Item 5</div>
</div>

CSS代码:

/* Flex容器 */
.box {display: flex;width: 782px;height: 200px;border: 1px solid black;
}
/* Flex项目 */
.box div {width: 200px;height: 100px;background-color: orange;margin: 0 1px;
}

预览:

查看项目的实际尺寸:

可见项目实际宽度变为了154.4px,项目发生了收缩。


我们设置flex-wrap属性并取值为wrap

/* Flex容器 */
.box {display: flex;flex-wrap: wrap;width: 782px;height: 200px;border: 1px solid black;
}
/* Flex项目 */
.box div {width: 200px;height: 100px;background-color: orange;margin: 1px 1px;
}

预览:

项目超出容器宽度时发生了换行。

查看项目实际尺寸:

 项目的尺寸并没有发生改变。


🍁flex-flow属性

flex-flow属性时flex-direction和flex-wrap两个属性的缩写,用于同时设置Flex容器的主轴方向和换行方式。

语法:

flex-flow: [flex-direction] [flex-wrap];

🍁justify-content属性

justify-content属性用于设置Flex容器中Flex项目沿主轴方向的对齐方式。它会影响项目在容器内的水平位置分布。

justify-content属性取值:

  • flex-start:默认值,项目靠近容器起始边界对齐。
  • flex-end:项目靠近容器末尾边界对齐。
  • center:项目在容器中居中对齐。
  • space-between:项目均匀分布在容器内,首个项目靠近容器起始边界,最后一个项目靠近容器末尾边界,项目之间的间隔相等。
  • space-around:项目均匀分布在容器内,项目两侧的间隔相等,并且项目与容器边界之间的间隔是项目之间间隔的一半。
  • space-evenly:项目均匀分布在容器内,包括项目与容器边界之间的间隔均等。

img

示例:

/* Flex容器 */
.box {display: flex;justify-content: space-evenly;width: 782px;height: 200px;border: 1px solid black;
}
/* Flex项目 */
.box div {width: 200px;height: 100px;background-color: orange;margin: 1px 1px;
}

我设置了三个项目,并让它们沿主轴均匀排列,项目与容器之间间距相等。

预览:

通过调整justify-content属性的值,可以实现不同的项目对齐效果,使布局更加灵活和多样化。 


🍁align-items属性

align-items属性用于设置Flex容器中Flex项目沿侧轴(交叉轴)方向的对齐方式。它会影响项目在容器内的垂直位置分布。

align-items属性取值:

  • stretch:默认值,项目被拉伸以填满容器的整个交叉轴空间。

img


  • flex-start:项目靠近交叉轴起始边界对齐。

img


  • flex-end:项目靠近交叉轴末尾边界对齐。

img


  •  center:项目在交叉轴中居中对齐。

img


  •  baseline:项目基线与容器的基线对齐。

img


示例:

/* Flex容器 */
.box {display: flex;align-items: center;width: 782px;height: 200px;border: 1px solid black;
}
/* Flex项目 */
.box div {width: 200px;height: 100px;background-color: orange;margin: 1px 1px;
}

 我设置了三个项目,它们将在交叉轴中居中对齐。

预览:


🍁align-content属性

align-content属性用于设置Flex容器中多行项目在交叉轴方向的对齐方式。它适用于具有多行项目的布局情况,并且只在容器存在多行时才会生效。

align-content属性取值:

  • stretch:默认值,项目被拉伸以填满容器的整个交叉轴空间。
  • flex-start:多行项目靠近交叉轴起始边界对齐。
  • flex-end:多行项目靠近交叉轴末尾边界对齐。
  • center:多行项目在交叉轴中居中对齐。
  • space-between:多行项目均匀分布在容器内,首行项目靠近交叉轴起始边界,末行项目靠近交叉轴末尾边界,行之间的间隔相等。
  • space-around:多行项目均匀分布在容器内,行与行之间以及首行和末行与容器边界之间的间隔都相等。
  • space-evenly:多行项目均匀分布在容器内,行之间的间隔和首行与容器起始边界以及末行与容器末尾边界之间的间隔均相等。

align-items属性不同的是,align-content属性是以行为单位进行对齐。

示例:

/* Flex容器 */
.box {display: flex;flex-wrap: wrap;align-content: space-evenly;width: 782px;height: 400px;border: 1px solid black;
}
/* Flex项目 */
.box div {width: 200px;height: 100px;background-color: orange;margin: 1px 1px;
}

为了更好展现效果,我设置了多个盒子,并让它们换行排列,在上述代码中,多行项目将沿交叉轴均匀分布在容器内。

预览:


项目属性

🍀order属性

order属性用于设置Flex容器内项目的排列顺序。它可以改变项目的默认显示顺序,使其按照指定的顺序布局。

默认情况下,Flex容器内的项目会按照它们在源代码中出现的顺序布局,即order的默认值为0。通过设置order属性,可以改变项目的显示顺序。

order属性的说明:

  • order: <integer>:用整数值表示项目的显示顺序,值越小的项目会优先显示。默认值为0。

示例:

HTML代码:

<div class="box"><div>Item 1</div><div>Item 2</div><div>Item 3</div><div>Item 4</div><div>Item 5</div><div>Item 6</div>
</div>

CSS代码:

/* Flex容器 */
.box {display: flex;width: 782px;height: 200px;border: 1px solid black;
}
/* Flex项目 */
.box div {width: 100px;height: 100px;background-color: orange;margin: 1px 1px;
}

预览:

默认情况下,项目按照它们在源代码中出现的顺序进行布局。


将第2个项目的order属性值设为1:

.box div:nth-child(2) {order: 1;
}

预览:

因为项目2比其他项目具有更高的order值,所以它将在其他项目之后显示。

 请注意以下几点:

  • order只影响项目的显示顺序,并不改变布局结构,即实际的占位位置仍然按照源代码中的顺序。
  • order可以接受负值和小数值,但大部分情况下使用整数即可满足需求。
  • 对于具有相同order值的项目,它们将按照源代码中的顺序来确定显示顺序。

🍀flex-basis属性

flex-basis属性用于设置Flex项目的初始主轴尺寸(主轴方向上的宽度或高度)。它确定了在分配多余空间之前,项目占据的空间大小。

flex-basis属性取值:

  • auto:默认值。项目将根据其内容自动决定初始尺寸。
  • <length>:可以使用具体的长度值(如像素、百分比等)来定义项目的初始尺寸。
  • content:项目的初始尺寸将根据内容来决定,适用于项目希望自适应内容而不指定固定尺寸的情况。

示例:

/* Flex容器 */
.box {display: flex;width: 782px;height: 200px;border: 1px solid black;
}
/* Flex项目 */
.box div {flex-basis: 120px;background-color: orange;margin: 1px 1px;
}

上述代码中,将项目的初始主轴尺寸(宽度)设为120px,高度未设置(默认伸展)。

预览:

对于flex-basis属性值与宽度(或高度) ,width属性用于设置元素的具体宽度(直接确定的宽度,不受其他flex属性影响),其区别本文不再深究。


🍀flex-grow属性

flex-grow属性用于控制Flex项目在主轴方向上的伸展能力。它接受一个非负数值作为参数,表示项目在分配多余空间时所占的比例。

flex-grow属性取值

  • 0(默认值):项目不进行伸展,即使有可用空间。

img


  •  正数(大于0):项目将根据其值相对于其他项目进行伸展。

img

元素伸展的计算方法:

上图中,容器宽度为200px,容器剩余宽度为50px,按照flex-grow值的比例分配剩余宽度,元素1分配到的宽度=50*3/(3+2)=30px,所以伸展后宽度为80px。


🍀flex-shrink属性

flex-shrink属性用于设置Flex项目在空间不足时的收缩能力。它接受一个非负数值作为参数,表示项目在可用空间不足时相对于其他项目收缩的比例。

默认情况下,所有项目的flex-shrink值为1,即可以等比例收缩。flex-shrink的值越大,项目收缩时所占比例越大。如果某个项目的flex-shrink值为0,则该项目不会在空间不足时进行收缩,保持其原始大小。

示例:

img

上图中,所有项目的flex-shrink值为1,即它们按比例均匀地收缩。

元素收缩的计算方法:

容器宽度-项目总宽度=-70px,记作容器剩余宽度为-70px,

缩小因子的分母:1*50 + 1*100 + 1*120 = 270 (1为各元素flex-shrink的值)

元素1的缩小因子:1*50/270

元素1的缩小宽度为缩小因子乘于容器剩余宽度:1*50/270 * (-70)

元素1最后则缩小为:50px + (1*50/270 *(-70)) = 37.03px


🍀flex属性

flex属性是一个复合属性,用于设置FLex项目的三个相关属性:flex-growflex-shrinkflex-basis(放大、收缩和初始主轴尺寸)。

语法:

flex: [flex-grow] [flex-shrink] [flex-basis];

🍀align-self属性

align-self属性用于在flex容器中单独设置某个flex项目的对齐方式,它可以覆盖父容器的align-items属性。

align-self属性取值:

  • auto:默认值,继承父容器的align-items属性。
  • flex-start:项目对齐在交叉轴的起始位置。
  • flex-end:项目对齐在交叉轴的终点位置。
  • center:项目在交叉轴上居中对齐。
  • baseline:项目在交叉轴上以基线对齐。
  • stretch:默认值,如果项目未设置高度或设为auto,则会拉伸以填满容器的高度。

示例:

/* Flex容器 */
.box {display: flex;align-items: center;width: 782px;height: 200px;border: 1px solid black;
}
/* Flex项目 */
.box div {width: 100px;height: 50px;background-color: orange;margin: 1px 1px;
}.box div:nth-child(1) {align-self: flex-start;
}.box div:nth-child(3) {align-self: flex-end;
}

我设置了5个项目,项目1将对齐在交叉轴的初始位置,项目3将对齐在交叉轴的终点位置,其他项目将对齐在交叉轴的中点位置。 

预览:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/91034.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity 从2018升级为2021之后 IAP(内购插件)报错解决

从老项目升级为2021高版本之后报了个错 大概就是… the type iwindowsiap exists in both unityengine.purchasing.winrtcore, version0.0.0.0, 这种 具体的我也没粘贴全部过来 原因貌似是 PackManger里面的IPA包和项目自带的冲突了 解决方法&#xff1a; 删除项目文件夹下面…

【LeetCode-中等题】437. 路径总和 III

文章目录 题目方法一&#xff1a;迭代层序 每层节点dfs 维护一个count变量 题目 方法一&#xff1a;迭代层序 每层节点dfs 维护一个count变量 思路&#xff1a; 层序遍历每一个节点遍历一个节点就对这个节点进行dfsdfs的同时&#xff0c;维护一个count变量&#xff0c;并且…

【SpringCloud技术专题】「Gateway网关系列」(1)微服务网关服务的Gateway组件的原理介绍分析

为什么要有服务网关? 我们都知道在微服务架构中&#xff0c;系统会被拆分为很多个微服务。那么作为客户端要如何去调用这么多的微服务呢&#xff1f;难道要一个个的去调用吗&#xff1f;很显然这是不太实际的&#xff0c;我们需要有一个统一的接口与这些微服务打交道&#xf…

springboot如何区分测试环境、生产环境。分环境启动

一 通过Maven打包时&#xff0c;将不同环境文件打入jar包来区分环境&#xff0c;然后直接启动jar包即可 1 pom.xml文件project标签里面加入以下配置 环境关键字可以根据自己的习惯来改 <profiles><!--开发--><profile><id>dev</id><propert…

工服穿戴检测算法 工装穿戴识别算法

工服穿戴检测算法 工装穿戴识别算法利用yolo网络模型图像识别技术&#xff0c;工服穿戴检测算法 工装穿戴识别算法可以准确地识别现场人员是否穿戴了正确的工装&#xff0c;包括工作服、安全帽等。一旦检测到未穿戴的情况&#xff0c;将立即发出警报并提示相关人员进行整改。Yo…

【【萌新的STM32学习--24 USART的部分介绍】】

萌新的STM32学习–24 USART的部分介绍 STM32的USART的介绍 USART 英文解释是 通用同步异步收发器 UART 通用异步收发器 USART/UART 都可以与外部设备进行全双工异步通信 USART 我们常用的也是异步通信 USART 主要特征 1.全双工异步通信 2.单线半双工通信 3.单独的发送器和接…

优思学院|企业推行精益生产要具备哪些前提条件?

企业界早已充斥着各种方法和策略&#xff0c;试图模仿精益生产和六西格玛管理等成功之路&#xff0c;目标在于通过质量工具的运用来改善业务。然而&#xff0c;许多公司在推行这些方法的过程中都犯了一个大错&#xff1a;他们忽视了背后的企业文化和制度&#xff0c;以及精益生…

打破时空限制:海外网红营销中的直播与虚拟互动

随着全球互联网的普及和技术的迅速发展&#xff0c;传统的商业模式也在不断演变。其中&#xff0c;海外网红直播带货成为了一种引人注目的全新营销方式。近年来&#xff0c;虚拟技术的蓬勃发展为海外网红直播带货提供了新的可能性&#xff0c;不仅丰富了消费者的购物体验&#…

计算机专业学生实习的一条明路

当计算机专业的学生毕业后学习嵌入式开发优势也会非常的明显。计算机专业提供了坚实的编程基础、数据结构和算法知识&#xff0c;这些都是嵌入式开发所需要的基本技能。视频后方有免费的嵌入式学习资料&#xff0c;按需自取。此外&#xff0c;对操作系统和系统编程的了解也为嵌…

如何在Windows本地快速搭建SFTP文件服务器,并通过端口映射实现公网远程访问

文章目录 1. 搭建SFTP服务器1.1 下载 freesshd服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#xff0…

【SVN】 代码版本管理工具使用步骤以及全局忽略不需要提交的文件夹

2023年&#xff0c;第36周。给自己一个目标&#xff0c;然后坚持总会有收货&#xff0c;不信你试试&#xff01; SVN是Subversion的简称&#xff0c;是一个开源的版本控制系统&#xff0c;用于管理软件开发过程中的代码版本和文件变更。 它提供了跟踪文件修改、协同开发、版本回…

汽车服务门店小程序模板制作指南

在数字化时代&#xff0c;一个小程序的力量不可忽视。它不仅是展示品牌形象和提供用户服务的重要工具&#xff0c;更是扩大客户群体和提高营收的关键手段。对于汽车服务门店来说&#xff0c;拥有一个精美且功能齐全的小程序&#xff0c;更将成为你在竞争激烈的市场中的重要武器…