Вы не должны делить маржу внутри вашего расчета. Он должен быть снаружи, или вы удалите меньше, чем поле, установленное для каждого элемента. Вы устанавливаете X
margin и только удаляете X/4
, поэтому каждый элемент будет принимать 25% - X/4 + X
(последний 25% - X/4
) в качестве пробела, таким образом, общая сумма будет 100% + 2X
, что больше 100%
.
.col-1-of-4 {
width: calc(100% / 4 - #{$gutter-horizontal});
}
.row {
max-width: 114rem;
margin: 0 auto;
}
.row:not(:last-child) {
margin-bottom: 8rem;
}
.row::after {
content: "";
display: table;
clear: both;
}
.row [class^="col-"] {
float: left;
}
.row [class^="col-"]:not(:last-child) {
margin-right: 6rem;
}
.row .col-1-of-4 {
width: calc(100% / 4 - 6rem);
background-color: red;
}
<div class='row'>
<div class='col-1-of-4'>
hi
</div>
<div class='col-1-of-4'>
hi
</div>
<div class='col-1-of-4'>
hi
</div>
<div class='col-1-of-4'>
hi
</div>
</div>
А если вам нужно пространство между поведением (что вам нужно), вы можете сделать это следующим образом:
.col-1-of-4 {
width: calc(100% / 4 - 3*#{$gutter-horizontal}/4);
}
То, что вы также можете написать так:
.col-1-of-4 {
width: calc((100% - 3*#{$gutter-horizontal})/4);
}
Вам необходимо удалить 3 поля (определенные для первых 3 элементов) из общей ширины, а затем разделить на 4:
.row {
max-width: 114rem;
margin: 0 auto;
}
.row:not(:last-child) {
margin-bottom: 8rem;
}
.row::after {
content: "";
display: table;
clear: both;
}
.row [class^="col-"] {
float: left;
}
.row [class^="col-"]:not(:last-child) {
margin-right: 6rem;
}
.row .col-1-of-4 {
width: calc(100% / 4 - 3*6rem/4);
background-color: red;
}
<div class='row'>
<div class='col-1-of-4'>
hi
</div>
<div class='col-1-of-4'>
hi
</div>
<div class='col-1-of-4'>
hi
</div>
<div class='col-1-of-4'>
hi
</div>
</div>
Вы должны применять ту же логику для всех остальных классов