フレックスボックスを使用すると、特にラッピングが含まれる場合、溝を作成するのは面倒です。
(質問に示されているように)負のマージンを使用する必要があります:
#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>
... または、他の何か。
いずれの場合でも、フレックスボックスには「flex-gap
」機能が提供されていないため、機能させるには醜いハックが必要です(少なくとも今のところは))です。
ただし、ガターの問題は、CSSグリッドレイアウトを使用するとシンプルで簡単です。
グリッド仕様は、アイテムとコンテナーの間のスペースを無視しながら、グリッドアイテム間にスペースを作成するプロパティを提供します。これらのプロパティは次のとおりです。
grid-column-gap
grid-row-gap
grid-gap
(上記の両方のプロパティの省略形)
最近、仕様はCSS Box Alignment Moduleに準拠するように更新されました。これは、すべてのボックスモデルで使用するための一連の配置プロパティを提供します。したがって、プロパティは次のとおりです。
column-gap
row-gap
gap
(略記)
ただし、すべてのグリッド対応ブラウザーが新しいプロパティをサポートしているわけではないため、以下のデモでは元のバージョンを使用します。
また、アイテムとコンテナの間にスペースが必要な場合はpadding
、コンテナでうまく機能します(下のデモの3番目の例を参照)。
スペックから:
10.1 樋:row-gap
、column-gap
、およびgap
プロパティ
row-gap
そしてcolumn-gap
プロパティ(およびそれらのgap
グリッドコンテナに指定された場合略記)、グリッドの行とグリッド列間の樋を画定します。それらの構文はCSS Box Alignment 3§8ボックス間のギャップで定義されています。
これらのプロパティの効果は、影響を受けるグリッドラインが厚さを取得したかのようです。2つのグリッドライン間のグリッドトラックは、それらを表す側溝間のスペースです。
.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>
詳しくは: