前一阵在使用flex布局进行宽度处理时,发现了flex-grow并非按照预期的状况进行比例处理,顿时以为有点懵逼。css
在stackoverflow
搜索以后,终于搞明白了其中的奥秘。html
话很少说,直接上代码:布局
.flex-container { display: flex; width: 100%; } .flex-item { flex-grow: 1; list-style-type: none; } .big { flex-grow: 3; }
<ul class="flex-container"> <li class="flex-item big">理论应该是小的三倍长</li> <li class="flex-item">但实际并非这样</li> </ul>
咱们参照阮一峰的flex教程就能够看到对于这个属性的解释:flex
flex-grow
属性定义项目的放大比例,默认为0,即若是存在剩余空间,也不放大code若是全部项目的
flex-grow
属性都为1,则它们将等分剩余空间(若是有的话)。若是一个项目的flex-grow
属性为2,其余项目都为1,则前者占据的剩余空间将比其余项多一倍。htm
按照正常理解咱们的代码没有问题啊,怎么比例并非设置的那样呢?blog
重点来了,这里的剩余空间才是关键。
对于一个flex-item
来讲,它的初始空间并非0,而是另外一个属性值auto
(元素内容占用的空间)。教程
这样就致使了咱们设置了flex-grow
的效果并非将整个宽度进行等比例的拆分,而是对去除内容的宽度进行了比例划分。文档
而若是想要打到咱们实际所想的效果,咱们就须要使用flex
属性来代替原来的。
由于根据MDN文档的描述,咱们就知道了get
flex
规定了弹性元素如何伸长或缩短以适应flex容器中的可用空间。这是一个简写属性,能够同时设置flex-grow
,flex-shrink
与flex-basis
。
这样咱们使用flex
时只指定一个数字(宽度值会转化成flex-basis
)时,flex-basis
会自动转换为0%
,而数字正好转换成了要设置的比例(flex-grow
值)。
因而修改css代码以下:
.flex-item { flex: 1; } .big { flex: 3; }
这样设置的比例就如咱们所愿的显示出来了。