写duozhuavue💚服装搜索页面时遇到了一个问题:flex 容器内,两个设置了 flex:1 的项目,最后宽度竟然不是相等的。
 
问题复现
样例代码
| 12
 3
 4
 5
 6
 
 | <div class="box"><div class="inner">One</div>
 <div class="inner">
 Two has more content xxxxxxxxxxxxxxxxxxxxxxxxxx ssssss
 </div>
 </div>
 
 | 
| 12
 3
 4
 
 | .box {width: 300px;
 display: flex;
 }
 
 | 
| 12
 3
 4
 5
 6
 
 | .inner {
 width: 0;
 
 flex: 1;
 }
 
 | 
| 12
 3
 4
 5
 6
 7
 
 | .inner {overflow: hidden;
 
 flex: 1;
 
 
 }
 
 | 
总结
- 水平方向的 flex盒子,可以用来创建等高列,各个列的宽度(尺寸)不一定相等;
- 各个列的最终宽度由列的初始尺寸和容器的剩余可用空间共同决定;
- 初始尺寸由显式设置的宽度决定。如果没有显式设置宽度,则由它们的内容宽度决定。如果没有内容,则宽度为 0;
- flex容器的剩余可用空间(可正可负),根据各个列的- flex-grow和- flex-shrink属性分配给各个列;
- overflow: hidden;创建- BFC容器后,- BFC容器内部内容的宽度不会影响容器宽度;