本文目录
1.什么是弹性盒子Flex
2.Flex的属性
3.项目item的属性
3.小结
什么是弹性盒子Flex
Flex
是Flexible Box
的缩写,翻译成中文就是“弹性盒子”,用来为盒装模型提供最大的灵活性。任何一个容器都可以通过display: flex;
成为为Flex
布局。
例如:
.container{
width: 100%;
height: 100vh;
background-color: #0f0;
display: flex;
flex-direction: column;
justify-content: space-around;
align-items: center;
}
采用Flex布局的元素,被称为Flex容器flex container
,简称“容器”。其所有子元素自动成为容器成员,成为Flex
项目,即:Flex item
,简称“项目”。
容器默认存在两根主轴:水平方向主轴(main axis)
和垂直方向交叉轴(cross axis)
,默认项目按主轴排列。
main start/main end
:主轴开始位置/结束位置;
cross start/cross end
:交叉轴开始位置/结束位置;
main size/cross size
:单个项目占据主轴/交叉轴的空间;
Flex的属性
设置在容器上的属性有6种:
flex-direction属性:决定主轴的方向(即项目的排列方向)
flex-wrap属性:定义换行情况
flex-flow属性:flex-direction和flex-wrap的简写,默认row nowrap
justify-content属性:定义项目在主轴上的对齐方式。
align-items属性:定义在交叉轴上的对齐方式
align-content属性:定义多根轴线的对齐方式
-flex-direction
属性:决定主轴的方向。
flex-direction属性:决定主轴的方向。说白了就是该属性用来控制项目的排列方向。该属性可取值如下:row 、row-reverse 、column 或 column-reverse;
row(默认)
:主轴水平方向,起点在左端;
row-reverse
:主轴水平方向,起点在右端;
column
:主轴垂直方向,起点在上边沿;
column-reserve
:主轴垂直方向,起点在下边沿。
-
flex-wrap
属性:定义换行情况
flex-wrap
属性:定义换行情况。默认情况下,项目都排列在一条轴线上,但有可能一条轴线排不下。
该属性可取值如下:nowrap、 wrap 或wrap-reverse
;
nowrap(默认)
:不换行;效果如下:
wrap
:换行,第一行在上方;效果如下:
wrap-reverse:换行,第一行在下方。效果如下:
-flex-flow
属性:flex-direction和flex-wrap
的简写,默认row nowrap
熟悉了上面的属性后,这里就没啥好说的,该属性只是把上面两者flex-direction和flex-wrap
组合一下而已。
-
justify-content
属性:定义项目在主轴上的对齐方式。
justify-content
属性:定义项目在主轴上的对齐方式。该属性可取值如下:start 、end、flex-start 、flex-end、 center 、 left、right、space-between 、 space-around 、space-evenly 、stretch、safe 、 unsafe 、 baseline 、 first baseline、 last baseline;
flex-start(默认值)
:左对齐
flex-end
:右对齐;
center
:居中;
space-between
:两端对齐,项目之间间隔相等;
space-around
:每个项目两侧的间隔相等,即项目之间的间隔比项目与边框的间隔大一倍。
提示:对齐方式与轴的方向有关,本文中假设主轴从左到右。
flex-start(默认值)
:左对齐。效果如下:
flex-end
:右对齐;效果如下:
center
:居中;效果如下:
space-between
:两端对齐,项目之间间隔相等;效果如下:
space-around
:每个项目两侧的间隔相等,即项目之间的间隔比项目与边框的间隔大一倍。效果如下:
-align-items
属性:定义在交叉轴上的对齐方式
align-items
属性:定义在交叉轴上的对齐方式。该属性可取值如下:flex-start 、flex-end 、center 、baseline 、 stretch;
stretch(默认值)
:如果项目未设置高度或设为auto
,将占满整个容器的高度。
flex-start
:起点对齐;
flex-end
:终点对齐;
center
:中点对齐;
baseline
:项目的第一行文字的基线对齐;
提示:对齐方式与交叉轴的方向有关,假设交叉轴从下到上。
stretch(默认值)
:如果项目未设置高度或设为auto
,将占满整个容器的高度。效果如下:
flex-start
:起点对齐;效果如下:
flex-end
:终点对齐;效果如下:
center
:中点对齐;效果如下:
baseline
:项目的第一行文字的基线对齐;效果如下:
-
align-content
属性:定义多根轴线的对齐方式
align-content
属性:定义多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。所以,容器必须设置flex-wrap:···;
。即必须设置换行样式后,该属性才有意义。该属性可取值如下:flex-start 、flex-end 、center 、 space-between 、 space-around 、 stretch
;
flex-start
:与交叉轴的起点对齐;
flex-end
:与交叉轴的终点对齐;
center
:与交叉轴的中点对齐;
space-between
:与交叉轴的两端对齐,轴线之间的间隔平均分布;
space-around
:每根轴线两侧的间隔相等,即轴线之间的间隔比轴线与边框的间隔大一倍;
stretch(默认值)
:轴线占满整个交叉轴。
stretch(默认值)
:轴线占满整个交叉轴。效果如下:
flex-start
:与交叉轴的起点对齐;效果如下:
flex-end
:与交叉轴的终点对齐;效果如下:
center
:与交叉轴的中点对齐;效果如下:
space-between
:与交叉轴的两端对齐,轴线之间的间隔平均分布;效果如下:
space-around
:每根轴线两侧的间隔相等,即轴线之间的间隔比轴线与边框的间隔大一倍;效果如下:
有意思的是,当你不给项目设置高度但是给容器设置align-content不为stretch时,同一轴线上的项目的高度将等于项目中高度最高的项目。
项目item的属性
设置在项目上的属性也有6个。
order属性:定义项目的排列顺序。
flex-grow属性:定义项目的放大比例
flex-shrink属性:定义项目的缩小比例
flex-basis属性:定义在分配多余空间之前,项目占据的主轴空间。
flex属性是flex-grow,flex-shrink和flex-basis的简写
align-self属性:允许单个项目与其他项目有不一样的对齐方式
下面一一介绍:
-
order
属性。
形如order:数值;
定义项目的排列顺序。数值越小,排列越靠前,默认为0,可以是负值。
-
flex-grow
属性
形如flex-grow: <数字>;
定义项目的放大比例。默认值为0,即如果空间有剩余,也不放大。可以是小数,按比例占据剩余空间。相当于设置权重。
若所有项目的flex-grow的数值都相同,则等分剩余空间。如下:
若果有一个项目flex-grow为2,其余都为1,则该项目占据剩余空间是其余的2倍。如下:
-
flex-shrink
属性:定义项目的缩小比例
flex-shrink
属性,形如flex-shrink: 非负整数;
来定义项目的缩小比例。默认值都为1,即如果空间不足将等比例缩小。如果有一个项目的值为0,其他项目为1,当空间不足时,该项目不缩小。负值对该属性无效,容器不应该设置flex-wrap
。
如果一个项目设置flex-shrink为0;而其他项目都为1,则空间不足时,该项目不缩小。
如果所有项目都为0,则当空间不足时,项目撑破容器而溢出。
如果设置项目的flex-shrink不为0的非负数效果同设置为1。
-
flex-basis
属性:定义在分配多余空间之前,项目占据的主轴空间。
flex-basis
属性:定义在分配多余空间之前,项目占据的主轴空间。默认值为auto,浏览器根据此属性检查主轴是否有多余空间。
注意:设置的flex-basis是分配多余空间之前项目占据的主轴空间,如果空间不足则默认情况下该项目也会缩小。
空间不足,项目缩小,小于设定值:
-
flex
属性是flex-grow,flex-shrink和flex-basis
的简写
flex
属性是flex-grow,flex-shrink和flex-basis
的简写。默认值为0 1 auto
,第一个属性必须,后两个属性可选。
可以用flex:auto;
代替 flex: 1 1 auto;
可以用flex: none;
代替 flex: 0 0 auto;
-
align-self
属性:允许单个项目与其他项目有不一样的对齐方式
align-self
属性:允许单个项目与其他项目有不一样的对齐方式。默认值为auto
,表示继承父元素的align-items
属性,并可以覆盖align-items
属性。
小结
本文全面剖析弹性盒子的各个属性的值。熟练掌握对于前端布局会有非常大的帮助。