我试图弄清楚flexbox在以下情况下是如何工作的(应该工作吗?……):
null
.holder {
width: 500px;
background: lightgray;
display: flex;
flex-direction: row;
justify-content: space-between;
flex-wrap: nowrap;
}
.v2 {
width: 320px;
}
.child {
display: inline-block;
border: 1px solid black;
padding: 30px 0px;
text-align: center;
}
<div class="holder">
<div class="child">At a glance</div>
<div class="child">After coverage ends</div>
<div class="child">Forms & documents</div>
</div>
<br>
<br>
<div class="holder v2">
<div class="child">At a glance</div>
<div class="child">After coverage ends</div>
<div class="child">Forms & documents</div>
</div>
<br>
<br>
<div class="holder v2">
<div class="child">At a
<br>glance</div>
<div class="child">After coverage
<br>ends</div>
<div class="child">Forms &
<br>documents</div>
</div>
null
此处为JSFiddle
问题是,当有足够的空间来容纳元素时,我得到了一个很好的紧身的孩子们,它们之间有均匀的间距。(第一个,顶部div块)
然而,当没有足够的空间,并且孩子们内部的文本开始换行时,这一切就会朝着一个奇怪的方向发展--孩子们不再紧密地适合,即使换行之后,flex孩子们周围有足够的空间,因为不再合适,所以周围的空间也没有机会工作(第二个div块)
然而,如果我在自动换行发生的地方加上手动换行,所有的东西都按“应该”排列…(底部,第三块)
我想要的是总是让孩子们紧紧地装在他们的盒子里(黑色的边框),不管剩下的空间是什么,都将均匀地分布在他们之间,而不是我必须添加手动换行符(在我的情况下这不是一个选择)
有可能吗?…
在CSS中,父容器不知道其子容器何时包装。因此,它继续扩大其规模,而忽略了内部发生的事情。
换句话说,浏览器在初始级联上呈现容器。当子文件包装时,它不会回流文档。
这就是为什么容器不会收缩--包裹较窄的布局。它只是继续进行,就好像没有任何东西被包裹,就像右边的预留空间所证明的那样。
水平空白的最大长度是容器预期存在的元素的长度。
在下面的演示中,当窗口水平调整大小时,可以看到空格来来去去
您将需要一个JavaScript解决方案(参见此处和此处)。。。或CSS媒体查询(请参阅此处)。
在处理包装文本时,容器上的text-align:right
在某些情况下可能会有帮助。
好好看看我换的小提琴:
.holder
宽度
到最大宽度
(单位为.v
类).holder
修改为环绕
和空格环绕
其子级.v
类为清楚起见
.child
中添加了flex:0 0
Flexbox几乎总是需要设置max-width
,这比width
更灵活。根据您需要.child
ren的行为方式,修改flex-grow
和flex-shrink
中的flex-grow
以满足您的需要。(flex:1 0
的结果看起来也不错)
。。。不需要Javascript.。。
更新Codrops Flexbox参考真的帮了我很多了解FBL的东西。。。
你的块之所以有这样的行为是因为CSS渲染。
在第一种情况下,浏览器不知道块何时变得太小,无法容纳它的内容。所以它一直拉伸,直到达到最大值,然后呈现文本。
在最后一种情况下,您告诉浏览器在哪里中断,这样它就知道元素不应该变宽。
你可以轻松解决这个问题的唯一方法就是自己设置休息时间。