flex布局

本文详细介绍了flex布局,包括老版本和新版本。老版本flex布局可控制容器布局排列方向,对主轴和侧轴的富裕空间进行管理,还能按比例分配主轴富裕空间。新版本flex布局可控制容器单行/列或多行/列,定义侧轴方向,以及规定侧轴有额外空间时行/列的排布规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

flex布局

老版本flex布局

容器的布局排列方向

-webkit-box-direction:控制主轴方向

-webkit-box-orient :属性本质上确定了主轴和侧轴分别是哪一根 ;:horizontal x 轴 :vertical y 轴

富裕空间的管理

-webkit-box-pack:

主轴富裕空间:

  • start: 富裕空间在右边(x) 下边(y)
  • end: 富裕空间在左边 (x) 上边(y)
  • center: 富裕空间在两边
  • justify: 富裕空间在项目之间

侧轴富裕空间:

  • start: 富裕空间在右边(x) 下边(y)
  • end: 富裕空间在左边 (x) 上边(y)
  • center 富裕空间在两边
弹性管理空间

是将主轴上的富裕空间按比例分配到项目的width/height上

新版本flex布局

flex-wrap:属性控制了容器为单行/列 还是多行/列。并且定义了侧轴的方向。新行/列将沿侧轴方向堆砌。

默认值:nowrap 不可继承

值:nowrap | wrap | wrap-reverse

flex-flow:属性是设置 flex-direction 和 flex-wrap 的简写

默认值:row nowrap 不可继承; 控制主轴和侧轴的位置及方向

align-content:属性定义弹性容器的侧轴方向上有额外空间时,如果排布每一行/列。当弹性容器只有一行/列时无作用

默认值:stretch 不可继承

值:

  • flex-start:所有行/列从侧轴起点开始填充。第一行/列的侧轴起点和容器的侧轴起点边对齐。接下来的每一行/列紧跟前一行/列。主轴:富裕空间在主轴的正方向 ;侧轴:富裕空间在主轴的正方向
  • flex-end:所有弹性元素从侧轴莫为开始填充。最后一个弹性元素的侧轴终点和容器的侧轴终点对齐。同时所有后续原素与前一个对齐。主轴:富裕空间在主轴的反方向 ;侧轴:富裕空间在主轴的反方向
  • center:所有行/列朝向容器的中心填充。每行/列互相紧挨,相对于容器居中对齐。容器的侧轴期待那边和第一行/列的距离相等于容器的侧轴终点和最后一行/列的距离。主、侧轴:富裕空间在两边
  • space-between:所有行/列在容器中平均分布。相邻两行/列间距相等。容器的侧轴起点和终点边分别与第一行/列和最后一行/列的边对齐。主轴: 富裕空间在项目之间
  • space-around:所有行/列在容器中平均分布,相邻两行/列间距相等。容器的侧轴起点边和终点边分别与第一行/列和最后一行/列的距离是相邻两行/列间距的一半。 主轴:富裕空间在项目两边
  • stretch:拉伸所有行/列来填满剩余空间。剩余空间平均的分配给每一行/列。侧轴: 等高布局
示例代码:
<style>
        * {
            margin: 0;
            padding: 0;
        }
        
        #wrap {
            width: 400px;
            height: 300px;
            border: 1px solid;
            margin: 100px auto;
            display: flex;
            flex-direction: row;
            justify-content: flex-start;
            /* 单行单列 */
            align-items: flex-start;
            /*
             控制侧轴的方向
            */
            flex-wrap: wrap;
            /*  控制多行多列时,富裕空间的管理  会把所有行、列看成一个整体*/
            align-content: flex-end;
        }
        
        #wrap>.item {
            width: 50px;
            height: 50px;
            background: pink;
            text-align: center;
            line-height: 50px;
        }
    </style>
     <div id="wrap">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
    </div>

flex-grow

规则:可用空间 =(容器大小-所有相邻项目flex-basis的总和)

​ 400-5*50=150 (当没有定义flex-base时)

​ 400-5*0=400 (当定义flex-base时)

​ 可扩展空间=(可用空间/所有相邻项目flex-grow的总和)

​ 150/8=18.75 当没有定义flex-base时

​ 400/8=50 当定义flex-base时

​ 每项伸缩大小=(伸缩基准值+(可扩展空间*flex-grow值))

​ 50+18.75*4=125 当没有定义flex-base时

​ 50+18.75*1=68.75

​ 0+50*4=200 当定义flex-base时

​ 0+50=50

flex-shrink:收缩因子 默认值为1 前提 flex-wrap:nowrap

每项 flex 收缩大小=伸展基准值-(收缩比例/收缩比例总和*溢出的空间)[(益处空间/收缩比例总和之后再乘以比例)]

1.计算收缩因子与基准值乘的总和

2.计算收缩因数

​ 收缩因数=(项目的收缩因子*项目基准值)/第一步计算总和

3.移除空间的计算

​ 移除空间=项目收缩因数*负益处的空间

代码示例:
  <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        #wrap {
            width: 400px;
            height: 300px;
            border: 1px solid;
            margin: 100px auto;
            display: flex;
            flex-direction: row;
            justify-content: flex-start;
            align-items: flex-start;
        }
        #wrap>.item {
            width: 50px;
            height: 50px;
            background: pink;
            text-align: center;
            line-height: 50px;
            flex-grow: 1;
        }
        
        #wrap>.item:nth-child(1) {
            flex-grow: 4;
        }
    </style>
      <div id="wrap">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
    </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值