Układasz DIV jeden na drugim?


116

Czy można łączyć wiele DIV, takich jak:

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

Więc wszystkie te wewnętrzne DIV mają tę samą pozycję X i Y? Domyślnie wszystkie znajdują się poniżej siebie, zwiększając pozycję Y o wysokość ostatniego poprzedniego DIV.

Mam wrażenie, że coś w rodzaju pływaka, wyświetlacza lub innej sztuczki może ugryźć?

EDYCJA: nadrzędny DIV ma pozycję względną, więc użycie pozycji bezwzględnej nie wydaje się działać.


Aby wyjaśnić moją odpowiedź, chcesz bezwzględnie ustawić wewnętrzne elementy div.
Matt

Odpowiedzi:


168

Umieść zewnętrzne elementy DIV w dowolny sposób, a następnie ustaw wewnętrzne elementy DIV, używając wartości bezwzględnych. Wszystkie się ułożą.

.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
Wydaje się, że to nie działa. Może powinienem był wspomnieć, że mam taki scenariusz: <div style = "position: bezwzględna ..."> <div style = "position: względna ..."> <div> ułóż ten </div> <div> stos to </div> <div> ułóż to </div> <div> ułóż to </div> </div> </div>
Wieża

2
Chcesz bezwzględnie ustawić elementy div, które mają w sobie „stack this”. Działa - próbowałem go przed wysłaniem oryginału. Jeśli nie umieścisz selektorów klas w swoich elementach div, dostosuj metodę wyboru div w odpowiedzi Erica, aby wybrać stosy div.
Matt

1
Dla mnie też nie działa. Widzom pozostało zbyt wiele niewiadomych.
yan bellavance

Mam elementy div do ułożenia w stos, używając pozycji: względna i określając wysokość
yan bellavance

może to mieć coś wspólnego z ekspozycją?
yan bellavance

50

Aby dodać do odpowiedzi Dave'a:

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

Wydaje się, że to nie działa. Może powinienem był wspomnieć, że mam taki scenariusz: <div style = "position: bezwzględna ..."> <div style = "position: względna ..."> <div> ułóż ten </div> <div> stos to </div> <div> ułóż to </div> <div> ułóż to </div> </div> </div>
Wieża

Myślę, że w takim przypadku chcesz ustawić „top: 0; left: 0;” w Twoim div, który ma „position: relative”. Zdecydowanie przetestuj na tym IE6, chociaż nie mogę powiedzieć na pewno, że zadziała.
Eric Wendelin

10

Jeśli masz na myśli dosłowne umieszczenie jednego na drugim, jednego na górze (te same pozycje X, Y, ale inna pozycja Z), spróbuj użyć z-indexatrybutu CSS. To powinno działać (nieprzetestowane)

<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>

Powinno to pokazać 4 na górze 3, 3 na górze 2 i tak dalej. Im wyższy indeks z, tym wyżej element jest umieszczony na osi z. Mam nadzieję, że ci to pomogło :)



5

Ustawiłem elementy div z lekkim przesunięciem, abyś mógł zobaczyć, jak działa.
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

Możesz teraz użyć siatki CSS, aby to naprawić.

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

A css do tego:

.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

Wiem, że ten post jest trochę stary ale miałem ten sam problem i próbowałem go naprawić kilka godzin. Wreszcie znalazłem rozwiązanie:

jeśli mamy 2 pola ustawione na absolutnie

<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>

spodziewamy się, że na ekranie będzie jedno pudełko. Aby to zrobić, musimy ustawić margin-bottom równy -height, robiąc to w ten sposób:

<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>

dla mnie działa dobrze.


0

Miałem te same wymagania, które wypróbowałem poniżej.

#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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.