หากคุณดูข้อมูลจำเพาะโมเดลกล่อง CSSคุณจะสังเกตสิ่งต่อไปนี้:
เปอร์เซ็นต์ [ระยะขอบ] คำนวณตามความกว้างของบล็อกที่มีกล่องที่สร้างขึ้น โปรดทราบว่านี่เป็นจริงสำหรับ "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%
แท้จริงแล้วหมายถึงอะไร มันจะไม่เป็นระยะขอบแม้ว่ารหัสจะบอกว่าเป็น ฉันไม่มีหลักฐานที่จะสำรองข้อมูลนี้ แต่ดูเหมือนว่าสมเหตุสมผล