Com o flexbox, criar calhas é uma dor, especialmente quando o embrulho está envolvido.
Você precisa usar margens negativas ( como mostrado na pergunta ):
#box {
display: flex;
width: 100px;
margin: 0 -5px;
}
... ou altere o HTML ( como mostrado em outra resposta ):
<div class='flex-wrapper'>
<div class='flex'>
<div class='box'></div>
<div class='box'></div>
...
</div>
</div>
... ou alguma outra coisa.
De qualquer forma, você precisa de um truque feio para fazê-lo funcionar, porque o flexbox não fornece " flex-gap
" um recurso ( pelo menos por enquanto ).
A questão das sarjetas, no entanto, é simples e fácil com o CSS Grid Layout.
A especificação Grid fornece propriedades que criam espaço entre os itens da grade, ignorando o espaço entre os itens e o contêiner. Essas propriedades são:
grid-column-gap
grid-row-gap
grid-gap
(a abreviação de ambas as propriedades acima)
Recentemente, a especificação foi atualizada para estar em conformidade com o Módulo de alinhamento de caixas CSS , que fornece um conjunto de propriedades de alinhamento para uso em todos os modelos de caixas. Portanto, as propriedades são agora:
column-gap
row-gap
gap
(forma abreviada)
No entanto, nem todos os navegadores que suportam o Grid suportam as propriedades mais recentes, então usarei as versões originais na demonstração abaixo.
Além disso, se o espaçamento for necessário entre os itens e o contêiner, ele padding
funcionará perfeitamente (consulte o terceiro exemplo na demonstração abaixo).
Das especificações:
10.1 Calhas: os row-gap
, column-gap
e gap
Propriedades
As propriedades row-gap
e column-gap
(e sua gap
abreviação), quando especificadas em um contêiner de grade, definem as calhas entre as linhas e as colunas da grade. Sua sintaxe é definida em Alinhamento de caixas CSS 3 §8 Lacunas entre caixas .
O efeito dessas propriedades é como se as linhas de grade afetadas adquirissem espessura: a trilha da grade entre duas linhas de grade é o espaço entre as sarjetas que as representam.
.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>
Mais Informações: