一、flex弹性概念
弹性盒子是一种用于按行或按列布局元素的一维布局方法。元素可以膨胀以填充额外的空间,收缩以适应更小的空间。
(一)主轴与交叉轴
二、属性详解
(一)容器属性详解
-
1、flex容器与flex子项
容器的属性与子项的属性不要互相乱设置。 2、
flex-direction属性
: 改变轴方向,包含四个属性
flex-direction
:row
|row-reverse
|column
|column-reverse
row
:默认属性 ,主轴为水平方向,从左到右 。
row-reverse
:主轴水平从右到左。
column
:主轴为垂直方向,从上到下。
column-reverse
:主轴为垂直方向,从下到上。3、
flex-wrap
:换行与缩写属性
flex-wrap
:nowrap
|wrap
|wrap-reverse
nowrap
:默认,不进行换行处理
wrap
: 根据父容器高度均分自动换行,从上自下,
wrap-reverse
:自动换行,水平从左到右,从自下而上用得比较少。
该属性可以同flex-direction属性
组合使用。灵活布局。4、
flex-flow
: 是 flex-direction 和 flex-wrap 属性的简写方式
语法如下:
flex-flow
:<flex-direction>
||<flex-wrap>
flex-direction
:row
(初始值) |row-reverse
|column
|column-reverse
flex-wrap
:nowrap
(初始值) |wrap
|wrap-reverse
- flex-flow 属性是 flex-direction 和 flex-wrap 属性的速记属性。
- flex-direction 属性规定灵活项目的方向。
- flex-wrap 属性规定灵活项目是否拆行或拆列。
- IE10 以下和 Safari 不支持此属性
flex-direction
定义了弹性项目在弹性容器中的放置方向,默认是 row,即行内方向(一般而言是由左往右,但注意这个和书写模式有关)。
flex-wrap
定义是否需要拆行以使得弹性项目能被容器包含。*-reverse 代表相反的方向。示例如下
display:flex;
flex-flow:row-reverse wrap;
-
5、
justify-content
: 主轴对齐
justify-content
:flex-start
(默认值) |flex-end
|center
|space-around
|space-between
|space-evenly
;
flex-start
沿着主轴方向起点对齐(默认值)。从行首起始位置开始排列。
2.flex-end
沿着主轴方向结尾对齐。从行尾位置开始排列。
3.center
沿着主轴方向 居中 对齐。居中排列。
4.space-around
沿着主轴方向 间隔对齐,头尾有间距。space-between
沿着主轴方向 间隔对齐,头尾没有间距。
6.space-between
均匀排列每个元素,每个元素之间的间隔相等。
<style>
.main {
width: 500px;
height: 500px;
background-color: aqua;
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: space-between;
}
.main div{
width: 100px;
height: 100px;
background-color: pink;
font-size: 20px;
}
</style>
<div class="main">
<!--子项-->
<div>1</div>
<div>2</div>
<div>3</div>
</div>
-
6、
align-content
: 定义了多根轴线的对齐方式
align-content
:stretch
|center
|flex-start
|flex-end
|space-between
|space-around
|initial
|inherit
;
align-content
属性在弹性容器内的各项没有占用交叉轴上所有可用的空间时(垂直)对齐容器内的各项。
提示:使用 justify-content 属性对齐主轴上的各项(水平)。
注意:容器内必须有多行的项目,该属性才能渲染出效果。没有折行,不生效
stretch
(默认值):轴线占满整个交叉轴。
center
:与交叉轴的中点对齐。
flex-start
:与交叉轴的起点对齐。
flex-end
:与交叉轴的终点对齐。
space-between
:与交叉轴两端对齐,轴线之间的间隔平均分布。
space-around
:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
如果布局方向为横向主轴:flex-direction: row
;
1、此时 align-content 的变化体现在竖直方向;
2、如果要让 align-content: stretch;生效,这个时候应该去掉子项的高度或者设置子项的高度为 auto
如果布局方向为纵向交叉轴:flex-direction: column
;
1、此时 align-content 的变化体现在水平方向
2、如果要让 align-content: stretch;生效,这个时候应该去掉子项的宽度或者设置子项的宽度为 auto
-
7、
align-items
属性: 居中对齐弹性盒的各项 <div> 元素, 用来设置项目在交叉轴方向上的对齐方式
align-items
:flex-start
|flex-end
|center
|baseline
|stretch
(默认值);
flex-start
沿着交叉轴方向 起点 对齐(默认值)。
flex-end
沿着交叉轴方向 结尾 对齐。
center
沿着交叉轴方向 居中 对齐。
baseline
沿着交叉轴方向,按照项目内的文字对齐。
stretch
沿着交叉轴方向自动进行拉升到最大。
align-items 属性用来设置项目在交叉轴方向上的对齐方式。
align-items 常用在垂直居中效果实现。
(二)flex子项属性
-
1、
flex-grow
属性: 用于设置或检索弹性盒子的扩展比率。
❗注意:如果元素不是弹性盒对象的元素,则 flex-grow 属性不起作用
flex-grow
:number
|initial
|inherit
;
number
一个数字,规定项目相对于其他灵活的项目进行扩展的量。
默认值是 0,表示不占用剩的空白间隙扩展自己的宽度。如果比例值为1,就沾满剩余的所有空间。
initial
设置该属性为它的默认值。
inherit
从父元素继承该属性。
<style>
.box{
width: 300px;
height: 300px;
background-color:blueviolet;
display: flex;
justify-content: center;
align-items: center;
}
.box div{
height:100px;
background: pink;
flex-grow: 1;
}
</style>
<!--容器-->
<div class="box">
<!--子项-->
<div>
测试文字
</div>
</div>
-
2、
flex-shirk
属性: 定义了项目的收缩规则
flex-shrink
主要处理当 flex 容器空间不足时候,单个元素的收缩比例。当父元素的宽度小于子元素宽度之和并且超出了父元素的宽度时,flex-shrink
就会按照一定的比例进行收缩:将子元素宽度之和与父元素宽度的差值按照子元素flex-shrink
的值分配给各个子元素,每个子元素原本宽度减去按比例分配的值,其剩余值为实际宽度。
flex
元素仅在默认宽度之和大于容器的时候才会发生收缩,其收缩的大小是依据flex-shrink
的值。
注意:如果元素不是弹性盒对象的元素,则flex-shrink
属性不起作用。
默认为1,即如果空间不足,该项目将缩小。
:flex-shrink
: number
|initial
|inherit
;
number :一个数字,规定项目将相对于其他灵活的项目进行收缩的量。默认值是 1
initial:设置该属性为它的默认值。
inherit:从父元素继承该属性。
如果所有项目的 flex-shrink 属性都为1,当空间不足时,都将等比例缩小。
如果一个项目的 flex-shrink 属性为0,其他项目都为1,则空间不足时,前者不缩小。