flex:flex-grow flex-shrink flex-basis;
flex-grow 属性用于设置或检索弹性盒子的扩展比率。属性值number 一个数字,规定项目将相对于其他灵活的项目进行扩展的量。默认值是 0。
flex-shrink 属性指定了 flex 元素的收缩规则。flex 元素仅在默认宽度之和大于容器的时候才会发生收缩,其收缩的大小是依据 flex-shrink 的值。
flex-basis 属性用于设置或检索弹性盒伸缩基准值。属性值number 一个长度单位或者一个百分比,规定灵活项目的初始长度。

注意:如果元素不是弹性盒对象的元素,则 flex属性不起作用

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        .bigblock{
            width: 800px;
            height: 100px;
            display: flex;
            flex-direction: row;
            margin: auto;

        }
        .bigblock>div{
            flex-shrink: 1;
            flex-basis: 300px;
        }
        .bigblock>div:nth-child(3){
            flex-grow: 2;
            flex-shrink: 2;
                    }
    </style>
</head>
<body>
<div class="bigblock">
    <div style="background: red">A</div>
    <div style="background: green;">B</div>
    <div style="background: burlywood;">C</div>
</div>
</body>
</html>

本例中A、B显式定义了 flex-shrink 为 1,C 定义了 flex-shrink 为 2,所以计算出来总共将剩余空间分成了 4份,其中 A、B 占 1 份,C占 2 份,即1:1:2
我们可以看到父容器定义为 800px,子项被定义为 300px,子项相加之后即为 900 px,超出父容器 100px。那么超出的 100px 需要被 A、B、C消化 通过收缩因子
A收缩量:1/4100=25;
B收缩量:1/4
100=25;
C收缩量:2/4*100=50;
最后A、B、C的实际宽度分别为:300-25=275px, 300-25=275px, 300-50=250px, 此外,这个宽度是包含边框的。
在这里插入图片描述
经测试计算结果与图片符合。

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
    <style>
        .bigblock{
            width: 800px;
            height: 100px;
            display: flex;
            flex-direction: row;
            margin: auto;

        }
        .bigblock>div{
            flex-grow: 1;
            flex-shrink: 1;
            flex-basis: 100px;
      
        }
        .bigblock>div:nth-child(3){
            flex-grow: 2;
            flex-shrink: 2;
                    }
    </style>
</head>
<body>
<div class="bigblock">
    <div style="background: red"></div>
    <div style="background: green;"></div>
    <div style="background: burlywood;"></div>
</div>
</body>
</html>

本例中A、B显式定义了 flex-grow 为 1,C 定义了 flex-grow 为 2,所以计算出来总共将剩余空间分成了 4份,其中 A、B 占 1 份,C占 2 份,即1:1:2
我们可以看到父容器定义为 800px,子项被定义为 100px,子项相加之后即为 300 px,比父容器少500px。那么少的 500px 需要扩展,按扩展比率
A收缩量:1/4500=125;
B收缩量:1/4
500=125;
C收缩量:2/4*500=250;
最后A、B、C的实际宽度分别为:100+125=225px,100+125=225px,100+225=325px, 此外,这个宽度是包含边框的。
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐