flex-shrink 的一个问题

发布于 2022-09-12 03:25:37 字数 1306 浏览 18 评论 0

描述

看如下代码,同时设置子元素的 flex-shrink 和 宽度 width 会出现什么情况

相关代码

<!DOCTYPE html>

<html lang="en">

 <head>

 <meta charset="UTF-8" />

 <meta name="viewport" content="width=device-width, initial-scale=1.0" />

 <title>Document</title>

 <style>

 .container {

     width: 200px;

     height: 100px;

     display: flex;

 }

 .box {

    height: 100px;

 }

 .box1 {

     flex-shrink: 2;

     width: 100px;

     background-color: gold;

 }

 .box2 {

     flex-shrink: 2;

     width: 50px;

     background-color: red;

 }

 .box3 {

     flex-shrink: 1;

     width: 100px;

     background-color: blue;

 }

 </style>

 </head>

 <body>

 <div class="container">

     <div class="box box1"></div>

     <div class="box box2"></div>

     <div class="box box3"></div>

 </div>

 </body>

</html>

浏览器显示结果

黄色盒子(box1)为 75px
红色盒子(box2)为 37.5px
蓝色盒子(box3)为 87.5px

image.png

image.png

image.png

为什么?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

人│生佛魔见 2022-09-19 03:25:37

三个item的宽度之和是250px,父容器200px,相差-50px.
需要每个item缩减来分配这个差值.如何缩减则按flex-shrink计算.

家里有笔外债要还,三兄弟每人出一部分抵债

计算方式是先求所有item flex-shrink * flex-basis(width) 之和,
100 * 2 + 50 * 2 + 100 * 1 = 400
再计算每个item在这个和中的占比
本例中为0.5 0.25 0.25
用这个比例分配差值(债务分配)
本例中为25px 12.5px 12.5px

过期情话 2022-09-19 03:25:37

本例定义了父容器宽(即主轴宽)为200px,由于子元素设置了伸缩基准值flex-basis100+50+100=250,那么子元素将会溢出250-200=50px
由于同时设置了收缩因子,所以加权综合可得100*2+50*2+100*1=400px
于是我们可以计算box1,box2,box3将被移除的溢出量是多少:
box1被移除溢出量:(100*2/400)*50,即约等25px
box2被移除溢出量:(50*2/400)*50,即约等于12.5px
box3被移除溢出量:(100*1/400)*100,即约等于12.5px
最后box1,box2,box3的实际宽度分别为:
100-25=75px,
50-12.5=37.5px,
100-12.5=87.5px

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文