Jeśli spojrzysz na specyfikację modelu pudełkowego CSS , zauważysz, co następuje:
Procent [marginesu] jest obliczany w odniesieniu do szerokości bloku zawierającego wygenerowane pudełko. Zauważ, że dotyczy to również „margin-top” i „margin-bottom”. Jeśli szerokość zawierającego bloku zależy od tego elementu, to wynikowy układ jest niezdefiniowany w CSS 2.1. (podkreślenie moje)
To jest rzeczywiście prawda. Ale dlaczego ? Co u licha zmusiłoby kogoś do zaprojektowania tego w ten sposób? Łatwo jest wymyślić scenariusze, w których chcesz, np. Pewna rzecz zawsze znajduje się 25% w dół od góry strony, ale trudno jest wymyślić jakikolwiek powód, dla którego chcesz, aby dopełnienie pionowe było względem poziomego rozmiaru rodzic.
Oto przykład zjawiska, do którego się odnoszę:
<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>
margin: 25%
właściwie oznacza. Nie byłby to równy margines, mimo że kod sugeruje, że tak. Nie mam dowodów na poparcie tego, ale wydaje się to rozsądne.