คุณจะทำให้ <div> สองตัวทับซ้อนกันได้อย่างไร


154

ฉันต้องการคนสองคนที่จะดูเป็นแบบนี้:

    |               |
 ---|    LOGO       |------------------------
|   |_______________|  LINKS                |
|             CONTENT                       |

อะไรคือวิธีที่ประณีต / งดงามที่สุดในการทำให้มันซ้อนทับกันอย่างเป็นระเบียบ? โลโก้จะมีความสูงและความกว้างคงที่และจะสัมผัสกับขอบด้านบนของหน้า

css  html  overlap 

คำตอบ:


88

ฉันอาจเข้าใกล้เช่น (CSS และ HTML):

html,
body {
  margin: 0px;
}
#logo {
  position: absolute; /* Reposition logo from the natural layout */
  left: 75px;
  top: 0px;
  width: 300px;
  height: 200px;
  z-index: 2;
}
#content {
  margin-top: 100px; /* Provide buffer for logo */
}
#links {
  height: 75px;
  margin-left: 400px; /* Flush links (with a 25px "padding") right of logo */
}
<div id="logo">
  <img src="https://via.placeholder.com/200x100" />
</div>
<div id="content">
  
  <div id="links">dssdfsdfsdfsdf</div>
</div>


2
มีวิธีใดในการสร้างเนื้อหาเพียงหลีกเลี่ยงพื้นที่ที่ใช้โดยโลโก้
Javier

1
อืมคุณช่วยชี้แจงได้ไหม? ฉันหมายความว่าคุณต้องการให้โลโก้อยู่เหนือเนื้อหาหรือไม่ ถ้าเป็นเช่นนั้นก็เป็นเพียงการไหลปกติของ divs (เช่นลบซ้าย, ด้านบน, ตำแหน่งจาก #logo) ฉันมีความรู้สึกว่าคุณหมายถึงอย่างอื่น! :)
โอเวน

2
ฉันคิดว่าสิ่งที่ตั้งใจจะให้มีเนื้อหา (ข้อความ) ล้อมรอบโลโก้
Davy8

2
อืมฉันค่อนข้างไม่แน่ใจ ปัญหาในการเป็นองค์ประกอบสามารถลอยหรืออยู่ในตำแหน่ง แต่ไม่ใช่ทั้งสองอย่าง จนกว่าพวกเขาจะพัฒนาทุ่นบางส่วน: ความคิดที่สำคัญ ...
โอเวน

88

เพียงใช้ระยะขอบติดลบใน div ที่สองบอกว่า:

<div style="margin-top: -25px;">

และตรวจสอบให้แน่ใจว่าได้ตั้งค่าคุณสมบัติดัชนี z เพื่อให้ได้เลเยอร์ที่คุณต้องการ


9
นี่เป็นวิธีที่ง่ายที่สุดและสามารถปรับให้เหมาะกับส่วนท้ายที่ทับซ้อนกันได้โดยใช้ระยะขอบบนเนื้อหาของหน้าเว็บ ขอบคุณ!
Peter DeWeese

1
วิธีแก้ปัญหานี้ดูเหมือนจะขึ้นอยู่กับ DOCTYPE ใช่ไหม เพราะมันไม่ทำงานกับ HTML5 DOCTYPE เมื่อฉันลอง
alumi

2
นี่ควรเป็นคำตอบที่ได้รับการยอมรับตำแหน่งแน่นอนมีแนวโน้มที่จะทำให้เกิดปัญหา
Dmitriy

5

ด้วยการกำหนดตำแหน่งแบบสัมบูรณ์หรือแบบสัมพัทธ์คุณสามารถทำการซ้อนทับได้ทุกประเภท คุณอาจต้องการให้โลโก้เป็นสไตล์เช่นนี้:

div#logo {
  position: absolute;
  left: 100px; // or whatever
}

หมายเหตุ: ตำแหน่งที่แน่นอนมีความผิดปกติ คุณอาจต้องทดลองนิดหน่อย แต่ก็ไม่ยากเกินกว่าจะทำในสิ่งที่คุณต้องการ


1
นั่นจะทำให้โลโก้ซ้อนทับข้อความที่ว่าลิงก์อยู่หรือไม่ หรือมันจะผลักลิงค์ไปยังด้านข้าง?

1
ไม่แน่นอนลบแท็กออกจากโฟลว์อย่างมีประสิทธิภาพ มันจะเป็นถ้ามันไม่ได้มี
sblundy

2

การใช้ CSS คุณสามารถตั้งค่า div โลโก้ให้อยู่ในตำแหน่งที่แน่นอนและตั้งค่า z-order ให้อยู่เหนือ div ที่สอง

#logo
{
    position: absolute:
    z-index: 2000;
    left: 100px;
    width: 100px;
    height: 50px;
}

1

หากคุณต้องการให้โลโก้ใช้พื้นที่คุณน่าจะดีกว่าที่จะลอยไปทางซ้ายแล้วเลื่อนเนื้อหาลงโดยใช้ระยะขอบเรียงดังนี้:

#logo {
    ลอย: ซ้าย;
    กำไร: 0 10px 10px 20px;
}

#เนื้อหา {
    กำไรขั้นต้น: 10px 0 0 10px;
}

หรือสิ่งที่คุณต้องการขอบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.