Вы не контролируете пространство между элементами в своем вопросе, так как вы используете свойство padding
, элементы располагаются один за другим, но вы достигаете эффекта. Если вы поместите фон на каждый, вы заметите, что я пытаюсь объяснить.
Чтобы контролировать пространство между элементами в макете flexbox (или другом), вам нужно использовать поле для элементов, в этом случае, для элементов внутри элемента display: flex;
.
Я использовал значения cal c из-за переменных S CSS, здесь я изменил имя переменной на 30px.
Есть фрагмент, который достигает того, что вы хотите.
.flexcontainer {
padding: 0 15px;
width: 100%;
border:1px solid black;
}
.flexrow {
display:flex;
flex-flow: row wrap;
/* only horizontal negative margin for beggining and end of the element, as you may not know which element is first on the left or right, it will compensate the padding of container */
margin: 0px calc(30px/2 * -1);
justify-content: space-around;
}
.flexrow.row-5-el > .element {
flex: 0 1 calc(100%/5 - 30px);
max-width: calc(100%/5 - 30px);
/* sets 15px of margin on each side */
margin: calc(30px/2);
/* for testing purposes */
outline: 1px auto green;
}
<div class="flexcontainer">
<div class="flexrow row-5-el">
<div class="element"> Lorem ipsum </div>
<div class="element"> Lorem ipsum </div>
<div class="element"> Lorem ipsum </div>
<div class="element"> Lorem ipsum </div>
<div class="element"> Lorem ipsum </div>
<div class="element"> Lorem ipsum </div>
<div class="element"> Lorem ipsum </div>
<div class="element"> Lorem ipsum </div>
<div class="element"> Lorem ipsum </div>
</div>
</div>
Если вы хотите, чтобы первый элемент начинался слева от 0, вам нужно только удалить отступы контейнера.
Вот живой пример, который я сделал некоторое время go: https://codepen.io/joelbonetr/pen/gOpPYbR
(без justify-content, так как желаемый эффект заключался в том, чтобы обернутые элементы были выровнены по левому краю)