离不开钱的flex

发布于:2024-04-26 ⋅ 阅读:(10) ⋅ 点赞:(0)

前言


最近公司在招聘,经常会问到应试者一个问题,“flex: 1 是哪些属性的缩写?”,很多同学答的都不是很好,今天我们来理解一下。

flex:1是哪些属性的缩写


flex:1 是 flex-grow: 1, flex-shrink: 1,flex-basis: 0% 的缩写;

解释下flex-grow


flex-grow是将剩余的空间,根据flex-grow的值平分,然后加到flex-basis上

可以看到子元素的flex-basis加起来是240px,父容器分完以后剩下260px,ABCD的flex-grow加起来10,那么每一份是26px,最终AB是60px + 26px = 86px,CD是60px + 26px * 4 = 164px。

是不是特别像老爷子突然噶了留下500块钱的遗产,兄弟4个来分,老大和老二说“我要60块钱,如果有多的可以再给我来一份”,老三和老四说“我们也要60块钱,如果有多的我们要四份”。最终老大和老二分到86,老三老四分到164,大家还都挺满意。

解释下flex-shrink

flex-shrink是将多出的空间根据flex-shrink的值平分,然后flex-basis减去分到的值

可以看到子元素的flex-basis加起来是600px,而父容器只有500px,那么少的100px,就得从ABCD往出扣,ABCD的flex-shrink加起来是10,那么每一份就是10px,最终AB是150px - 10px = 140px,CD是150px - 10px * 4 = 110px;

是不是特码像老父亲在外面吃喝嫖赌欠下500块钱的巨大债务,父债子偿嘛,兄弟4人出钱,老大和老二说"我们一人出150,超出部分我要收回1成",老三和老四说“我们也出150块钱,超出部分我要收回4成”。最终老大和老二出140块钱,老三老四出110块钱。

改正

jym,关于flex-shrink的计算错啦,在此感谢一下@忍者扔飞镖 我再来解释一下

要扣除的容量计算是没有问题的,还是子元素的flex-basis加起来减去父元素的宽度。

平分的比例是子项目的flex-basis * flex-shrink 除以每个子项目的flex-basis * flex-shrink之和。

上面例子

A的flex-basis 是100px, flex-shrink 是 1

B的flex-basis 是200px, flex-shrink 是 1

C的flex-basis 是300px, flex-shrink 是 4

D的flex-basis 是500px, flex-shrink 是 4

要平分的容量 NT = 100 + 200 + 300 + 400 - 500 = 500

最终A的宽度 = 100 - 100 * 1 / (100 * 1 + 200 * 1 + 300 * 4 + 400 * 4) * NT = 83.87096774193549

B的宽度 = 200 - 200 * 1 / (100 * 1 + 200 * 1 + 300 * 4 + 400 * 4) * NT = 167.74193548387098

C的宽度 = 300 - 300 * 4 / (100 * 1 + 200 * 1 + 300 * 4 + 400 * 4) * NT = 106.45161290322582

D的宽度 = 400 - 400 * 4 / (100 * 1 + 200 * 1 + 300 * 4 + 400 * 4) * NT = 141.93548387096774

这个计算真的有点出乎意料,不知道为什么要这么设计

结尾

通过上面例子想必大家对flex有了新的认识,最后给大家留个作业。

老父亲突然又噶了四个孩子不知道老父亲是有存款还是有负债,老大和老二说“如果老爸有遗产我要100块钱,多出来的我要1成,如果有负债我出100块钱,超出的我要收回4成”,老三和老四说“如果老爸有遗产我要100块钱,多出来的我要2成,如果有负债我出100块钱,超出的我要收回2成”,用flex如何表示?