弹性盒收缩和增长计算

原址点这里

弹性盒收缩和增长计算

flex-shrink 弹性收缩

flex-shrink 用来定义弹性布局中项目的收缩规则,它的计算比较复杂。

先有 HTML 结构如下:

<section>
  <div></div>
  <div></div>
  <div></div>
</section>

编写以下代码使其成为弹性布局:

section {
  display: flex;
  width: 400px;
}
div {
  height: 200px;
}

div:nth-of-type(1) {
  flex-basis: 200px;
  flex-shrink: 1;
  background-color: aqua;
}
div:nth-of-type(2) {
  flex-basis: 300px;
  flex-shrink: 2;
  background-color: silver;
}
div:nth-of-type(1) {
  flex-basis: 100px;
  flex-shrink: 3;
  background-color: tomato;
}
  • 接下来把弹性容器的宽度记作 A
  • 把项目宽度总和记作 B,即 flex-basis 的和;
  • 总收缩宽度记作 C,即 B - A 的差;
  • 项目宽度权重总和为记作 D,有:

C = B − A = ( 200 p x + 300 p x + 100 p x ) − 400 p x = 200 p x D = 200 ∗ 1 + 300 ∗ 2 + 100 ∗ 3 = 1100 \begin{aligned} C &= B - A \\ &= (200px + 300px + 100px) - 400px \\ &= 200px \\ D &= 200 * 1 + 300 * 2 + 100 * 3 = 1100 \end{aligned} CD=BA=(200px+300px+100px)400px=200px=2001+3002+1003=1100

每个项目的收缩大小公式为 flex-basic 的值乘 flex-shrink 的值除以宽度权重总和再乘以总收缩宽度,即:

f l e x B a s i c ∗ f l e x S h r i n k / D ∗ C flexBasic * flexShrink / D * C flexBasicflexShrink/DC

那么题设中所给三个 div 元素最终宽度应该为:

d i v 1 = 200 p x − 200 ∗ 1 / 1100 ∗ 200 p x ≈ 163.64 p x d i v 2 = 300 p x − 300 ∗ 2 / 1100 ∗ 200 p x ≈ 190.90 p x d i v 3 = 100 p x − 100 ∗ 3 / 1100 ∗ 200 p x ≈ 45.45 p x \begin{aligned} div1 &= 200px - 200 * 1 / 1100 * 200px ≈ 163.64px \\ div2 &= 300px - 300 * 2 / 1100 * 200px ≈ 190.90px \\ div3 &= 100px - 100 * 3 / 1100 * 200px ≈ 45.45px \end{aligned} div1div2div3=200px2001/1100200px163.64px=300px3002/1100200px190.90px=100px1003/1100200px45.45px

flex-grow 弹性增长

相比弹性收缩,弹性增长就简单很多。

依旧使用这个 HTML 结构:

<section>
  <div></div>
  <div></div>
  <div></div>
</section>

编写以下代码使其成为弹性布局:

section {
  display: flex;
  /* 这里修改为 900 */
  width: 900px;
}
div {
  height: 200px;
}

div:nth-of-type(1) {
  flex-basis: 200px;
  /* 把 flex-shrink 改为 flex-grow */
  flex-grow: 1;
  background-color: aqua;
}
div:nth-of-type(2) {
  flex-basis: 300px;
  flex-grow: 2;
  background-color: silver;
}
div:nth-of-type(1) {
  flex-basis: 100px;
  flex-grow: 3;
  background-color: tomato;
}
  • 接下来把弹性容器的宽度记作 A,依题意是 900px
  • 把项目宽度总和记作 B,即 flex-basis 的和;
  • 总增长宽度记作 C,即 A - B 的差;
  • 项目 增长权重总和 为记作 D,有:

C = A − B = 900 p x − ( 200 p x + 300 p x + 100 p x ) = 300 p x D = 1 + 2 + 3 = 6 \begin{aligned} C &= A - B \\ &= 900px - (200px + 300px + 100px) \\ &= 300px \\ D &= 1 + 2 + 3 = 6 \end{aligned} CD=AB=900px(200px+300px+100px)=300px=1+2+3=6

每个项目的宽度增长公式为 flex-grow 的值除以增长权重总和再乘以总增长宽度,即:

f l e x G r o w / D ∗ C flexGrow / D * C flexGrow/DC

那么题设中所给三个 div 元素最终宽度应该为:

d i v 1 = 200 p x + 1 / 6 ∗ 300 p x ≈ 250 p x d i v 2 = 300 p x + 2 / 6 ∗ 300 p x ≈ 400 p x d i v 3 = 100 p x + 3 / 6 ∗ 300 p x ≈ 350 p x \begin{aligned} div1 &= 200px + 1 / 6 * 300px ≈ 250px \\ div2 &= 300px + 2 / 6 * 300px ≈ 400px \\ div3 &= 100px + 3 / 6 * 300px ≈ 350px \end{aligned} div1div2div3=200px+1/6300px250px=300px+2/6300px400px=100px+3/6300px350px

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
float和弹性布局(flexbox)是CSS中两种不同的布局方式。它们有以下几点区别: 1. 适用范围:float属性主要用于在较大的文本文章中设置图像,而弹性布局更适用于整个网站的布局以及小的UI元素。 2. 兼容性:float属性在大多数现代浏览器中都有良好的支持,但不兼容IE8及以下的浏览器。弹性布局也不兼容IE8及以下版本的浏览器。 3. 使用场景:float属性常用于实现图文混排效果,例如将文本环绕在图片周围。而弹性布局更适用于需要灵活调整元素位置和大小的场景,例如实现等分布局、水平居中等。 4. 功能和特性:弹性布局提供了更多的功能和特性,例如可以指定元素的排列方向、对齐方式、自动调整元素大小等。而float属性主要用于实现元素的浮动效果。 总结来说,float属性更适用于图文混排以及较旧的浏览器兼容性要求不高的场景,而弹性布局更适用于整个网站的布局以及需要灵活调整元素位置和大小的场景,并且具有更多的功能和特性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [css中浮动(float),弹性布局(display:flex)和网格布局(display:grid)的优缺点](https://blog.csdn.net/qq_51536454/article/details/128822289)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [基础的CSS3弹性Flexbox布局使用实例](https://download.csdn.net/download/weixin_38702339/13982479)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值