要设置flexbox项目之间的最小距离,我使用margin: 0 5px on .item和margin: 0 -5px on container。对我来说,这似乎是一种hack,但我找不到更好的方法来做到这一点。
#箱{
显示:flex;
宽度:100 px;
Margin: 0 -5px;
}
.item {
背景:灰色;
宽度:50 px;
高度:50 px;
边距:0 5px;
}
< div id =“盒子”>
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< div class = '物品' > < / div >
< / div >
确实有一种很好的、整洁的、只使用css的方法来做到这一点(可以认为“更好”)。
在这里发布的所有答案中,我只找到了一个成功使用calc()的答案(由Dariusz Sikorski)。但当提出:“但如果最后一行只有2项,它就失败了”时,就没有展开解。
这个解决方案解决了OP的问题,替代了负边际,解决了Dariusz的问题。
注:
本例只演示了3列布局
它使用calc()让浏览器以它想要的方式进行数学运算——
100%/3(尽管33.3333%也可以),以及
(1em/3)*2(尽管。66em也可以)。
如果元素少于列,则使用::after填充最后一行
.flex-container {
显示:flex;
justify-content:之间的空间;
flex-wrap:包装;
}
.flex-container:{后
内容:“”;
}
.flex-container >
.flex-container:{后
box-sizing: border-box;
宽度:calc((100%/3) - ((1em/3)*2));
}
.flex-container >:n -child(n + 4) {
margin-top: 1 em;
}
/*下面只是为了可视化项目*/
.flex-container >
.flex-container:{后
字体大小:2 em;
}
.flex-container {
margin-bottom: 4 em;
}
.flex容器> div {
text-align:中心;
background - color: # aaa级;
填充:1 em;
}
.flex-container:{后
边框:1px红色虚线;
}
<h2>示例1(2个元素)</h2>
< div class = " flex-container”>
< div > 1 < / div >
2 < div > < / div >
< / div >
<h2>示例2(3个元素)</h2>
< div class = " flex-container”>
< div > 1 < / div >
2 < div > < / div >
< div > 3 < / div >
< / div >
另见https://codepen.io/anon/pen/rqWagE
Flexbox的利润率并没有下降。
Flexbox没有任何类似于表的边界间距(编辑:CSS属性差距在较新的浏览器中实现了这一角色,我可以使用吗)
因此,实现你的要求有点困难。
根据我的经验,不使用:first-child/:last-child,并且对flex-wrap:wrap不做任何修改的“最干净”的方法是在容器上设置padding:5px,在子元素上设置margin:5px。这将在每个子元素之间以及每个子元素与其父元素之间产生10px的间隙。
Demo
.upper {
保证金:30 px;
显示:flex;
flex-direction:行;
宽度:300 px;
身高:80 px;
边框:1px红色实体;
填充:5 px;/* this */
}
.upper > div {
Flex: 1台自动;
边框:1px红色实体;
text-align:中心;
保证金:5 px;/*,这将导致10px的差距*/
}
.upper。MC /* multicol test */ {
flex-direction:列;
flex-wrap:包装;
宽度:200 px;
身高:200 px;
}
< div class = "上" >
< div > 3 < br / > aaa < / div >
< div > 3 < / div >
< div > 3 < br / > aaa < / div >
< div > 3 < br / > aaa < br / > aaa < / div >
< div > 3 < / div >
< div > 3 < / div >
< / div >
<div class="上MC ">
< div > 3 < br / > aaa < / div >
< div > 3 < / div >
< div > 3 < br / > aaa < / div >
< div > 3 < br / > aaa < br / > aaa < / div >
< div > 3 < / div >
< div > 3 < / div >
< / div >
从sawa的答案开始,这里有一个稍微改进的版本,允许您在没有周围边距的情况下设置项目之间的固定间距。
http://jsfiddle.net/chris00/s52wmgtq/49/
还包括Safari“-webkit-flex”版本。
.outer1 {
background-color: orange;
padding: 10px;
}
.outer0 {
background-color: green;
overflow: hidden;
}
.container
{
display: flex;
display: -webkit-flex;
flex-wrap: wrap;
-webkit-flex-wrap: wrap;
background-color: rgba(0, 0, 255, 0.5);
margin-left: -10px;
margin-top: -10px;
}
.item
{
flex-grow: 1;
-webkit-flex-grow: 1;
background-color: rgba(255, 0, 0, 0.5);
width: 100px;
padding: 10px;
margin-left: 10px;
margin-top: 10px;
text-align: center;
color: white;
}
<div class="outer1">
<div class="outer0">
<div class="container">
<div class="item">text</div>
<div class="item">text</div>
<div class="item">text</div>
<div class="item">text</div>
<div class="item">text</div>
<div class="item">text</div>
</div>
</div>
</div>