Position absolut, aber relativ zum Elternteil


457

Ich habe zwei Divs in einem anderen Div und möchte ein untergeordnetes Div oben rechts neben dem übergeordneten Div und das andere untergeordnete Div mit CSS unten im übergeordneten Div positionieren. Das heißt, ich möchte die absolute Positionierung mit den beiden untergeordneten Divs verwenden, sie jedoch relativ zum übergeordneten Div und nicht zur Seite positionieren. Wie kann ich das machen?

Beispiel HTML:

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

Sie möchten, dass son1 in der oberen rechten Ecke des Vaters steht, aber wo unten sollte son2 sein? Unten links, rechts oder in der Mitte?
j08691

1
In diesem Fall müssten Sie position: relativ zum übergeordneten Element und position: absolute zu den untergeordneten Elementen festlegen. Beim ersten untergeordneten Element sollten Sie oben: 0 und rechts: 0 einfügen, um es oben rechts im übergeordneten Element zu positionieren. Beim zweiten untergeordneten Element sollten Sie bottom: 0 setzen, um es am unteren Rand des übergeordneten Elements zu positionieren. Es gibt hier einen großartigen Artikel kolosek.com/css-position-relative-vs-position-absolute , der die relative und absolute Positionierung im Detail erklärt.
Nesha Zoric

Antworten:


812
#father {
   position: relative;
}

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

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

Dies funktioniert , weil position: absoluteMittel so etwas wie „Einsatz top, right, bottom, leftsich in Bezug auf den nächsten Vorfahren zu positionieren, der hat position: absoluteoder position: relative.“

So machen wir #fatherhaben position: relative, und die Kinder haben position: absolute, dann verwenden Sie topund bottomdie Kinder zu positionieren.


17
Warum ist #father { position: relative; }erforderlich?
Joshreesjones

4
ist erforderlich, um die "Positionsregel" für diejenigen, die in ihm sind, zu ändern.
BlaShadow

36
@ mathguy54 Da die Spezifikation besagt, dass absolut positionierte Elemente relativ zum zuerst positionierten übergeordneten Element positioniert sind , bedeutet dies, dass jedes übergeordnete Element keinen Positionswert von hat static.
Alex W

Was ist mit einem solchen Szenario: VATER ist relativ und seine Größe beträgt 100%. Wie positionieren Sie Sohn und Sohn2, sagen wir 20% bzw. 70% der Größe des Vaters?
Rossitten


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

1
Was ist, wenn Sie die Größe von Eltern mit Kind ändern müssen?
FrenkyB

10

Wenn jemand ein Kind direkt unter einem Elternteil positionieren möchte

#father {
   position: relative;
}

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

Arbeits Demo Codepen


6

Wenn Sie dem Elternteil keine Position geben, ist dies standardmäßig erforderlich static. Wenn Sie diesen Unterschied verstehen möchten, lesen Sie dieses Beispiel

Beispiel 1::

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

   #mainall
{

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

Hier hat die übergeordnete Klasse keine Position, sodass das Element entsprechend dem Körper platziert wird.

Beispiel 2 ::

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

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

In diesem Beispiel hat das übergeordnete Element eine relative Position, daher werden die Elemente innerhalb des relativen übergeordneten Elements absolut positioniert.


Und was ist, wenn Sie nicht die #mainall {height: 150px} ... haben? Ich meine, wenn mainall eine dynamische Höhe hat?
Albert Català

Dann ist Ihr schwebendes Element relativ zu der Position, die das übergeordnete Element beim Laden der Seite (und des CSS) hatte. Wenn Sie dies nach dem Laden der Seite aktualisieren möchten, verwenden Sie Javascript - clientX und clientY sind ein guter Ausgangspunkt
Abraham Brookes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.