Технически вы не можете, потому что вычисленное значение не является статическим и будет зависеть от других свойств.В этом случае это тривиально, так как мы имеем дело со значением пикселя, но представьте себе случай, когда у вас будет процентное значение.Процент относится к другим свойствам, поэтому мы не можем вычислить его, пока он не будет использован с var()
.Та же логика, если мы используем такие единицы, как em
, ch
и т. Д.
. Вот простой пример для иллюстрации:
let div = document.getElementById('example');
console.log(window.getComputedStyle(div).getPropertyValue('--example-var'))
console.log(window.getComputedStyle(div).getPropertyValue('font-size'))
console.log(window.getComputedStyle(div).getPropertyValue('width'))
console.log(window.getComputedStyle(div).getPropertyValue('background-size'));
:root {
--example-var: calc(100% + 5px - 10px);
}
#example {
font-size:var(--example-var);
width:var(--example-var);
background-size:var(--example-var);
}
<div id='example'>some text</div>
Важно отметить последний случай, когда background-size имеет особое поведение при комбинировании процентного значения и значения в пикселях.Вы можете ясно видеть, что браузер не будет даже вычислять 5px - 10px
и будет делать это только тогда, когда после использования var()
.
Если вы знаете, что calc()
будет использоваться только сзначения пикселей, вы можете просто применить его к любому свойству и прочитать его.Это будет работать, так как вычисленное значение всегда будет оцениваться одинаково, в зависимости от того, какое свойство имеет:
let div = document.getElementById('example');
console.log(window.getComputedStyle(div).getPropertyValue('--example-var'))
console.log(window.getComputedStyle(div).getPropertyValue('font-size'))
console.log(window.getComputedStyle(div).getPropertyValue('width'))
console.log(window.getComputedStyle(div).getPropertyValue('background-size'));
console.log(window.getComputedStyle(div).getPropertyValue('background-color'));
:root {
--example-var: calc(100px - 10px);
--test:var(--example-var)
}
#example {
font-size:var(--example-var);
width:var(--example-var);
background-size:var(--example-var);
background-color:var(--example-var);
}
<div id='example'></div>
Конечно, вам нужно учитывать свойство, которое ожидает значение в пикселях, иначе у вас будет недопустимое значение (как в случае с фоном впредыдущий пример).