gap
FlexboxやGridの子要素の間に、隙間を空けるプロパティ。 負のマージンで外側の余白を打ち消していたハックを、1行の指定に置き換えられます。
今の書き方
隣接する子要素の間にだけ、隙間が入ります。 外側の端には入らないため、打ち消すための負のマージンもラッパーも要りません。 Gridでも同じように使えます。
.tags {
display: flex;
flex-wrap: wrap;
gap: 8px;
}
<ul class="tags">
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>以前の書き方
子要素に半分ずつマージンを付け、外側に出た分を親の負のマージンで打ち消していました。
負のマージンがはみ出さないよう、overflow: hiddenのラッパーも必要です。
.tags-wrapper {
overflow: hidden;
}
.tags {
display: flex;
flex-wrap: wrap;
margin: -4px;
}
.tags > li {
margin: 4px;
}
<div class="tags-wrapper">
<ul class="tags">
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>
</div>置き換えるときの注意点
- Gridでは2017年10月から全ブラウザで使えます(当時の名前は
grid-gap)。 Flexboxで使えるのは、Chrome 84・Firefox 63・Safari 14.1からです(2021年4月)。 - 負のマージンをやめると、ラッパーの
overflow: hiddenも消せます。 端の子要素のフォーカスの枠や影が、切れずに表示されるようになります。 grid-gapはgapの古い名前で、今も別名として効きます。 見つけたらgapに書き換えて構いません。gapは最小の隙間です。justify-content: space-betweenや子要素のマージンがあると、隙間はさらに広がります。
Browser Support
Chrome
v57+2017-03-09Edge
v16+2017-10-17Safari
v10.1+2017-03-27Safari (iOS)
v10.3+2017-03-27Firefox
v52+2017-03-07