Якщо ви подивитеся на специфікацію моделі CSS box , ви помітите наступне:
Процент [margin] обчислюється відносно ширини блоку, що генерується, що містить. Зауважте, що це справедливо і для 'margin-top' і 'margin-bottom'. Якщо ширина містить блоку залежить від цього елемента, то отриманий макет не визначений у 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>
height: 10%; width: 10%
ви також не отримаєте квадратного елемента.
Note that in a horizontal flow, percentages on ‘margin-top’ and ‘margin-bottom’ are relative to the width of the containing block, not the height (and in vertical flow, ‘margin-left’ and ‘margin-right’ are relative to the height, not the width).
так йде обома шляхами
margin: 25%
насправді означає. Це не було б рівним запасом, навіть якщо код передбачає, що він є. Я не маю доказів, щоб це підтвердити, але це здається розумним.