使用flexbox时,创建装订线很麻烦,尤其是在涉及包装时。
您需要使用负边距(如问题所示):
#box {
display: flex;
width: 100px;
margin: 0 -5px;
}
...或更改HTML(如另一个答案所示):
<div class='flex-wrapper'>
<div class='flex'>
<div class='box'></div>
<div class='box'></div>
...
</div>
</div>
... 或者是其他东西。
无论如何,您都需要一个丑陋的技巧来使其正常工作,因为flexbox不提供“ flex-gap
”功能(至少目前如此))。
但是,使用CSS Grid Layout可以轻松解决装订线问题。
网格规格提供的属性可在网格项目之间创建空间,而忽略项目与容器之间的空间。这些属性是:
grid-column-gap
grid-row-gap
grid-gap
(以上两个属性的简写)
最近,该规范已更新以符合CSS Box Alignment Module,该提供了一组可在所有Box型号中使用的对齐属性。因此,属性现在为:
column-gap
row-gap
gap
(速记)
但是,并非所有支持Grid的浏览器都支持较新的属性,因此我将在下面的演示中使用原始版本。
另外,如果需要在物品和容器之间padding
留出一定的间距,那么在容器上的工作就很好了(请参见下面演示中的第三个示例)。
从规格:
10.1。天沟:row-gap
,column-gap
和gap
性质
该row-gap
和column-gap
性能(和他们的gap
速记)中,当在网格容器指定,定义网格的行和网格列之间的水槽。它们的语法在CSS框对齐3§8框之间的间隙中定义。
这些属性的影响就好像受影响的网格线获得了厚度:两条网格线之间的网格轨迹是代表它们的排水沟之间的空间。
.box {
display: inline-grid;
grid-auto-rows: 50px;
grid-template-columns: repeat(4, 50px);
border: 1px solid black;
}
.one {
grid-column-gap: 5px;
}
.two {
grid-column-gap: 10px;
grid-row-gap: 10px;
}
.three {
grid-gap: 10px;
padding: 10px;
}
.item {
background: lightgray;
}
<div class='box one'>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
</div>
<hr>
<div class='box two'>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
</div>
<hr>
<div class='box three'>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
</div>
更多信息: