CSS弹性布局

关键词:css, flex

传统布局

传统三等分布局:

.classSup {
    width: 600px;
    height: 100px;
    border: 2px solid blue;
    margin: 200px auto;
}

.classChi {
    width: 33.33%;
    height: 100%;
    float: left;
}

弹性布局(伸缩布局)

/* 父盒子伸缩布局模式 */
display: flex;

/* 子盒子添加分数,不需要单位 */
flex: 1;

排列方向

flex-direction

  • 从左到右(默认):row
  • 从右到左:row-reverse
  • 从上到下:column
  • 从下到上:column-reverse
  • 默认值:initial
  • 从父元素继承到的属性值:inherit
/* 父盒子伸缩布局模式 */
display: flex;
	
/* 排列方向 */
flex-direction: row-reverse;

主轴对齐方式

justify-content

  • flex-start 让子元素从父容器的开头开始排序 但是盒子顺序不变
  • flex-end 让子元素从父容器的末尾开始排序 但是盒子顺序不变
  • center 让子元素在父容器中间显示
  • space-between 左右的盒子贴近父盒子,中间的平均分布空白间距
  • space-around 相当于给每个盒子添加了左右margin外边距
/* 伸缩布局模式 */
display: flex;
	
/* justify-content 主轴对齐方式(横轴)、水平对齐方式 */
justify-content: space-between;

侧轴对齐方式

align-items

  • flex-start 上对齐
  • flex-end 底对齐
  • center 垂直居中
  • stretch 相当于 height: 100%; 让子元素的高度拉伸适用父容器(子元素不给高度的前提下)
/* 伸缩布局模式 */
display: flex;

/* align-items 侧轴对齐方式(纵轴)、垂直对齐方式 */
/* 使用每个弹性对象元素的 align-self 属性可重写 align-items 属性。 */
align-items: center;

换行

flex-wrap

  • nowrap 默认值,不换行,强制一行显示,放不下则压缩。
  • wrap 在必要的时候换行。
  • wrap-reverse 在必要的时候换行,但是以相反的顺序。
/* 伸缩布局模式 */
display: flex;

/* flex-wrap 属性规定flex容器是单行或者多行,同时横轴的方向决定了新行堆叠的方向。 */
/* 如果元素不是弹性盒对象的元素,则 flex-wrap 属性不起作用。 */
flex-wrap: wrap;

排列方式与换行

flex-flow

flex-flow 属性是 flex-direction 和 flex-wrap 属性的复合属性。

/* 伸缩布局模式 */
display: flex;

/* 纵向排列,需要时换行 */
flex-flow: column wrap;

/* 相当于下面这两句 */
/* flex-direction: column; */
/* flex-wrap: wrap; */

堆叠方式

align-content

容器内必须有多行的项目,该属性才能渲染出效果。

  • stretch 默认值,元素拉伸以适应容器。
  • center 元素位于容器的中心。
  • flex-start 元素位于容器的开头。
  • flex-end 元素位于容器的结尾。
  • space-between 元素位于各行之间留有空白的容器内。
  • space-around 元素位于各行之前、之间、之后都留有空白的容器内。
/* 伸缩布局模式 */
display: flex;

/* align-content 元素的堆叠方式 */

/* 这句话必须有 否则下面的不起效果 */
flex-flow: row wrap;

/* 各行之间、之前、之后都留空白 */
align-content: space-around;

顺序

order

弹性盒模型对象的子元素出现的順序,可以为负数,默认值是0.

/* 父视图设置伸缩布局模式 */
display: flex;

/* 子视图设置 */
/* order 弹性盒模型对象的子元素出现的順序 */
/* 可以为负数 */
/* 默认值是0 */
order: -1;