При использовании 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 предоставляет свойства, которые создают пространство между элементами сетки, игнорируя пространство между элементами и контейнером. Эти свойства:
grid-column-gap
grid-row-gap
grid-gap
(сокращение для обоих свойств выше)
Недавно спецификация была обновлена в соответствии с модулем выравнивания блоков CSS , который предоставляет набор свойств выравнивания для использования во всех моделях блоков. Итак, свойства сейчас:
column-gap
row-gap
gap
(Сокращенная)
Однако не все браузеры, поддерживающие Grid, поддерживают новые свойства, поэтому я буду использовать оригинальные версии в демонстрационной версии ниже.
Также, если необходим интервал между элементами и контейнером, padding
контейнер отлично работает (см. Третий пример ниже).
Из спецификации:
10.1. Стоки: в row-gap
, column-gap
и gap
свойства
row-gap
И column-gap
свойство (и их gap
сокращенный), если это указано на контейнере сетки, определяют желоба между сеткой строками и столбцами сетки. Их синтаксис определен в CSS Box Alignment 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>
Больше информации: