Open
Description
<div class="container">
<div class="left"></div>
<div class="right"></div>
</div>
<style>
* {
padding: 0;
margin: 0;
}
.container {
width: 600px;
height: 300px;
display: flex;
}
.left {
flex: 1 2 300px;
background: red;
}
.right {
flex: 2 1 200px;
background: blue;
}
</style>
注:此题和 155 题 left、right 样式有些不同
Activity
[-]第 156 题:求最终 left、right 的宽度[/-][+]第 156 题:求最终 left、right 的宽度(变形)[/+]jxmlearner commentedon May 14, 2020
剩余的空间:600 - (300 + 200) = 100。
子元素的 flex-grow 的值分别为 1,2, 剩余空间用3等分来分
100 / 3 = 33.3333333
所以 left = 300 + 1 * 33.33 = 333.33
right = 200 + 2 * 33.33 = 266.67
waka3 commentedon May 14, 2020
flex-grow和flex-shrink的计算方式还不一样 O(∩_∩)O
luxinru commentedon May 14, 2020
是的 我参照shrink计算的值和实际代码跑出来的不一样 上面那位兄弟是对的
lqzo commentedon May 14, 2020
flex-grow 指定剩余空间以什么样的比例(增长系数 / 增长系数总和)分配给元素
子元素的 flex-grow 的值分别为 1, 2
剩余空间:600 - 300 - 200 = 100
两个元素的宽度分别为
300 + 100 * 1 / 3 = 333.33px
200 + 100 * 2 / 3 = 266.67px
WangYingYaTou commentedon May 14, 2020
精彩精彩,学到了
zrx1118 commentedon May 14, 2020
我觉得考flex-shrink更有意思一些
waka3 commentedon May 14, 2020
https://developer.mozilla.org/zh-CN/docs/Web/CSS/CSS_Flexible_Box_Layout/Controlling_Ratios_of_Flex_Items_Along_the_Main_Ax 可以参考这个,我昨天看了一遍,今天又看了一遍。 哈哈
hexuan-aurora commentedon May 14, 2020
主容器宽度大于所有子项的宽度和,有剩余空间,因而按照子项的
flex-grow
进行分配:flex-grow
为 1、2,因此需要将剩余空间进行按 3 等分进行划分JackySoft commentedon May 19, 2020
如果容器宽度是400,该怎么计算?
waka3 commentedon May 20, 2020
容器宽度400是子元素总宽度超出总宽度,这时候是缩放适应,flex-shrink。你可以去看一下155题
listentolife commentedon May 24, 2020
因为父容器的宽度是600px,大于left跟right容器的宽度和,余100px,
没有margin跟padding影响,然后flex-grow的比是1:2,
所以left会多100 / 3 * 1 = 33.3的宽度,right会多100 / 3 * 2 = 66.7
最终left宽300 + 33.3 = 333.3,right宽200 + 66.7 = 266.7
ron0115 commentedon May 25, 2020
由于未撑满, 所以这时候只需要考虑flex-grow的属性就行了吗, 设置了flex-shrink的值都可以忽略?
qinro commentedon Sep 6, 2020
flex属性是flex-gorw、flex-shrink、flex-basic
slogeor commentedon Oct 12, 2020
剩余空间分配公式
分配到的剩余空间宽度 =
剩余空间宽度 * (自身元素的 flex-grow 值 / 所有元素的 flex-grow 值的和)
解题思路
因为 300 + 200 < 600,故需要使用
剩余空间分配公式
。300 + 100 * (1 / (1 + 2)) = 333.333
200 + 100 * (2 / (1 + 2)) = 266.667
tryingpzm commentedon Jan 6, 2021
上一个题通过常识使用了这个题的方法,完美挂掉;
这一个题学到了,使用的上一个题的方法,再次挂掉;
lxinr commentedon Mar 8, 2021
设置了
flex-basis
即类似于设置了width
此时父容器宽度
600px
大于子容器总宽度300px + 200px
,因此适用剩余空间
概念,此时根据flex-grow
的值来计算,flex-shrink
的值无效剩余空间
W = 600 - 300 - 200 = 100
left宽度 = 300 + (1/(1+2)) * W = 300 + 33.333 = 333.333px
right宽度 = 200 + (2/(1+2)) * W = 200 + 66.666 = 266.666px
kklwoe commentedon Aug 3, 2021
flex-grow和flex-shrink这两个的算法有点区别,grow算法还是直接些