#|弹性盒基础

【#|弹性盒基础】
弹性盒基础

    • 弹性盒简介
    • 弹性容器的属性
      • flex-grow 伸展系数
      • flex-shrink收缩系数
      • flex-wrap 设置弹性元素在弹性容器中是否自动换行
      • flex-flow 是flex-wrap和flex-direction的简写属性
      • justify-content 分配主轴上的空白空间
      • align-items 元素在辅轴上如何对齐
      • align-content 辅轴空白空间的分布
      • align-self 覆盖当前弹性元素上的align-items
    • 弹性元素的属性
      • 基础属性:(扩展系数、缩减系数、基础长度)
      • 排列顺序

弹性盒简介
弹性盒 - 锐客网 > *{ margin: 0; padding: 0; list-style: none; } #b1{ width: 800px; border: 10px red solid; /* 将b1设置为弹性容器 */ display: flex; } #b2, #b3, #b4{ width: 100px; line-height: 100px; font-size: 50px; text-align: center; } #b2{ background-color: pink; } #b3{ background-color: orange; } #b4{ background-color: #bfa; }
1
2
3

弹性容器的属性 flex-grow 伸展系数
弹性盒 - 锐客网 > *{ margin: 0; padding: 0; list-style: none; } #b1{ width: 800px; border: 10px red solid; /* 将b1设置为弹性容器 */ display: flex; /* flex-direction:指定容器中弹性元素的排列方式 可选值: row 默认值,弹性元素在容器中水平排列(从左向右) - 主轴方向: 从左向右 row-reverse 弹性元素在容器中反向水平排列(自右向左) - 主轴方向: 自右向左 column 弹性元素纵向排列(自上向下) - 主轴方向: 自上向下 column-reverse 弹性元素反向纵向排列(自下向上) - 主轴方向: 自下向上主轴:弹性元素的排列方向 侧轴:与主轴垂直的方向 */ flex-direction: row; } #b2, #b3, #b4{ width: 100px; line-height: 100px; font-size: 50px; text-align: center; /* 弹性元素的属性 flex-grow 指定弹性元素的伸展系数 当父元素有多余的空间时,子元素如何伸展 - 默认值为0,即为不伸展 可为子元素单独指定分配原则,剩余空间会按照flex-grow的比例分配*/ /* flex-grow: 1; */ } #b2{ background-color: pink; /* 此子元素分配0份父元素的剩余空间, 剩余空间为800-300 = 500px ,分配0px*/ flex-grow: 0; } #b3{ background-color: orange; flex-grow: 2; /*此子元素分配2份父元素的剩余空间,剩余空间为500px ,分配200px*/ } #b4{ background-color: #bfa; flex-grow: 3; /*此子元素分配3份父元素的剩余空间,剩余空间为500px ,分配300px*/ }
1
2
3

flex-grow使用前:
#|弹性盒基础
文章图片

flex-grow使用后:#|弹性盒基础
文章图片

flex-shrink收缩系数
> *{ margin: 0; padding: 0; list-style: none; } #b1{ width: 300px; border: 10px red solid; /* 将b1设置为弹性容器 */ display: flex; } #b2, #b3, #b4{ width: 200px; line-height: 100px; font-size: 50px; text-align: center; /* 弹性元素的属性 flex-shrink:指定弹性元素的收缩系数 当父元素的空间不足以容纳所有的子元素时,如何对子元素进行收缩 - 默认值为1,即空间不够时,将子元素进行等比例收缩 - 设置为0,则不进行收缩 - 值越大,收缩的比例越大 */ /* flex-grow: 1; */ flex-shrink: 1; } #b2{ background-color: pink; /* flex-grow: 0; */ flex-shrink: 1; } #b3{ background-color: orange; /* flex-grow: 2; */ flex-shrink: 2; } #b4{ background-color: #bfa; /* flex-grow: 3; */ flex-shrink: 3; }
1
2
3

外层div宽度为300px ,内部div每个宽度为200px,显然不够,但是使用flex布局后,收缩系数默认为1,即flex-shrink:1,它会使得内部元素等比例收缩,知道父元素能全部装下
#|弹性盒基础
文章图片

若将flex-shrink设置为0,即为不收缩,所以子元素会溢出
#|弹性盒基础
文章图片

对子元素中均单独设置flex-shrink,b2为1, b3为2, b4为3,因此收缩的比例b4最大,b3次之,b2最小
#|弹性盒基础
文章图片

flex-wrap 设置弹性元素在弹性容器中是否自动换行
弹性盒 - 锐客网 > *{ margin: 0; padding: 0; list-style: none; } #b1{ width: 500px; border: 10px red solid; /* 将b1设置为弹性容器 */ display: flex; /* flex-wrap:设置弹性元素在弹性容器中是否自动换行 - 可选值: - nowrap 默认值 不自动换行 - wrap 元素沿着辅轴方向自动换行 - wrap-reverse 元素沿着辅轴反方向换行 */ /* flex-wrap: wrap; */ } #b2, #b3, #b4{ width: 200px; line-height: 100px; font-size: 50px; text-align: center; flex-shrink: 0; } #b2{ background-color: pink; } #b3{ background-color: orange; } #b4{ background-color: #bfa; }
1
2
3

父元素width:500px 子元素宽度为200px 不设置flex-wrap
子元素在父元素中溢出,默认不换行
#|弹性盒基础
文章图片

设置flex-wrap 为wrap 则元素沿着辅轴方向自动换行
#|弹性盒基础
文章图片

设置flex-wrap 为wrap-reverse 元素沿着辅轴反方向换行
#|弹性盒基础
文章图片

flex-flow 是flex-wrap和flex-direction的简写属性
/* flex-flow 为flex-wrap和flex-direction的简写属性,不区分前后顺序 */ flex-flow: row wrap;

justify-content 分配主轴上的空白空间
弹性盒 - 锐客网 > *{ margin: 0; padding: 0; list-style: none; } #b1{ width: 800px; border: 10px red solid; /* 将b1设置为弹性容器 */ display: flex; /* justify-content 如何分配主轴上的空白空间 - flex-start 元素沿着主轴起边排列 - flex-end 元素沿着主轴终边排列 - center 元素居中排列 - space-around 空白分布到元素两侧 - space-between 空白均匀分布到元素间 - space-evenly 空白分布到元素的单侧 */ justify-content:flex-start } #b2, #b3, #b4{ width: 200px; line-height: 100px; font-size: 50px; text-align: center; flex-shrink: 0; } #b2{ background-color: pink; } #b3{ background-color: orange; } #b4{ background-color: #bfa; }
1
2
3

  • flex-start 元素沿着主轴起边排列
    #|弹性盒基础
    文章图片

  • flex-end 元素沿着主轴终边排列
    #|弹性盒基础
    文章图片

  • center 元素居中排列
    #|弹性盒基础
    文章图片

  • space-around 空白分布到元素两侧
    #|弹性盒基础
    文章图片

  • space-between 空白均匀分布到元素间
    #|弹性盒基础
    文章图片

  • space-evenly 空白分布到元素的单侧
    #|弹性盒基础
    文章图片

align-items 元素在辅轴上如何对齐
弹性盒 - 锐客网 > *{ margin: 0; padding: 0; list-style: none; } #b1{ width: 600px; height: 800px; border: 10px red solid; /* 将b1设置为弹性容器 */ display: flex; /* align-items: 元素在辅轴上如何对齐 可选值: - stretch 默认值,将同一行元素的长度设置为相同的值, 不够长的元素会拉伸到一样长 - flex-start 元素不会拉伸,并沿着辅轴起边对齐 - flex-end 沿着辅轴的终边对齐 - center 居中对齐 - baseline 基线对齐 */ flex-flow: row wrap; align-items: stretch; } #b2, #b3, #b4, #b5, #b6{ width: 200px; font-size: 50px; text-align: center; } #b2{ background-color: pink; } #b3{ background-color: orange; } #b4{ background-color: #bfa; } #b5{ background-color: blue; } #b6{ background-color: chocolate; }
1
2
2
3
3
3
1
2
2

  • stretch 默认值,将同一行元素的长度设置为相同的值
    #|弹性盒基础
    文章图片
  • flex-start 元素不会拉伸,并沿着辅轴起边对齐
    #|弹性盒基础
    文章图片
  • flex-end 沿着辅轴的终边对齐
    #|弹性盒基础
    文章图片
  • center 居中对齐
    #|弹性盒基础
    文章图片
align-content 辅轴空白空间的分布
/* align-content:辅轴空白空间的分布 - flex-start 元素沿着辅轴起边排列 - flex-end 元素沿着辅轴终边排列 - center 元素居中排列 - space-around 空白分布到元素两侧 - space-between 空白均匀分布到元素间 - space-evenly 空白分布到元素的单侧 */ align-content: center;

align-self 覆盖当前弹性元素上的align-items
#b1{ width: 600px; height: 800px; border: 10px red solid; /* 将b1设置为弹性容器 */ display: flex; flex-flow: row wrap; align-items: center; align-content: flex-start; } #b2{ background-color: pink; /* align-self: 用来覆盖当前弹性容器上的align-items */ align-self: flex-start; }

  • 使用align-self覆盖前
    #|弹性盒基础
    文章图片
  • 使用align-self覆盖后
    #|弹性盒基础
    文章图片
弹性元素的属性 基础属性:(扩展系数、缩减系数、基础长度)
弹性盒 - 锐客网 > *{ margin: 0; padding: 0; list-style: none; } #b1{ width: 800px; height: 100px; border: 10px red solid; /* 将b1设置为弹性容器 */ display: flex; /* 伸展系数 flex-grow 指定弹性元素的伸展系数,默认值为0 当父元素有多余空间的时,子元素如何伸展 父元素的剩余空间,会按照比例进行分配flex-grow:0; 缩减系数 flex-shrink 指定弹性元素的收缩系数,默认值为1 当父元素中的空间不足以容纳所有的子元素时,如何对子元素进行收缩 缩减系数的计算方式比较复杂,缩减多少是根据 缩减系数 和 元素大小 来计算flex-shrink:1; 基础长度 flex-basis 指定的是元素在主轴上的基础长度 如果主轴是横向的,则该值指定的就是元素的宽度 如果主轴是纵向的,则该值指定的就是元素的高度 默认值是auto,表示参考元素自身的高度或宽度 如果传递了一个具体的数值,则以该值为准 flex-basis:auto; *//* 简写属性flex可以设置弹性元素所有的三个样式 flex: 增长 缩减 基础 flex:initial 相当于 flex: 0 1 auto flex:auto相当于 flex: 1 1 auto flex:none相当于flex: 0 0 auto 弹性元素没有弹性flex:initial; */ } #b2, #b3, #b4, #b5, #b6{ width: 200px; line-height: 100px; height: 100px; font-size: 50px; text-align: center; } #b2{ background-color: pink; } #b3{ background-color: orange; } #b4{ background-color: #bfa; }
1
2
3

排列顺序
#b2{ background-color: pink; order: 3; } #b3{ background-color: orange; order: 2; } #b4{ background-color: #bfa; order: 1; }

使用order排列之前
#|弹性盒基础
文章图片

使用order排列后
#|弹性盒基础
文章图片

    推荐阅读