CSS布局之Flex | 青训营

92 阅读3分钟

基本概念

1.容器—有容器属性(container)

2.项目—有项目属性(items)

FlexBox(弹性盒布局)

一种可控制子级盒子,对其进行集体操作的一种排版方式,比起常规流来讲操作更为便捷。

要使用弹性盒,必须先将一个元素设置为弹性容器 (父盒子)通过display设置弹性容器

    display: flex;

设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效

可以控制子级盒子的:

  • 摆放的流向
  • 摆放的顺序
  • 盒子的宽度、高度
  • 水平垂直方向的对齐
  • 是否允许折行

具体容器属性

属性功能
flex-direction设置主轴方向
justify-content设置主轴子元素排列方式
flex-wrap设置子元素是否换行
align-content设置侧轴上子元素的排列方式(多行)
align-items设置侧轴上子元素的排列方式(单行)
flex-flow复合属性,相当于设置了 flex-directionflex-wrap

1、容器属性

1、flex-direction

属性值含义
row默认值,主轴为水平方向(水平布局),从左向右排列
row-reverse主轴为水平方向(水平布局),从右向左排列
column主轴为垂直方向(垂直布局),从上往下排列
column-reverse主轴为垂直方向(垂直布局),从下往上排列

image.png

2、justify-content

属性值含义
flex-start默认值,左对齐
flex-end右对齐
center居中
space-between项目之间的间隔相等
space-around项目之间的间隔相等,每个项目两侧的间隔相等
  • space-betweenspace-around的区别在于space-between第一和最后一个盒子是紧贴着父元素的,而space-around会分配间隔。

3、flex-wrap

属性值含义
nowrap默认值,表示不换行
wrap换行,第一行在上方
wrap-reverse换行,第一行在下方
  • flex-wrap属性默认值为nowrap,当窗体的宽度被拉到最小时,几个div不会换行,而是缩小自己的宽度适应窗口的宽度

4、align-content

属性值含义
flex-start与交叉轴的起点对齐
flex-end与交叉轴的终点对齐
center与交叉轴的中点对齐
space-between与交叉轴两端对齐,轴线之间的间隔平均分布
space-around每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍
stretch默认值,轴线占满整个交叉轴

5、align-items

属性值含义
flex-start交叉轴的起点对齐
flex-end交叉轴的终点对齐
center交叉轴的中点对齐
baseline:项目的第一行文字的基线对齐
stretch(默认值)如果项目未设置高度或设为auto,将占满整个容器的高度

6、flex-flow

flex-flow属性可以取两个值,分别是flex-directionflex-wrap

.container {
  flex-flow: row wrap;
}

2、项目属性

order:项目的排列顺序,数字越小排列越靠前,默认为0。

align-self:属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

flex-grow:定义弹性盒子项的拉伸因子,默认值0。即空间多余时盒子大小如何分配(所占比例)。

flex-shrink:指定了 flex 元素的收缩规则,默认值是 1。空间不够时,盒子大小如何压缩(所占比例)。

flex-basis:指定了 flex 元素在主轴方向上的初始大小。即没有收缩和拉伸的基础长度。

flex属性是flex-grow, flex-shrinkflex-basis的简写,默认值为 0 1 auto。