使用
position:absolute;
的弹性盒不再被视为弹性盒,因此会出现您当前的问题。如果您要使用
position:absolute;
,则必须使用预定义的宽度和高度。请参阅
w3c关于Flexbox的文档。通过切换到
position:absolute;
,您会强制弹性容器成为块级元素(这对所有具有
position:absolute;
的元素都会发生),从而消除其灵活性,并且因为其内容不是块元素而是弹性子项,它们只能影响弹性级别容器而不是块级容器。
Jquery解决方案:可以使用jquery来实现此目的,但这不是纯CSS的解决方案。获取容器的原始宽度,然后获取每个第6个元素的最大宽度(因为这时您的行会断开以形成新列),然后计算总列数并用它乘以每列的最大宽度,最后将其全部加起来以获得所需的容器宽度。随意添加或删除新列以进行测试。可参考
示例。
var count = $("ul.flex-container li:nth-child(6n)").length;
var firstWidth = Math.max.apply(null, $("ul.flex-container").map(function() {
return $(this).outerWidth(true);
}).get());
var childWidth = Math.max.apply(null, $("ul.flex-container li:nth-child(6n+6)").map(function() {
return $(this).outerWidth(true);
}).get());
var totalWidth = childWidth * count
$("ul.flex-container").css({
width: firstWidth + totalWidth,
});
ul.flex-container {
background: #090;
display: flex;
flex-flow: column wrap;
list-style: none;
max-height: 192px;
padding: 5px;
position: absolute;
}
ul.flex-container li {
background: rgba(255, 0, 0, .75);
color: #fff;
flex: 1 0 30px;
font-family: arial;
line-height: 30px;
margin: 1px;
padding: 0 2px;
min-width: 100px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<ul class="flex-container">
<li>Line 0</li>
<li>Line 1</li>
<li>Line 2</li>
<li>Line 3</li>
<li>Line 4</li>
<li>Line 5</li>
<li>Line 6</li>
<li>Line 7</li>
<li>Line 8 is a little bit longer</li>
<li>Line 0</li>
<li>Line 1</li>
<li>Line 2</li>
<li>Line 3</li>
<li>Line 4</li>
<li>Line 5</li>
<li>Line 6</li>
<li>Line 7</li>
<li>Line 8 is a little bit longer</li>
</ul>
inline-flex
,它仍然表现相同。我将其标记为重复,并让我知道您是否认为这样做不好。 - Asons