flex布局
CSSflex弹性盒
弹性盒子概念

- Flex容器(flex container):采用Flex布局的元素的父元素;
- Flex项目(flex item):采用Flex布局容器里面的子元素;
- 主轴(cross axis):触发弹性盒子之后,项目的排列方向
- 侧轴 (main axis):触发弹性盒子之后,与主轴对立的方向
注意:角触发弹性盒子之后,项目默认沿主轴排列。
触发弹性盒子
1 | display:flex; |
触发弹性盒之后的特点
- 父元素触发弹性盒子之后,子元素默认横向显示
- 父元素触发弹性盒子之后,子元素会横向显示,类似浮动但是和浮动没有关系
- 变化的效果不会影响孙子辈元素
- 触发弹性盒子之后,会改变子元素的元素类型,会让子元素变成块级元素
- 触发弹性盒子之后,如果只有一个子元素,给子元素添加
margin:auto的时候,子元素会位于水平垂直居中位置显示
容器属性
修改主轴方向flex-direction
1 | //默认值 |



主轴对齐方式justify-content
1 | justify-content:flex-start; |
主轴的默认对齐方式是flex-start

1 | //末端对齐 |





侧轴对齐方式align-items
1 | align-items:flex-start |
侧轴的默认对齐方式是flex-start

1 | //底部显示 |

折行属性flex-wrap
没有触发弹性盒子之前,子元素过多的时候,默认会产生溢出效果,元素有自己的宽度和高度

当给父元素触发完弹性盒子之后display: flex子元素会横向显示,没有折行,并且原有宽度被挤压了

1 | //默认值不折行 |

- 右侧有空白是因为右侧区域留白放不下一个项目了只能折行显示
- 行之间空隙是因为项目设置了固定的高度,如果没有高度的话,高度默认是拉伸的效果,高度均分在
每一行中
多行侧轴对齐align-content
1 | //侧轴开始显示,没有行间距 |






项目属性
单独侧轴对齐align-self
1 | //侧轴开始位置对齐。默认值 |

调整显示顺序order
默认order取值为:auto;可以理解成o;
1)元素添加,order:5;位于最后显示
5)元素添加,order:-1;位于最前面显示

占剩余空间的所有flex:
- 主轴在横向的时候
- 如果项目不设置高度的话,默认高度是拉伸的
- 项目添加flex:1实现的是占剩余宽度的所有
- 主轴在纵向的时候
- 如果项目不设置宽度的话,默认宽度是拉伸的
- 项目添加flex:1实现的是占剩余高度的所有

所有项目都是
flex:1则所有项目平分
不挤压不占行
- flex属性是一个复合属性是由:flex-grow、flex-shrink、flex-basis三个属性的缩写。
- flex-grow:定义项目的的放大比例;
默认为0,即使存在剩余空间,也不会放大;
所有项目的flex-grow为1:等分剩余空间(自动放大占位);
flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。 - flex-basis:定义在分配多余空间之前,项目占据的主轴空间(mainsize)
浏览器根据此属性计算主轴是否有多余空间。相当于设置初始值,默认值为autt - flex-shrink:定义项目的缩小比例
取值为0/1
1 | //不挤压,不折行 |
