Процент - это относительная величина. Он должен от чего-то высчитываться.
Почему для родительского элемента обязательно надо задать height, почему браузер динамический не может посчитать? (а вот width посчитать в процентах может)
Вы уверены, что width может посчитать в процентах, если ширина не определена?
Тогда проверьте такой пример:
<span class=parent>
parent
<span class="child"></span>
</span>
.parent {
background: red;
}
.child {
background: green;
width: 100%;
}
Дело в том, что ширина у инлайн элементов, работает так же как и высота – определяется содержимым.
Теперь вернемся к вашему примеру и представим, что было бы, если высота в процентах считалась так, как вы предполагаете (это же будет справедливым и для инлайн-ширины).
Допустим высота parent не задана, но исходя из размера содержимого, она равна 20px. Для child 100% по вашей логике высота должна быть равна двадцати пикселям. Тогда высота parent получается уже 20+20=40. Но тогда и высота child должна стать 40. Но теперь высота parent уже 80. Ну и так далее, уходим в рекурсию.
Вот и получается, что высоту в процентах посчитать нельзя.
Вот если выдрать child из потока, сделать его абсолютным, parent = relative, то высота parent уже не будет зависеть от child и 100% для child станет равным высоте parent.