css flex-shrink 属性指定了 flex 元素的收缩规则
flex 元素仅在默认宽度之和大于容器的时候才会发生收缩,其收缩的大小是依据 flex-shrink 的值
如果元素不是弹性盒对象的元素,则 flex-shrink 属性不起作用
默认值 | 1 |
---|---|
继承 | 否 |
可动画化 | 是 |
版本 | CSS3 |
JavaScript 语法 | object.style.flexShrink="5" |
flex-shrink: *number* |initial|inherit;
值 | 描述 |
---|---|
number | 一个数字,规定项目将相对于其他灵活的项目进行收缩的量。默认值是 1 |
initial | 设置该属性为它的默认值 |
inherit | 从父元素继承该属性 |
下表中的数字表示支持该属性的第一个浏览器的版本号
紧跟在 -webkit-, -ms- 或 -moz- 后的数字为支持该前缀属性的第一个版本
Chrome | IE | Firefox | Safari | Opera |
---|---|---|---|---|
29.0 21.0 -webkit- | 11.0 10.0 -ms- | 28.0 18.0 -moz- | 9.0 6.1 -webkit- | 17.0 |
A, B, C 设置 flex-shrink:1, D , E 设置为 flex-shrink:2
<!DOCTYPE html>
<meta charset="utf-8">
<title>简单教程(fly63.com)</title>
<style>
.content{display:flex;width:500px;}
.contentdiv{flex-basis:120px;border:3px solid rgba(0,0,0,.2);}
.box{flex-shrink:1;}
.box1{flex-shrink:2;}
</style>
<p>div 总宽度为 500px, flex-basic 为 120px。</p>
<p>A, B, C 设置 flex-shrink:1。 D , E 设置为 flex-shrink:2</p>
<p>D , E 宽度与 A, B, C 不同</p>
<div class="content">
<div class="box" style="background-color:red;">A</div>
<div class="box" style="background-color:lightblue;">B</div>
<div class="box" style="background-color:yellow;">C</div>
<div class="box1" style="background-color:brown;">D</div>
<div class="box1" style="background-color:lightgreen;">E</div>
</div>
flex-shrink 的默认值为1,如果没有显示定义该属性,将会自动按照默认值1在所有因子相加之后计算比率来进行空间收缩
范例中 A、B、C 显式定义了 flex-shrink 为 1,D、E 定义了 flex-shrink 为 2,所以计算出来总共将剩余空间分成了 7 份,其中 A、B、C 占 1 份,D、E 占 2 份,即1:1:1:2:2
我们可以看到父容器定义为 500px,子项被定义为 120px,子项相加之后即为 600 px,超出父容器 100px
那么超出的 100px 需要被 A、B、C、D、E 消化 通过收缩因子,所以加权综合可得1001+1001+1001+1002+100*2=700px
于是我们可以计算 A、B、C、D、E 将被移除的溢出量是多少
A 被移除溢出量:(100*1/700)*100,即约等于14px
B 被移除溢出量:(100*1/700)*100,即约等于14px
C 被移除溢出量:(100*1/700)*100,即约等于14px
D 被移除溢出量:(100*2/700)*100,即约等于28px
E 被移除溢出量:(100*2/700)*100,即约等于28px
最后 A、B、C、D、E的实际宽度分别为:120-14=106px, 120-14=106px, 120-14=106px, 120-28=92px,120-28=92px,此外,这个宽度是包含边框的