Flex 布局是什么?
Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。
任何一个容器都可以指定为 Flex 布局。
使用 flex 布局首先要设置父容器 display: flex
,然后再设置 justify-content: center
实现水平居中,最后设置 align-items: center
实现垂直居中(需要在确定height下才能实现)。
#dad { height:300px; display: flex; justify-content: center; align-items: center }
justify-content
和 align-items
是啥?哪里可以看出横向、竖向的语义?是的,flex 的确没有那么简单,这就要从两个基本概念说起了。
flex 的核心的概念就是 容器 和 轴。容器包括外层的 父容器 和内层的 子容器,轴包括 主轴 和 交叉轴,可以说 flex 布局的全部特性都构建在这两个概念上。
一、容器
1.1 父容器
1.1.1 justify-content属性用于定义如何沿着主轴方向排列子容器。
-
flex-start:起始端对齐
-
flex-end:末尾段对齐
-
center:居中对齐
-
space-around:子容器沿主轴均匀分布,位于首尾两端的子容器到父容器的距离是子容器间距的一半
-
space-between:子容器沿主轴均匀分布,位于首尾两端的子容器与父容器相切
1.1.2 align-items属性用于定义垂直方向分配子容器的间距。
-
flex-start:起始端对齐
-
flex-end:末尾段对齐
-
center:居中对齐
-
baseline:基线对齐,这里的
baseline
默认是指首行文字,即first baseline
,所有子容器向基线对齐,交叉轴起点到元素基线距离最大的子容器将会与交叉轴起始端相切以确定基线。
-
stretch:子容器沿交叉轴方向的尺寸拉伸至与父容器一致。
1.2 子容器
在主轴上如何伸缩:flex
子容器是有弹性的(flex 即弹性),它们会自动填充剩余空间,子容器的伸缩比例由 flex
属性确定。
flex
的值可以是无单位数字(如:1, 2, 3),也可以是有单位数字(如:15px,30px,60px),还可以是 none
关键字。子容器会按照 flex
定义的尺寸比例自动伸缩,如果取值为none
则不伸缩。
虽然 flex
是多个属性的缩写,允许 1 - 3 个值连用,但通常用 1 个值就可以满足需求,它的全部写法可参考下图。
-
flex-start:起始端对齐
-
flex-end:末尾段对齐
-
center:居中对齐
-
baseline:基线对齐
-
stretch:拉伸对齐
二、轴
轴 包括 主轴 和 交叉轴,我们知道 justify-content
属性决定子容器沿主轴(水平方向)的排列方式,align-items
属性决定子容器沿着交叉轴(垂直方向)的排列方式
-
从左到右:flex-direction: row
- 从上到下:flex-direction: column
- 从右到左:flex-direction: row-reverse
- 从下到上:flex-direction: column-reverse
flex 进阶概念(自适应不同分辨率)
1、父容器
-
设置换行方式:flex-wrap
决定子容器是否换行排列,不但可以顺序换行而且支持逆序换行。
- nowrap:不换行
- wrap:换行
- wrap-reverse:逆序换行
-
多行沿交叉轴对齐:align-content
当子容器多行排列时,设置行与行之间的对齐方式。
- flex-start:起始端对齐
- flex-end:末尾段对齐
- center:居中对齐
- space-around:等边距均匀分布
- space-between:等间距均匀分布
- stretch:拉伸对齐
2、子容器
-
设置基准大小:flex-basis
flex-basis
表示在不伸缩的情况下子容器的原始尺寸。主轴为横向时代表宽度,主轴为纵向时代表高度。
-
设置扩展比例:flex-grow
子容器弹性伸展的比例。如图,剩余空间按 1:2 的比例分配给子容器。
-
设置排列顺序:order
改变子容器的排列顺序,覆盖 HTML 代码中的顺序,默认值为 0,可以为负值,数值越小排列越靠前。