Ваш первый пример отказа работает для меня, если я добавлю единицы к 0
части расчета.
Из spec :
Примечание: Так какs всегда интерпретируются как числа или s, «без единиц измерения 0» s не поддерживаются в calc ().То есть ширина: calc (0 + 5px);недопустимо, хотя обе ширины: 0;и ширина: 5 пикселей;действительны.
:root {
--gap: 15px;
}
div {
margin-top: calc(0px - var(--gap));
}
<div>text</div>
Ваш второй пример неудачи работает на меня.
:root {
--gap: 15px;
}
div {
margin-top: calc(var(--gap) * -1);
}
<div>text</div>
Я протестировал оба примера в Firefox 64, Chrome 71 и Safari 12 (все Mac).