Se osservi le specifiche del modello di box CSS , osserverai quanto segue:
La percentuale [margine] viene calcolata rispetto alla larghezza del blocco contenitore della casella generata. Si noti che ciò vale anche per 'margin-top' e 'margin-bottom'. Se la larghezza del blocco contenitore dipende da questo elemento, il layout risultante non è definito in CSS 2.1. (enfatizzare il mio)
Questo è davvero vero. Ma perchè ? Cosa mai costringerebbe nessuno a progettarlo in questo modo? È facile pensare a scenari in cui si desidera, ad esempio una certa cosa deve essere sempre inferiore del 25% dalla parte superiore della pagina, ma è difficile trovare un motivo per cui si desidera che l'imbottitura verticale sia relativa alla dimensione orizzontale di il genitore.
Ecco un esempio del fenomeno a cui mi riferisco:
<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%
che non otterrai nemmeno un elemento quadrato.
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).
Quindi va in entrambe le direzioni
margin: 25%
significhi effettivamente. Non sarebbe un margine pari, anche se il codice suggerisce che lo sia. Non ho prove a sostegno di questo, ma sembra ragionevole.