За допомогою флексотерапії створення жолобів - це біль, особливо коли йде обгортання.
Вам потрібно використовувати від'ємну маржу ( як показано в запитанні ):
#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>
Більше інформації: