在弹性布局中,一个
flex
子项的最终尺寸是基础尺寸(或内容尺寸)、弹性增长或收缩、最大最小尺寸共同作用的结果。
最终尺寸计算的优先级是:
最大最小尺寸限制 > 弹性增长或收缩 > 基础尺寸
- 基础尺寸由
flex-base
属性或width
属性,以及box-sizing
盒模型共同决定;- 内容尺寸最指最大内容宽度,当没有设置基础尺寸是会顶替基础尺寸的角色;
- 弹性增长指的是
flex-grow
属性,弹性收缩指的是flex-shrink
属性;- 最大尺寸主要受
max-width
属性限制;最小尺寸则比较复杂,受最小内容宽度、width
属性和min-width
属性共同影响。
很早之前就遇到过这个问题但没有整理,当时处理完问题之后就没有管了。昨天又遇到了同样的问题,因为嵌套的层次很深折腾了有2个小时,所以还是需要记录下来以免未来又忘了。
其实很简单,容器使用
width:0;flex:1;
即可解决问题。
但是稍微有点没有理解的是:为什么设置宽度为 0
时,使用 flex-grow:1
可以使容器放大,但是设置宽度为 100%
时,使用 flex-shrink:1
并不会让容器缩小。