Если вы посмотрите на спецификацию модели CSS-бокса, вы увидите следующее:
Процент [margin] рассчитывается по отношению к ширине созданного блока, содержащего блок. Обратите внимание, что это верно и для "margin-top" и "margin-bottom".. Если ширина используемого блока зависит от этого элемента, то результирующий макет undefined в CSS 2.1. (акцент мой)
Это действительно так. Но почему? Что же может заставить кого-нибудь спроектировать его таким образом? Легко думать о сценариях, где вы хотите, например. определенная вещь всегда должна быть на 25% ниже верхней части страницы, но трудно найти любую причину, по которой вы хотите, чтобы вертикальное заполнение было относительно горизонтального размера родителя.
Вот пример феномена, который я имею в виду:
<div style="border: 1px solid red; margin: 0; padding: 0; width: 200px; height: 800px;">
This div is 200x800.
<div style="border: 1px solid blue; margin: 10% 0 0 10%;">
This div has top-margin of 10% and left-margin of 10% with respect to its parent.
</div>
</div>