ตำแหน่งสัมบูรณ์ แต่สัมพันธ์กับพาเรนต์


457

ฉันมี div สองตัวในอีก div หนึ่งและฉันต้องการวาง div ลูกหนึ่งตัวไว้ที่มุมขวาบนของ div parent และอีก div ลูกอีกอันอยู่ด้านล่างของ div parent โดยใช้ css นั่นคือฉันต้องการใช้การวางตำแหน่งแบบสัมบูรณ์กับ div ลูกสองตัว แต่กำหนดตำแหน่งให้สัมพันธ์กับ div div แทนที่จะเป็นเพจ ฉันจะทำสิ่งนี้ได้อย่างไร

ตัวอย่าง html:

<div id="father">
   <div id="son1"></div>
   <div id="son2"></div>
</div>

คุณต้องการให้ son1 อยู่ที่มุมขวาบนของพ่อ แต่ที่ด้านล่างควร son2 อยู่ที่ไหน ด้านล่างซ้ายขวาหรือกึ่งกลาง?
j08691

1
ในกรณีนี้คุณจะต้องกำหนดตำแหน่ง: สัมพันธ์กับองค์ประกอบหลักและตำแหน่ง: สัมบูรณ์กับองค์ประกอบลูก ในองค์ประกอบลูกแรกคุณควรวาง top: 0 และ right: 0 เพื่อวางมันไว้ที่มุมขวาบนขององค์ประกอบหลัก ในลูกคนที่สองคุณควรวาง bottom: 0 เพื่อวางไว้ที่ด้านล่างขององค์ประกอบหลัก มีบทความที่ดีที่นี่kolosek.com/css-position-relative-vs-position-absolute อธิบายการวางตำแหน่งแบบสัมพันธ์และแน่นอนในรายละเอียด
Nesha Zoric

คำตอบ:


812
#father {
   position: relative;
}

#son1 {
   position: absolute;
   top: 0;
}

#son2 {
   position: absolute;
   bottom: 0;
}

งานนี้เพราะposition: absoluteวิธีการบางอย่างเช่น "การใช้งานtop, right, bottom, leftตำแหน่งตัวเองในความสัมพันธ์กับบรรพบุรุษที่ใกล้ที่สุดที่มีposition: absoluteหรือposition: relative."

ดังนั้นเราจึง#fatherมีposition: relativeและเด็กมีposition: absoluteแล้วใช้topและbottomเพื่อวางตำแหน่งเด็ก


17
ทำไม#father { position: relative; }ต้องมี?
joshreesjones

4
จะต้องเปลี่ยน "ตำแหน่งกฎ" สำหรับผู้ที่อยู่ข้างในเขา
BlaShadow

36
@ mathguy54 เพราะข้อมูลจำเพาะกล่าวว่าองค์ประกอบตำแหน่งอย่างถูกวางตำแหน่งเทียบกับครั้งแรกในตำแหน่งstaticผู้ปกครองซึ่งหมายความว่าผู้ปกครองที่ไม่ได้มีค่าตำแหน่งของ
Alex W

สิ่งที่เกี่ยวกับสถานการณ์เช่นนี้: พ่อเป็นญาติและความสูงของมันคือ 100% วิธีการวางตำแหน่งลูกชายและลูกชาย 2 ที่สมมติว่า 20% และ 70% ของความสูงของพ่อตามลำดับ?
Rossitten


27
div#father {
    position: relative;
}
div#son1 {
    position: absolute;
    /* put your coords here */
}
div#son2 {
    position: absolute;
    /* put your coords here */
}

1
ถ้าคุณต้องการปรับขนาดผู้ปกครองกับเด็ก
FrenkyB

10

ในกรณีที่มีคนต้องการโพสต์ div ลูกโดยตรงภายใต้ผู้ปกครอง

#father {
   position: relative;
}

#son1 {
   position: absolute;
   top: 100%;
}

การสาธิตการทำงานCodepen


6

ถ้าคุณไม่ให้ตำแหน่งใด ๆ staticไปยังผู้ปกครองแล้วโดยเริ่มต้นจะใช้เวลา หากคุณต้องการที่จะเข้าใจความแตกต่างที่อ้างถึงตัวอย่างนี้

ตัวอย่างที่ 1 ::

http://jsfiddle.net/Cr9KB/1/

   #mainall
{

    background-color:red;
    height:150px;
    overflow:scroll
}

ที่นี่ผู้ปกครองระดับไม่มีตำแหน่งดังนั้นองค์ประกอบถูกวางไว้ตามร่างกาย

ตัวอย่างที่ 2 ::

http://jsfiddle.net/Cr9KB/2/

#mainall
{
    position:relative;
    background-color:red;
    height:150px;
    overflow:scroll
}

ในตัวอย่างนี้ผู้ปกครองมีตำแหน่งสัมพัทธ์องค์ประกอบจึงอยู่ในตำแหน่งที่แน่นอนภายในผู้ปกครองที่เกี่ยวข้อง


แล้วถ้าคุณไม่มี #mallall {height: 150px} ... ? ฉันหมายถึงถ้า mainall มีความสูงแบบไดนามิก?
Albert Català

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