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-column-gap
grid-row-gap
grid-gap
(위의 두 속성에 대한 속기)
최근이 사양은 CSS Box Alignment Module 을 준수하도록 업데이트되어 모든 Box 모델에서 사용할 수있는 일련의 정렬 속성을 제공합니다. 따라서 속성은 다음과 같습니다.
column-gap
row-gap
gap
(속기)
그러나 모든 그리드 지원 브라우저 가 새로운 속성을 지원하는 것은 아니므로 아래 데모에서 원래 버전을 사용합니다.
또한 항목과 컨테이너 사이에 간격이 필요한 경우 컨테이너 padding
에서 제대로 작동합니다 (아래 데모의 세 번째 예 참조).
사양에서 :
10.1. 하수구 다음 row-gap
, column-gap
및 gap
특성
row-gap
및 column-gap
속성 (및 gap
그리드 컨테이너 지정된 때 약칭)은, 격자의 행 및 열 사이 그리드 제본 정의한다. 이 구문은 CSS Box Alignment 3 §8 Gaps Between Boxs에 정의되어 있습니다.
이러한 특성의 영향은 영향을받는 그리드 선이 두께를 얻은 것처럼 나타납니다. 두 그리드 선 사이의 그리드 트랙은이를 나타내는 거터 사이의 공간입니다.
.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>
추가 정보: