美文网首页
弹性布局 - 手册(自整理)

弹性布局 - 手册(自整理)

作者: 木头就是我呀 | 来源:发表于2020-04-07 15:52 被阅读0次

    因为弹性布局所涉及到的一些命令比较多,这里主要记录一些弹性布局的命令。以便以后查阅方便。

    1. 弹性盒子

    • 声明定义 display

      描述
      flex 将对象作为弹性伸缩盒显示(父元素宽度若不指定,默认会100%)
      inline-flex 将对象作为内联块级弹性伸缩盒显示(父元素宽度若不指定,默认被子元素撑起来,不一定是100%)
    • 盒子元素排列方向 flex-derection

      表头 表头
      row 从左到右水平排列 (盒子元素排列方向默认值)
      row-reverse 从右到左水平排列
      column 从上到下垂直排列
      column-reverse 从下到上垂直排列
    • 排列方向上是否折行 flex-wrap

      描述
      nowrap 没有折行 (默认)
      wrap 当元素超出边界的时候,折行
      wrap-reverse 当元素超出边界的时候,反向折行
      没有折行 折行 反向折行
    • 合并写法 flex-flow: flex-direction flex-wrap

    • 轴介绍,轴不显示在页面上,但确实是存在的,我们使用箭头代替它


      row方向时的轴示意
      column方向的轴示意
    • 元素在主轴上的排列方式 justify-content

      描述
      flex-start 元素紧靠主轴的起点
      flex-end 元素紧靠主轴的终点
      center 元素从主轴的中心点开始
      space-between 第一个元素紧靠起点,最后一个元素紧靠重点,其余元素的留白平均分配剩余留白空间 (每一行作为一个单位)
      space-around 每两个元素之间的间隔(各自相等)为元素和边框的间隔两倍 (每一行作为一个单位)
      space-evenly 所有间隔均一致 (每一行作为一个单位)
      flex-start
      flex-end
      center
      space-between
      space-around
      space-evently
      • 元素在交叉轴上的排列方式 align-items (交叉轴上的所有元素)

        描述
        stretch 将交叉轴空间平均分配给元素(拉伸) (默认)
        flex-start 元素紧靠交叉轴的起点
        flex-end 元素紧靠交叉轴的终点
        center 元素从交叉轴的中心点开始
        stretch
        flex-start
        flex-end
        center
        • 如果设置了width | height | min-height | min-width | max-width | max-height,将影响stretch 的结果,因为 stretch 优先级低于宽高设置(这里取消了第一个item的高度,设为了auto)。
      • 元素在交叉轴上有空余align-content分配策略

        描述
        stretch 将交叉轴空间平均分配给元素(拉伸)(默认)
        flex-start 元素紧靠交叉轴的起点
        flex-end 元素紧靠交叉轴的终点
        center 元素从交叉轴的中心点开始
        space-between 第一列元素紧贴交叉轴起点,最后一列元素紧贴交叉轴终点,其余列的留白平均分配剩余留白空间
        space-around 元素从交叉轴的中心点开始
        space-evenly 元素从交叉轴的中心点开始
        stretch
        flex-start
        flex-end
        center
        space-between
        space-around
        space-evently

    2. 弹性元素

    • 单个元素在交叉轴的排列 align-self (交叉轴上的单个元素)

      描述
      stretch 将交叉轴空间平均分配给元素(拉伸) (默认)
      flex-start 元素紧靠交叉轴的起点
      flex-end 元素紧靠交叉轴的终点
      center 元素从交叉轴的中心点开始
      stretch
      flex-start
      flex-end
      center
    • 放大属性 flex-grow

      元素没有宽度时,直接用 ( 父级宽度 / 所有flex-grow的和 ) * 单个flex-grow
      某些元素有宽度时,用 ( ( 父级宽度 - 有宽度的所有宽度和 ) / 所有flex-grow的和 ) * 单个flex-grow + 对应的宽度
    • 缩小属性 flex-shrink,与 flex-grow 相反 flex-shrink 是在弹性盒子装不下元素时定义的缩小值。

      缩小后的效果
          .my-flex{
              border: 1px solid red;
              height: 300px;
              width: 200px;
              display: flex;
              box-sizing: content-box;
          }
          .my-flex div{
              height: auto;
          }
          .my-flex div{
              width: 60px;
              background-color: rgba(100,100,100,0.2);
              box-sizing: border-box;
              background-clip: content-box;
              text-align: center;
              line-height: 37px;
          }
          .my-flex div:nth-child(1){
              flex-shrink: 0;
          }
          .my-flex div:nth-child(2){
              flex-shrink: 0;
              background-color: rgba(100,100,100,0.4);
          }
          .my-flex div:nth-child(3){
              background-color: rgba(100,100,100,0.6);
              flex-shrink: 1;
          }
          .my-flex div:nth-child(4){
              background-color: rgba(100,100,100,0.8);
              flex-shrink: 3;
          }
      

    计算公式:
    我们可以看到父容器宽度为200,子项定义为60,子项相加后为240,超出40,那么超出的40需要被块3和块4消化,通过加权综合可得:40 x 1 + 40 x 3=160
    第三个块缩小大小:(40 x 1) / 160 * 40 = 10 即最后大小为60 - 10 = 50
    第四个块缩小大小:(40 x 3) / 160 * 40 = 30 即最后大小为60 - 30 = 30

    • 元素的初始宽度 flex-basis

    用于设置某个弹性盒元素的初始长度,可以是长度单位,也可以是百分比。flex-basis的优先级高于width、height属性。

    • 元素的组合写法 flex

    flex是flex-grow、flex-shrink 、flex-basis缩写组合。
    建议使用 flex 面不要单独使用 flex-grow / flew-shrink / flex-basis 。

    • 元素的组合写法 order

    用于控制弹性元素的位置,默认为 order:0 数值越小越在前面,可以负数或整数。

    • 自动空间 margin-right:auto

      margin-right自动撑开

    相关文章

      网友评论

          本文标题:弹性布局 - 手册(自整理)

          本文链接:https://www.haomeiwen.com/subject/wkqgphtx.html