问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

弹性盒flexbox的flex属性怎么用

发布网友 发布时间:2022-04-06 11:53

我来回答

2个回答

懂视网 时间:2022-04-06 16:15

本篇文章给大家带来的内容是关于flex-shrink如何计算?flex-shrink的计算方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

先回顾一下flex-grow

假设有一个div内包含三个子div1, div2, div3,宽度分别200px.
对于flex-grow对于剩余空间分配比例的计算相信用过flex布局的都非常熟悉了。这里还是简单列一下计算公式:
假设div1, div2, div3的flex-grow分别设置为 1,2,3. 现在假定外层div的宽度是800px, 那么剩下的800px - 3*200px = 200px如何分配给三个子div呢?
三个div额外分配的空间如下:

div1:1 / (1 + 2 + 3) 200px = 1/6 200px

div2:2 / (1 + 2 + 3) 200px = 2/6 200px

div3:3 / (1 + 2 + 3) 200px = 3/6 200px

1668f94048163317.png

重点来了,flex-shink到底是如何计算的呢?

flex-shink属性主要是在外层div宽度不够的情况下,子div收缩一定的空间来抵消不够的那部分宽度。
举个栗子,现在三个子div的宽度是600px, 但是我给外层div的宽度设置成500px, 那么不够显示的600-500 px应该怎么让子div们收缩掉这100px。这个时候flex-shrink就派上用场了,那具体怎么计算呢?
有人说这个属性跟flex-grow类似,计算方式也差不多吧(其实是有差异的)。但具体怎么算,很多人都说不清,包括一个MDN, W3CShcool也没给出具体公式。另外,我发现很多点赞数很多的文章,给出的计算公式是错误的。这也是为什么我想要写这边文章的原因。

好了,不卖关子,来说说怎么计算收缩空间吧!
先贴出例子的代码:
html部分:

<div class="outer">
 <div class='div1'>1</div>
 <div class='div2'>2</div>
 <div class="div3">3</div>
</div>

css部分:

.outer {
 width: 500px;
 display: flex;
}
.outer div {
 height: 80px;
}

.div1 {
 flex: 1 1 100px;
 background: red;
}
.div2 {
 flex: 1 2 200px;
 background: yellow;
}
.div3 {
 flex: 1 3 300px;
 background: green;
}

先计算总权重TW = 100px 1(flex-shrink) + 200px 2(flex-shrink) + 300px *3(flex-shrink) = 1400px
也就是每个div的宽度乘以flex-shrink系数的总和。

每个div收缩的空间为:div的宽度 flex-shrink系数/ 总权重TW 需要收缩的总宽度(在我们的例子中是600px - 500px = 100px)

所以各div最后的宽度计算公式如下:

div1最后的宽度 = 100px - 100*1/1400 * 100px = 92.86px

div2最后的宽度 = 200px - 200*2/1400 * 100px = 171.42px

div3最后的宽度 = 300px - 300*3/1400 * 100px = 235.72px

demo地址:https://jsfiddle.net/lingzhen...

截图如下:

1668f91509898ed4.png

Tips: 看见别人的文章的一些公式时,一定不要偷懒,自己写个例子验证一下,不然明明被误导了,却还给点赞了收藏了。毕竟实践出真知!

BTW: 这个属性相对flex-grow来说确实用的很少,所以很多人都没研究过它具体到底是怎么算的。

热心网友 时间:2022-04-06 13:23

flex-basis是设置元素的初始大小,如果没设置默认为主轴的size,也就是水平排列默认为元素的宽度,垂直排列默认为元素的高度;

flex-grow是设置扩大因子,也就是主轴方向上有剩余空间时,该元素分配到的剩余空间的比率。因为这时分配到的剩余空间为正值,所以元素是扩大的,所以叫做扩大因子。

flex-shrink是设置收缩因子,也就是主轴方向上剩余空间为负时,该元素分配到的剩余空间的比率。因为这时分配到的剩余空间为负值,所以元素是收缩的,所以叫做收缩因子。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如果银行拒贷有哪些办法 小天鹅滚筒洗衣机水位多少合适 阴阳师百闻牌攻略大全 百闻牌式神卡组阵容大全 阴阳师百闻牌三大妖狐阵容推荐 妖狐流派怎么搭配?-新手攻略-安族网... 阴阳师百闻牌妖狐快攻阵容 怎么搭配攻略推荐 阴阳师百闻牌妖狐技能攻略 妖狐属性及卡组搭配推荐-新手攻略-安族网... 阴阳师百闻牌妖狐最强卡组 阵容怎么搭配攻略 阴阳师百闻牌妖狐卡组推荐 怎么搭配攻略分享 带鹏字的公司名字大全 鹏字开头公司起名 叶罗丽娃娃玩具店在哪 作为一个大学学生会公众号开学的时候写点什么文章可以吸粉 微信电商平台 文章推送吸粉效果如何更好? 怎么做微商?微信如何吸粉引流 梦见儿子坐马车翻车到粪坑里我救他上来 梦见高高地站在马车上。刚出家问口就翻了 微信订阅号文章怎么吸粉怎样才会有跟多人关注 梦见马车侧翻压到人了 微信公众号如何吸引粉丝,不要死粉 做梦梦见坐马车里抱个男婴,还说赶紧下车再不下车马车就翻了 梦见马车翻了,把木头撒了一地、马跑了 微信公众号怎么吸粉啊,文章该怎么发是原创还是伪原创呢 怎样可以写出一篇吸粉的文章? 梦见一家人坐着马车,车翻到大坑里了,有人没事,有人在抢救,自己的姑娘也在抢救。 - 信息提示 急,求易中天品三国的读后感 易中天品三国 读后感20 篇 梦见老婆和我和别人坐马车翻了 &quot;我以儒家为线索贯穿这本书的始终,这里并没有 作业:易中天曾说过:“要成功,需要朋友,要取得巨大的成功,需要敌人。”请谈谈对这句话的理解!题目自 易中天权威吗,在线等答案? 辛弃疾的《西江月·夜行黄沙道中》的诗意是什么? 苹果手机通讯录群组不见了,怎么办? 苹果手机通讯录不见了怎么办? iphone7通讯录消失怎么办? iphone6电话通讯录隐藏不见了怎么恢复 苹果6 通讯录突然消失,左上角的群组也不见,试了很多次设置中iCloud 通讯录的开关,一点反映 苹果手机通讯录隐藏通讯录不见了怎么办 苹果5s通讯录突然没了怎么恢复? 苹果手机手机通讯录突然没了怎么恢复 在家录音需要准备什么设备和软件? 选物理好还是历史好? 高考考生选物理还是历史竞争大? 请问,我新高考选科,历史和物理分数差不多,但我对历史更感兴趣,物理学起来很吃力,我该怎么选? 如果你可以在历史与物理中选一个,你会选哪个? 用什么软件可以自己在家录制歌曲什么的? 用那个软件给自己录音? 在家怎么录音??什么软件?? 高一的学生现在选历史还是物理科好? 新高考如何选科? 请问怎么自己在家就可以录音啊?有视频有歌曲在一起的那种。要下载什么软件吗?要什么设备?