Я думаю, что проблема здесь в space
Если ваш миксин выдаст вам такой вывод:
width: calc( 2 * (100% - (3-1) * 6rem) / 3 + (2-1) * 6rem);
Браузеры возвращают вам ошибку, потому что вы должны ставить пробел между каждымоператор:
width: calc( 2 * (100% - (3 - 1) * 6rem) / 3 + (2 - 1) * 6rem);
Я создал пример.В первом случае я использовал ваш результат mixin и ваш прямой метод:
.col-1-of-3 {
width: calc(2 * (100% - (3-1) * 6rem) / 3 + (2-1) * 6rem);
background-color:#ff0000;
}
.col-2-of-3 {
width: calc(2 * ((100% - 2 * 6rem) / 3) + 6rem);
background-color:#00ff00;
}
<div class="row">
<div class="col-1-of-3">Col 1 of 3</div>
<div class="col-2-of-3">Col 2 of 3</div>
</div>
Ширина отличается, потому что с вашим результатом mixin браузеры не могут понять ваши операции (3-1)
& (2-1)
.Но если мы поместим пробелы между операторами, метод mixin result & direct даст нам тот же результат:
.col-1-of-3 {
width: calc(2 * (100% - (3 - 1) * 6rem) / 3 + (2 - 1) * 6rem);
background-color:#ff0000;
}
.col-2-of-3 {
width: calc(2 * ((100% - 2 * 6rem) / 3) + 6rem);
background-color:#00ff00;
}
<div class="row">
<div class="col-1-of-3">Col 1 of 3</div>
<div class="col-2-of-3">Col 2 of 3</div>
</div>
Я думаю, что в этом причина такой разницы.