почему невозможно сделать что-то подобное в CSS: line-height: (height / 2) px;
Потому что это очень упростит введение логических циклов.
В этом примере, если вы явно не установите 'height' (в этом случае также будет легко явно указать 'line-height'), высота элемента зависит от высоты строки его содержимого содержимого, который зависит от высоты ...
IE пытался предоставить это с помощью синтаксиса «expression ()», но на самом деле это не работает. Подход IE заключался в том, чтобы постепенно пересчитывать его, поэтому, если у вас есть неопределенное выражение, оно может постоянно перерисовывать ваши элементы по мере изменения значения выражения. Для примера того, как это может пойти не так, попробуйте:
<div id="q" style="background: yellow; line-height: expression(document.getElementById('q').offsetHeight/2+'px');">
Lorem ipsum fiddly boing bum dfg dsfgasdf fg asdfas.
Lorem ipsum fiddly boing bum dfg dsfgasdf fg asdfas.
Lorem ipsum fiddly boing bum dfg dsfgasdf fg asdfas.
</div>
При изменении размера окна браузера высота строки и, следовательно, offsetHeight будут меняться, что приведет к несогласованности макета. При определенном размере высота взорвется.
Существует случай, когда допускаются простые выражения, содержащие только константы, например ::
line-height: (1em+4px);
но все, что связано с динамически вычисляемыми свойствами, так же обречено на провал, как и печально нарушенный в IE синтаксис выражения ().