แก้ไข CSS-only ให้เรียบร้อย
ใช้รหัสต่อไปนี้เพื่อเพิ่มลูกคนแรกที่ไร้เนื้อหาให้กับ div ที่ไม่ได้ตั้งใจย้าย:
.parent:before
{content: '';position: relative;height: 0px;width: 0px;overflow: hidden;white-space: pre;}
ข้อดีของวิธีนี้คือคุณไม่จำเป็นต้องเปลี่ยน CSS ขององค์ประกอบใด ๆ ที่มีอยู่ดังนั้นจึงมีผลกระทบต่อการออกแบบน้อยที่สุด ถัดจากนี้องค์ประกอบที่เพิ่มเข้ามาคือองค์ประกอบปลอมซึ่งไม่ได้อยู่ในต้นไม้ DOM
การสนับสนุนองค์ประกอบแบบหลอกมีการแพร่กระจายอย่างกว้างขวาง: Firefox 3+, Safari 3+, Chrome 3+, Opera 10+ และ IE 8+ สิ่งนี้จะทำงานในเบราว์เซอร์สมัยใหม่ใด ๆ (โปรดระมัดระวังกับเวอร์ชันใหม่กว่านี้::before
ซึ่งไม่รองรับใน IE8)
บริบท
ถ้าลูกคนแรกขององค์ประกอบมี margin-top
ผู้ปกครองจะปรับตำแหน่งของมันเป็นวิธีการยุบขอบซ้ำซ้อน ทำไม? มันเป็นอย่างนั้น
รับปัญหาต่อไปนี้:
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
</style>
<div class="parent"><!--This div moves 40px too-->
<div class="child">Hello world!</div>
</div>
คุณสามารถแก้ไขได้โดยเพิ่มเด็กที่มีเนื้อหาเช่นพื้นที่ว่าง แต่เราทุกคนเกลียดที่จะเพิ่มช่องว่างสำหรับปัญหาเฉพาะการออกแบบ ดังนั้นใช้white-space
คุณสมบัติเพื่อปลอมเนื้อหา
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
.fix {position: relative;white-space: pre;height: 0px;width: 0px;overflow: hidden;}
</style>
<div class="parent"><!--This div won't move anymore-->
<div class="fix"></div>
<div class="child">Hello world!</div>
</div>
ในกรณีที่position: relative;
มั่นใจได้ว่าตำแหน่งของการแก้ไขถูกต้อง และwhite-space: pre;
ทำให้คุณไม่ต้องเพิ่มเนื้อหาใด ๆ - เช่นพื้นที่สีขาว - ในการแก้ไข และheight: 0px;width: 0px;overflow: hidden;
ทำให้แน่ใจว่าคุณจะไม่เห็นการแก้ไข
คุณอาจต้องเพิ่มline-height: 0px;
หรือmax-height: 0px;
ตรวจสอบให้แน่ใจว่าความสูงเป็นศูนย์ในเบราว์เซอร์ IE โบราณ (ฉันไม่แน่ใจ) และเป็นทางเลือกคุณสามารถเพิ่มลง<!--dummy-->
ในเบราว์เซอร์ IE รุ่นเก่าถ้ามันไม่ทำงาน
ในระยะสั้นคุณสามารถทำสิ่งนี้ได้ด้วย CSS เท่านั้น (ซึ่งไม่จำเป็นต้องเพิ่มลูกที่แท้จริงลงใน HTML DOM-tree):
<style type="text/css">
div {position: relative;}
.parent {background-color: #ccc;}
.child {margin-top: 40px;}
.parent:before {content: '';position: relative;height: 0px;width: 0px;overflow: hidden;white-space: pre;}
</style>
<div class="parent"><!--This div won't move anymore-->
<div class="child">Hello world!</div>
</div>