Ich habe zwei DIVs, die ich genau übereinander positionieren muss. Wenn ich das mache, wird die Formatierung jedoch völlig durcheinander gebracht, da der enthaltende DIV so wirkt, als gäbe es keine Höhe. Ich denke, dies ist das erwartete Verhalten, position:absolute
aber ich muss einen Weg finden, diese beiden Elemente übereinander zu positionieren und den Container zu dehnen, wenn sich der Inhalt erstreckt:
Die obere linke Kante von .layer2
sollte genau an der oberen linken Kante von ausgerichtet seinlayer1
<!-- HTML -->
<div class="container_row">
<div class="layer1">
Lorem ipsum...
</div>
<div class="layer2">
More lorem ipsum...
</div>
</div>
<div class="container_row">
...same HTML as above. This one should never overlap the .container_row above.
</div>
/* CSS */
.container_row {}
.layer1 {
position:absolute;
z-index: 1;
}
.layer2 {
position:absolute;
z-index: 2;
}
position: absolute
ist dann nicht ganz der richtige Stil.position:absolute
fühlt sich nicht richtig an. Was wäre der richtige Stil?.layer1
und.layer2
Elemente haben eine bekannte Größe?Antworten:
Zuallererst sollten Sie wirklich die Position auf absolut positionierten Elementen angeben, sonst werden Sie auf merkwürdiges und verwirrendes Verhalten stoßen. Sie möchten wahrscheinlich
top: 0; left: 0
das CSS für beide absolut positionierten Elemente erweitern. Sie werden auch haben wollenposition: relative
auf ,.container_row
wenn Sie die absolut positionierten Elemente wollen positioniert werden in Bezug auf ihre Eltern , anstatt das Dokument des Körpers :Ihr Problem ist, dass
position: absolute
Elemente aus dem normalen Fluss entfernt werden :Dies bedeutet, dass absolut positionierte Elemente keinerlei Einfluss auf die Größe des übergeordneten Elements haben und Ihr erstes Element
<div class="container_row">
eine Höhe von Null hat.Sie können also nicht das tun, was Sie mit absolut positionierten Elementen versuchen, es sei denn, Sie wissen, wie hoch sie sein werden (oder Sie können entsprechend deren Höhe angeben). Wenn Sie die Höhen angeben können, können Sie die gleichen Höhen auf die setzen,
.container_row
und alles wird ausgerichtet. Sie können auch einemargin-top
zweite setzen.container_row
, um Platz für die absolut positionierten Elemente zu lassen. Beispielsweise:quelle
position: absolute
benötigt. Bitte überprüfen Sie: stackoverflow.com/a/51949049/1736186Tatsächlich ist dies ohne Position
absolute
und Angabe einer Höhe möglich. Alles was Sie tun müssen, ist zu verwendendisplay: grid
übergeordnete Element zu verwenden und Nachkommen in dieselbe Zeile und Spalte zu setzen.Bitte überprüfen Sie das folgende Beispiel basierend auf Ihrem HTML. Ich habe nur hinzugefügt
<span>
einige Farben , damit Sie das Ergebnis sehen können.Sie können auch einfach
z-index
jedes der untergeordneten Elemente ändern , um seine Sichtbarkeit zu ändern (welches sollte oben sein).quelle
display: grid
gab es vor sieben Jahren noch nicht :)flex
, was heutzutage eine viel bessere Browserunterstützung hat.Tolle Antwort, "mu ist zu kurz". Ich habe genau das Gleiche gesucht und nach dem Lesen Ihres Beitrags eine Lösung gefunden, die zu meinem Problem passt.
Ich hatte zwei Elemente mit genau der gleichen Größe und wollte sie stapeln. Da jeder die gleiche Größe hat, konnte ich nur machen
nur auf das letzte Element. Auf diese Weise wird das erste Element korrekt eingefügt, wodurch die Höhe der Eltern "gedrückt" wird, und das zweite Element wird oben platziert.
Hoffentlich hilft dies anderen Menschen, die versuchen, 2+ Elemente mit derselben (unbekannten) Höhe zu stapeln.
quelle
position: aboslute
das andere können .Hier ist eine andere Lösung, bei der display: flex anstelle von position: absolute oder display: grid verwendet wird.
quelle
Ich musste setzen
Container_Höhe = Element1_Höhe = Element2_Höhe
Use kann den Z-Index verwenden, um festzulegen, welcher oben sein soll.
quelle
Hier ist ein wiederverwendbares CSS, das die Höhe jedes Elements ohne Verwendung beibehält
position: absolute
:Das erste Element in Ihrem
stack
ist der Hintergrund und das zweite ist der Vordergrund.quelle
Aufgrund der absoluten Positionierung werden die Elemente aus der Dokumentenflussposition entfernt: Absolut ist nicht das richtige Werkzeug für den Job. Abhängig von dem genauen Layout, das Sie erstellen möchten, werden Sie mit negativen Rändern, Position: relativ oder vielleicht sogar transformieren: übersetzen erfolgreich sein. Zeigen Sie uns ein Beispiel, was Sie tun möchten. Wir können Ihnen besser helfen.
quelle
Natürlich geht es nur darum, die Größe wieder herzustellen. Aber wie können Sie das tun, wenn Sie die Höhe nicht im Voraus kennen? Wenn Sie wissen, welches Seitenverhältnis Sie dem Container geben möchten (und darauf reagieren möchten), können Sie Ihre Körpergröße zurückerhalten, indem Sie einem anderen untergeordneten Element des Containers eine Polsterung hinzufügen, ausgedrückt als Prozentsatz.
Sie können
div
dem Container sogar einen Dummy hinzufügen und so etwas wie einstellenpadding-top: 56.25%
, dass das Dummy-Element eine Höhe erhält, die einem Anteil der Breite des Containers entspricht. Dadurch wird der Behälter herausgedrückt und erhält ein Seitenverhältnis, in diesem Fall 16: 9 (56,25%).Polsterung und Rand verwenden den Prozentsatz der Breite, das ist hier wirklich der Trick.
quelle
Nach vielen Tests habe ich überprüft, dass die ursprüngliche Frage bereits richtig ist. Es fehlen nur ein paar Einstellungen:
container_row
muss habenposition: relative;
position: absolute; left:0;
container_row
sollte das zusätzliche Styling vorhanden sein:height:x; line-height:x; vertical-align:middle;
text-align:center;
könnte auch helfen.quelle