Укладання DIV один на одного?


116

Чи можливо складати кілька DIV-файлів, таких як:

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

Так що всі ці внутрішні DIV мають однакове положення X і Y? За замовчуванням всі вони йдуть нижче один одного, збільшуючи положення Y на висоту останнього попереднього DIV.

У мене є відчуття, що якийсь поплавок або дисплей чи інший трюк можуть вкусити?

EDIT: Батьківський DIV має відносне положення, тому використання абсолютного положення, здається, не працює.


Щоб уточнити мою відповідь, ви хочете абсолютно розташувати внутрішні діви.
Метт

Відповіді:


168

Розташуйте зовнішній div, як вам потрібно, а потім розташуйте внутрішні знаки, використовуючи абсолют. Всі вони будуть складені.

.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
Це, здається, не працює. Можливо, я мав би сказати, що у мене є такий сценарій: <div style = "position: Absolut ..."> <div style = "position: Rela ..."> <div> стек цього </div> <div> стека this </div> <div> stack this </div> <div> stack this </div> </div> </div>
Tower

2
Ви хочете абсолютно розташувати діви, які "укладають це" в них. Це спрацьовує - я спробував це, перш ніж публікувати свій оригінал. Якщо ви не ставите добірників класів на діви, адаптуйте метод вибору дів у відповіді Еріка, щоб вибрати дібку стека.
Метт

1
Не працював і для мене. Забагато глядачів залишилось незрозумілим.
Ян Беллаванс

Я отримав, щоб
діви

це може мати щось спільне з опорою на дисплей?
Ян Беллаванс

50

Щоб додати відповідь Дейва:

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

Це, здається, не працює. Можливо, я мав би сказати, що у мене є такий сценарій: <div style = "position: Absolut ..."> <div style = "position: Rela ..."> <div> стек цього </div> <div> стека this </div> <div> stack this </div> <div> stack this </div> </div> </div>
Tower

Я думаю, що в цьому випадку ви хочете встановити "top: 0; left: 0;" на вашому діві, який має "положення: відносний". Однозначно тестуйте IE6 на цьому, хоча, як я не можу сказати напевно, що він буде працювати.
Ерік Венделін

10

Якщо ви маєте на увазі, поклавши буквально один на інший, один на вершину (ті ж самі позиції X, Y, але інше Z-положення), спробуйте використовувати z-indexатрибут CSS. Це має працювати (неперевірено)

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

Це повинно показувати 4 на вершині 3, 3 на вершині 2 тощо. Чим вище z-індекс, тим вищий елемент розташований на осі z. Я сподіваюся, що це допомогло вам :)



5

Я розмістив діви злегка зміщеним, так що ви можете побачити це на роботі.
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

Тепер ви можете скористатися CSS Grid, щоб виправити це.

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

І css для цього:

.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

Я знаю, що цей пост трохи старий, але у мене була така ж проблема і я намагався виправити це кілька годин. Нарешті я знайшов рішення:

якщо у нас є 2 поля, розташовані абсолютне

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

ми очікуємо, що на екрані з’явиться одне поле. Для цього нам слід встановити маржина-нижню рівну -висоті, роблячи так:

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

добре працює для мене.


0

У мене була така ж вимога, яку я спробував у нижченаведеній скрипці.

#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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.