Jika Anda melihat spec model kotak CSS , Anda akan mengamati yang berikut:
Persentase [margin] dihitung sehubungan dengan lebar blok berisi kotak yang dihasilkan. Perhatikan bahwa ini juga berlaku untuk 'margin-top' dan 'margin-bottom'. Jika lebar blok yang mengandung tergantung pada elemen ini, maka tata letak yang dihasilkan tidak terdefinisi dalam CSS 2.1. (penekanan milikku)
Ini memang benar. Tapi mengapa ? Apa yang akan memaksa orang untuk mendesainnya dengan cara ini? Sangat mudah untuk memikirkan skenario di mana Anda inginkan, misalnya hal tertentu untuk selalu turun 25% dari bagian atas halaman, tetapi sulit untuk datang dengan alasan mengapa Anda ingin bantalan vertikal relatif terhadap ukuran horizontal dari orang tua.
Berikut adalah contoh dari fenomena yang saya maksudkan:
<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%
Anda tidak akan mendapatkan elemen persegi juga.
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).
Jadi berjalan dua arah
margin: 25%
sebenarnya. Itu tidak akan menjadi margin yang genap, meskipun kode menunjukkan itu. Saya tidak punya bukti untuk mendukung ini, tetapi tampaknya masuk akal.