【面试题flex】关于弹性盒子中 flex: 0 1 auto 的一系列问题

一 弹性盒子中 flex: 0 1 auto 表示什么意思

三个参数分别对应的是 flex-grow, flex-shrinkflex-basis,默认值为 0 1 auto。

1.flex-grow 属性定义项目的放大比例,默认为 0,即如果存在剩余空间,也不放大。

2.flex-shrink 属性定义了项目的缩小比例,默认为 1,即如果空间不足,该项目将缩小。

3.flex-basis 属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。

二 计算出下列盒子各站多少宽度?

#box {display:flex;width:400px;height:100px;}
#box li:nth-child(1){-webkit-flex:1 1 400px;flex:1 1 400px;} #box li:nth-child(2){-webkit-flex:1 2 400px;flex:1 2 400px;} #box li:nth-child(3){-webkit-flex:1 2 400px;flex:1 2 400px;} <ul id="box" class="box"> <li>flex:1 1 400px;</li> <li>flex:1 2 400px;</li> <li>flex:1 2 400px;</li> </ul>

一看过去懵了,这个是怎么计算的,以前没遇到过,凉了凉了...

下面我就来看一下这个题目,及详细解释:

上面定义了父容器(即主轴宽为400),由于子元素设置了flex,
即 400+400+400=1200px, 那么子元素将会溢出1200-400=800px;
由于同时设置了收缩因子,所以加权综合可以得出:400*1+400*2+400*2=2000px;
于是可以得出三个li标签被溢出量是多少:
第一个li:(400*1/2000)*800 = 160px;
第二个li: (400*2/2000)*800 = 320px;
第三个li: (400*2/2000)*800 = 320px;
所以可以三个li标签实际宽度为:400-160=240px; 400-320=80px; 400-320px=80px;

经过上面详细的解释,想必各位都清楚了如何计算flex中子元素的宽度,下面来看下一题,顺便练练手!

#box {display:flex;width:400px;height:100px;}
#box li:nth-child(1){-webkit-flex:1 1 400px;flex:1 0 100px;}
#box li:nth-child(2){-webkit-flex:1 2 400px;flex:2 0 100px;}
#box li:nth-child(3){-webkit-flex:1 2 400px;flex:3 0 100px;}

<ul id="box" class="box">
    <li>flex:1 0 100px;</li>
    <li>flex:2 0 100px;</li>
    <li>flex:3 0 100px;</li>
</ul>

你能算出它们实际占多少宽度嘛!

解释:

上面定义了父容器(即主轴宽为400),由于子元素设置了flex,
即 100+100+100=300px, 那么超出情况则400-300=100px;因为设置了flex-grow,则:
100/(1+2+3)=16.67; 于是可以得出三个li标签最后的宽度为: 第一个li: 100+1*16.67=116.67px;
第二个li: 100+2*16.67=133.34px; 第三个li: 100+3*16367=150px;

小伙伴你算出来了嘛?

 

posted @ 2021-04-26 16:46  迷茫_D  阅读(710)  评论(0编辑  收藏  举报