DIVs übereinander stapeln?


115

Ist es möglich, mehrere DIVs wie folgt zu stapeln:

<div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>

Damit alle diese inneren DIVs die gleiche X- und Y-Position haben? Standardmäßig gehen sie alle untereinander und erhöhen die Y-Position um die Höhe des letzten vorherigen DIV.

Ich habe das Gefühl, dass eine Art Schwimmer oder Display oder ein anderer Trick beißen könnte?

BEARBEITEN: Der übergeordnete DIV hat eine relative Position, daher scheint die Verwendung der absoluten Position nicht zu funktionieren.


Um meine Antwort zu verdeutlichen, möchten Sie die inneren Divs unbedingt positionieren.
Matt

Antworten:


166

Positionieren Sie den äußeren Teil wie Sie möchten, und positionieren Sie dann den inneren Teil mit Absolut. Sie werden sich alle stapeln.

.inner {
  position: absolute;
}
<div class="outer">
   <div class="inner">1</div>
   <div class="inner">2</div>
   <div class="inner">3</div>
   <div class="inner">4</div>
</div>


1
Es scheint nicht zu funktionieren. Vielleicht hätte ich erwähnen sollen, dass ich dieses Szenario habe: <div style = "position: absolute ..."> <div style = "position: relative ..."> <div> stapelt diesen </ div> <div> Stapel dieser </ div> <div> Stapel dieser </ div> <div> Stapel dieser </ div> </ div> </ div>
Tower

2
Sie möchten die Divs, in denen "Stack This" enthalten ist, unbedingt positionieren. Es funktioniert - ich habe es versucht, bevor ich mein Original gepostet habe. Wenn Sie Ihren Divs keine Klassenselektoren hinzufügen, passen Sie die Div-Auswahlmethode in Erics Antwort an, um die Stack-Divs auszuwählen.
Matt

1
Hat auch bei mir nicht funktioniert. Zu viele Unbekannte sind den Zuschauern überlassen.
Yan Bellavance

Ich habe die Divs zu stapeln, indem sie Position verwenden: relative und spezifizierende Höhe
Yan Bellavance

es könnte etwas mit Display Requisite zu tun haben?
Yan Bellavance

50

Um zu Daves Antwort hinzuzufügen:

div { position: relative; }
div div { position: absolute; top: 0; left: 0; }

Es scheint nicht zu funktionieren. Vielleicht hätte ich erwähnen sollen, dass ich dieses Szenario habe: <div style = "position: absolute ..."> <div style = "position: relative ..."> <div> stapelt diesen </ div> <div> Stapel this </ div> <div> stapelt dies </ div> <div> stapelt dieses </ div> </ div> </ div>
Tower

Ich denke in diesem Fall möchten Sie "top: 0; left: 0;" auf Ihrem Div, der "Position: relativ" hat. Testen Sie auf jeden Fall IE6, obwohl ich nicht sicher sagen kann, dass es funktionieren wird.
Eric Wendelin

10

Wenn Sie damit meinen, dass Sie eine übereinander und eine übereinander setzen (gleiche X-, Y-Position, aber unterschiedliche Z-Position), versuchen Sie, das z-indexCSS-Attribut zu verwenden. Dies sollte funktionieren (ungetestet)

<div>
    <div style='z-index: 1'>1</div>
    <div style='z-index: 2'>2</div>
    <div style='z-index: 3'>3</div>
    <div style='z-index: 4'>4</div>
</div>

Dies sollte 4 über 3, 3 über 2 usw. anzeigen. Je höher der Z-Index ist, desto höher ist das Element auf der Z-Achse positioniert. Ich hoffe das hat dir geholfen :)



5

Ich habe die Divs leicht versetzt positioniert, damit Sie sie bei der Arbeit sehen können.
HTML

<div class="outer">
  <div class="bot">BOT</div>
  <div class="top">TOP</div>
</div>

CSS

.outer {
  position: relative;
  margin-top: 20px;
}

.top {
  position: absolute;
  margin-top: -10px;
  background-color: green;
}

.bot {
  position: absolute;
  background-color: yellow;
}

https://codepen.io/anon/pen/EXxKzP


4

Sie können dies jetzt mit CSS Grid beheben.

<div class="outer">
  <div class="top"> </div>
  <div class="below"> </div>
</div>

Und das CSS dafür:

.outer {
  display: grid;
  grid-template: 1fr / 1fr;
  place-items: center;
}
.outer > * {
  grid-column: 1 / 1;
  grid-row: 1 / 1;
}
.outer .below {
  z-index: 2;
}
.outer .top {
  z-index: 1;
}

0

Ich weiß, dass dieser Beitrag etwas alt ist, aber ich hatte das gleiche Problem und habe versucht, es mehrere Stunden lang zu beheben. Endlich habe ich die Lösung gefunden:

wenn wir 2 Boxen absolut positioniert haben

<div style='left: 100px; top: 100px; position: absolute; width: 200px; height: 200px;'></div>
<div style='left: 100px; top: 100px; position: absolute; width: 200px; height: 200px;'></div>

Wir erwarten, dass es eine Box auf dem Bildschirm gibt. Dazu müssen wir den unteren Rand gleich der Höhe setzen. Gehen Sie also folgendermaßen vor:

<div style='left: 100px; top: 100px; position: absolute; width: 200px; height: 200px; margin-bottom: -200px;'></div>
<div style='left: 100px; top: 100px; position: absolute; width: 200px; height: 200px; margin-bottom: -200px;'></div>

funktioniert gut für mich.


0

Ich hatte die gleiche Anforderung, die ich unter Geige versucht habe.

#container1 {
background-color:red;
position:absolute;
left:0;
top:0;
height:230px;
width:300px;
z-index:2;
}
#container2 {
background-color:blue;
position:absolute;
left:0;
top:0;
height:300px;
width:300px;
z-index:1;
}

#container {
position : relative;
height:350px;
width:350px;
background-color:yellow;
}

https://plnkr.co/edit/XnlneRFlvo1pB92UXCC6?p=preview

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.