Css 填充框和边框框中的弹性收缩系数如何?
假设我们有一个宽度为400px的flex容器 此容器内有三个弹性项:Css 填充框和边框框中的弹性收缩系数如何?,css,flexbox,Css,Flexbox,假设我们有一个宽度为400px的flex容器 此容器内有三个弹性项: :nth-child(1) { flex: 0 2 300px; } /* flex-grow, flex-shrink, flex-basis */ :nth-child(2) { flex: 0 1 200px; } :nth-child(3) { flex: 0 2 100px; } 因此flex项目的总宽度为600px,容器中的可用空间为-200px 在和的帮助下,我学习了在flex项之间分配负自由空间的基本公式
:nth-child(1) { flex: 0 2 300px; } /* flex-grow, flex-shrink, flex-basis */
:nth-child(2) { flex: 0 1 200px; }
:nth-child(3) { flex: 0 2 100px; }
因此flex项目的总宽度为600px,容器中的可用空间为-200px
在和的帮助下,我学习了在flex项之间分配负自由空间的基本公式:
:nth-child(1) { flex: 0 2 300px; } /* flex-grow, flex-shrink, flex-basis */
:nth-child(2) { flex: 0 1 200px; }
:nth-child(3) { flex: 0 2 100px; }
步骤1
将每个收缩值乘以其基础,然后将它们相加:
:nth-child(1) 2 * 300 = 600
:nth-child(2) 1 * 200 = 200
:nth-child(3) 2 * 100 = 200
总数=1000
步骤2
将上述各项除以总和,以确定收缩系数:
步骤3
将收缩系数乘以负自由空间,以确定从每个项目中移除的空间:
:nth-child(1) .6 * -200px = -120px
:nth-child(2) .2 * -200px = -40px
:nth-child(3) .2 * -200px = -40px
因此,每个弹性项目的计算大小应为:
:nth-child(1) 300px - 120px = 180px
:nth-child(2) 200px - 40px = 160px
:nth-child(3) 100px - 40px = 60px
在Chrome、Firefox和IE11上进行了测试,这些数字得到了验证。这个计算非常有效
.flex{
显示器:flex;
宽度:400px;
高度:50px;
保证金:0;
填充:0;
列表样式:无;
文本对齐:居中;
}
.flex li:第n个孩子(1){
flex:02300px;
背景:橙色;
}
.flex li:第n个孩子(2){
flex:011200px;
背景:黄绿色;
}
.flex li:第n个孩子(3){
flex:02100px;
背景:水;
}
- 180像素
- 160像素
- 60像素
将其定义为
对于线上的每个未冻结项目,乘以其弹性收缩系数
通过其内部,并注意这是其缩放的弯曲
收缩系数。求项目与所有项目之和的比率
线上未冻结的物品。将项目的属性设置为
它减去绝对值的一小部分
与比例成比例
简化、冻结的弹性物品是那些不能或不必再弯曲的物品。我将假设没有min width
限制和非零弯曲收缩系数。通过这种方式,所有flex项最初都被解冻,并且它们在flex循环的一次迭代后都被冻结
内部flex基本大小取决于的值,由CSS2UI定义为
:指定的宽度和高度(以及相应的最小/最大属性)分别应用于 元素的内容框。元素的填充和边框是 在规定的宽度和高度之外进行布局和绘制内容框
:此元素上宽度和高度的长度和百分比值(以及相应的最小/最大属性)决定 元素的边框框。即,在上指定的任何填充或边框 元素在指定的范围内进行布局和绘制 和。内容宽度和高度由以下公式计算: 从中减去各边的边框和填充宽度 指定的宽度和高度属性。[…]使用的值,如 例如通过getComputedStyle()公开,也请参阅 边框框边框框
框大小:内容框
的内部大小,或者用作框大小:边框框
的外部大小。另一个可以通过添加或减去边框和填充宽度来计算
忽略很多细节,算法将类似于
让sumScaledShrinkFactors=0,
remainingFreeSpace=flexContainer.innerMainSize;
用于(弹性项的项目){
remainingFreeSpace-=item.outerFlexBasis;
item.scaledShrinkFactor=item.innerFlexBasis*item.flexShrinkFactor;
SumScaledShrinkFactor+=项。scaledShrinkFactor;
}
用于(弹性项的项目){
let ratio=item.scaledShrinkFactor/sumscaledShrinkFactor;
item.innerWidth=item.innerFlexBasis+比率*剩余空闲空间;
}
没有衬垫,就像你解释的那样
(width)
innerW │ padd │ outerW
───────┼──────┼───────
300px * (1 + 2 / 1000px * -200px) = 180px │ 0px │ 180px
200px * (1 + 1 / 1000px * -200px) = 160px │ 0px │ 160px
100px * (1 + 2 / 1000px * -200px) = 60px │ 0px │ 60px
───────┼──────┼───────
400px │ 0px │ 400px
使用10px
水平填充,可用空间减少了3*2*10px=60px
,因此现在是-260px
(width)
innerW │ padd │ outerW
───────┼──────┼───────
300px * (1 + 2 / 1000px * -260px) = 144px │ 20px │ 164px
200px * (1 + 1 / 1000px * -260px) = 148px │ 20px │ 168px
100px * (1 + 2 / 1000px * -260px) = 48px │ 20px │ 68px
───────┼──────┼───────
340px │ 60px │ 400px
使用box size:border box
时,指定的柔性底座是外部底座,因此从中减去衬垫以计算内部底座,即280px
,180px
,80px
。然后,缩放的弯曲收缩系数之和变为2*280px+180px+2*80px=900px
。可用空间与无填充的情况类似,因为外部柔性底座是相同的。请注意,getComputedStyle
检索到的width
现在将是外部的,因此填充将添加回末尾
(width)
innerW │ padd │ outerW
────────┼──────┼────────
280px * (1 + 2 / 900px * -200px) ≈ 155.6px │ 20px │ 175.6px
180px * (1 + 1 / 900px * -200px) = 140.0px │ 20px │ 160.0px
80px * (1 + 2 / 900px * -200px) ≈ 44.4px │ 20px │ 64.4px
────────┼──────┼────────
340.0px │ 60px │ 400.0px
定义为
对于线上的每个未冻结项目,乘以其弹性收缩系数
通过其内部,并注意这是其缩放的弯曲
收缩系数。求项目与所有项目之和的比率
线上未冻结的物品。将项目的属性设置为
它减去绝对值的一小部分
与比例成比例
简化、冻结的弹性物品是那些不能或不必再弯曲的物品。我将假设没有min width
限制和非零弯曲收缩系数。通过这种方式,所有flex项最初都被解冻,并且它们在flex循环的一次迭代后都被冻结
内部flex基本大小取决于的值,由CSS2UI定义为
:指定的宽度和高度(以及相应的最小/最大属性)分别应用于 元素的内容框。元素的填充和边框是 在规定的宽度和高度之外进行布局和绘制内容框
:此元素上宽度和高度的长度和百分比值(以及相应的最小/最大属性)决定 t形边框盒边框框
280px * (1 + 2 / 900px * -200px) + 20px = 175.5px 180px * (1 + 1 / 900px * -200px) + 20px = 160px 80px * (1 + 2 / 900px * -200px) + 20px = 64.4px