我认为你可以使用
Flexbox来实现你想要的效果。如果我正确理解了你的问题,你想要做的是让每一行动态地将可用空间均匀地分配给其子元素。如果一行有两个子元素(徽章+一个项目),每个子元素应该有50%的可用空间,但如果有10个子元素(徽章+九个项目),每个子元素只应该有10%的可用空间。这个jsfiddle向你展示了如何使用flexbox来完成这个任务:
http://jsfiddle.net/renwfee1/2/
这是结构:
<div class="a_row">
<span class="badge">rowNumber 0</span>
<div class="item">item 0</div>
<div class="item">item 1</div>
...
<div class="item">item n</div>
</div>
重要的 CSS 部分是:
.a_row {
display: flex;
...
}
.item {
text-align: center;
flex-grow: 1;
}
“display: flex” 使行使用弹性盒子来布置其子元素,这样您就可以控制空白如何在子元素之间分配。这将带我们进入“flex-grow: 1”,它告诉浏览器,如果该项在弹性父级中并且存在其他未被其他子元素自然占用的可用空间,则该项愿意增长。我们在此将所有子项的 flex-grow “重要性”设置为一(默认为零,不增长),这意味着每个子项将获得可用额外空白空间的平均份额(如果有的话)。
如果您不希望子元素自动使用所有可用的空白空间,您可以从它们中删除 flex-grow 属性,并将以下内容添加到行中:
.a_row {
display: flex;
justify-content: space-between;
...
}
"justify-content: space-between" 指示浏览器在子元素之间放置任何可用的未被子元素使用的空白。这是它的外观:
http://jsfiddle.net/0unpfm5j/1/
如果这个解决了你的问题,我真的鼓励你去看一下
wonderful CSS Tricks article,它解释了所有与 flexbox 相关的属性以及它们的作用。
最后,请注意我没有包含任何浏览器前缀的 flexbox,如果你要在实际项目中使用,你应该加上。CSS Tricks 还有
另一篇不错的文章,介绍如何正确使用厂商前缀,所以也可以看一下那里。