Ping说Flex弹性布局

142 阅读5分钟

一、Flex布局含义

1.flex布局含义:flex布局,也被称为弹性盒子布局,是CSS3里新增的一种布局方式,通过使用flex布局,可以让布局更加便捷高效。

2.如何触发弹性盒子?

给父元素添加display属性,并将取值设置成flex

3.触发弹性盒子有哪些特点?

  • 子元素默认横向显示;
  • 子元素会默认变成块级元素,能设置宽度高度;
  • 如果只有一个子元素的话,则给子元素添加margin:auto;的时候,会让子元素直接实现水平垂直居中显示。

二、Flex布局基础概念

  1. flex容器:采用flex布局的元素的父元素;
  2. flex项目:采用flex布局容器里面的子元素;
  3. 横轴(水平轴):水平方向轴线;
  4. 纵轴(垂直轴):垂直方向轴线;
  5. 主轴:触发弹性盒子后,项目的排列方向;
  6. 侧轴(交叉轴):触发弹性盒子后,与主轴对立的方向。

弹性盒子模型

三、Flex布局容器属性

3.1 触发弹性盒子

默认情况下项目都是纵向排列的。

原因:项目是块级元素,块级本质就是纵向排列。

给容器(父元素)触发弹性盒子display:flex;

触发弹性盒子后,项目默认横向显示。

3.2 修改主轴方向

属性 说明
flex-direction row 默认值,横向
row-reverse 主轴在横向,项目反方向显示
column 主轴在纵向,项目正向显示
column-reverse 主轴在纵向,项目反方向显示

3.3 主轴对齐方式

属性 说明
justify-content flex-start 默认值,主轴的开始位置显示
flex-end 主轴的结束位置显示
center 主轴的居中位置显示
space-between 主轴两端对齐
space-around 主轴的两端环绕,即项目之间的距离是贴边项目与容器之间距离的两倍
space-evenly 主轴的间距均分

3.4 交叉轴对齐方式

属性 说明
align-items flex-start 默认值,交叉轴的开始位置显示
flex-end 交叉轴的结束位置显示
center 交叉轴的居中位置显示
baseline 交叉轴的基线位置显示,与flex-start效果一致
stretch 有拉伸效果,前提是项目没有设置高度,或高度是自适应的

3.5 折行属性

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

当触发完弹性盒子之前,子元素会横向显示,没有折行,并且原有宽度被挤压了。

需要实现不挤压,让项目折行的效果。

属性 说明
flex-wrap nowrap 默认值,不折行
wrap 折行显示

1.为什么折行之后,右侧会有留白空间呢?

因为右侧区域留白放不下一个项目了,只能折行显示。

2.为什么行与行之间有这么大的间距?

因为项目设置了固定高度。如果没有高度的话,高度默认是拉伸效果,高度均分在每一行中。

3.6 调整行间距

如果项目过多,添加折行之后,项目之间会有比较大的行间距,需要调整。

属性 说明
align-content flex-start 侧轴的开始位置显示,没有行间距
flex-end 侧轴的结束位置显示,没有行间距
center 侧轴的居中位置显示,没有行间距
space-between 侧轴的两端对齐,即首行和尾行贴边显示,中间的间距自动平分
space-around 侧轴的行间距环绕,即行与行之间的距离,是贴边行距离容器之间距离的2倍
space-evenly 侧轴的行间距均分

四、Flex布局项目属性

4.1 单独调整侧轴对齐方式

属性 说明
align-self flex-start 侧轴的开始位置显示
flex-end 侧轴的结束位置显示
center 侧轴的居中位置显示
baseline 侧轴的基线位置,与flex-start效果一致
stretch 有拉伸效果,前提是项目没有设置高度,或高度是自适应的

4.2 调整项目显示顺序

需要使用属性order,取值为数值。order的默认取值为auto,可以理解为0,order的值可以取正数或负数,取值越小排列越靠前;取值越大排列越靠后。

4.3 占剩余空间的所有

通过flex:1实现。

1.主轴在横向的时候

如果项目不设置高度,默认高度是拉伸的,项目添加flex:1;实现的是占剩余宽度的所有。若给所有项目添加flex:1;,所有项目平分了容器的宽度。

2.主轴在纵向的时候

如果项目不设置宽度,默认宽度是拉伸的,项目添加flex:1;实现的是占剩余高度的所有。若给所有项目添加flex:1;,所有项目平分了容器的高度。

4.4 flex:1详解

1.flex属性是一个复合属性,是由flex-growflex-shrinkflex-basis三个属性的缩写。

2.flex-grow:定义项目放大的放大比例,默认为0,即存在剩余空间也不会放大。若所有项目的值为1,则等分剩余空间(自动放大占位)。flex-grow为n的项目,占据的空间(放大的比例)是flex-grow为1的n倍。

3.flex-basis:定义在分配多余空间之前,项目占据的主轴空间,由浏览器根据此属性计算主轴是否有多余空间。相当于设置初始值,默认值是auto。

4.flex-shrink:定义项目的缩小比例,取值0/1。