Как отправить внутренний <div> в нижнюю часть его родительского <div>?

Внутри другого div и кода ниже. Потому что будет текст и изображения родительского div. И красный div будет последним элементом родительского div.

alt text

<div style="width: 200px; height: 150px; border: 1px solid black;">
    <div style="width: 100%; height: 50px; border: 1px solid red;">
    </div>
</div>

Ответ 1

Это один из способов

<div style="position: relative; 
            width: 200px; 
            height: 150px; 
            border: 1px solid black;">

    <div style="position: absolute; 
                bottom: 0; 
                width: 100%; 
                height: 50px; 
                border: 1px solid red;">
    </div>
</div>

Но поскольку внутренний div установлен абсолютно, вам всегда придется беспокоиться о другом содержимом во внешнем div, перекрывающем его (и вам всегда нужно устанавливать фиксированные высоты).

Если вы можете это сделать, лучше сделать этот внутренний div последним объектом DOM в вашем внешнем div и установить для него "clear: both".

Ответ 2

Сделайте внешний div position="relative" и внутренний div position="absolute" и установите его bottom="0".

Ответ 3

A flexbox способ.

HTML:

<div class="parent">
  <div>Images, text, buttons oh my!</div>
  <div>Bottom</div>
</div>

CSS

.parent {
  display: flex;
  flex-direction: column;
  justify-content: space-between;
}

/*  not necessary, just to visualize it */

.parent {
  height: 500px;
  border: 1px solid black;
}


.parent div {
  border: 1px solid red;
}

введите описание изображения здесь

Edit:

Источник - Flexbox Руководство

Поддержка браузера для flexbox - Caniuse

Ответ 4

Вам может не понадобиться абсолютное позиционирование, потому что он прерывает оплату: в некоторых случаях лучшим решением является создание элемента grandparent display:table; и родительского элемента display:table-cell;vertical-align:bottom;. После этого вы должны будете дать дочерние элементы display:inline-block;, и они будут автоматически перемещаться к нижней части родителя.

Ответ 5

Примечание. Это отнюдь не лучший способ сделать это!

Ситуация: Я должен был сделать то же самое, что только я не смог добавить никаких дополнительных div, поэтому я застрял с тем, что у меня было, а не удалял innerHTML и создавал другой через javascript почти как 2 рендекса. Мне нужно было иметь контент на внизу (анимированная панель).

Решение: Учитывая, насколько я устал, в то время мне казалось, что это нормально, даже думать о таком методе, однако я знал, что у меня есть родительский элемент DOM, начиная с высоты бара.

Вместо того, чтобы возиться с javascript дальше, я использовал ответ CSS (НЕ ВСЕГДА ХОРОШИЙ ИДЕИ)!:)

-moz-transform:rotate(180deg);
-webkit-transform:rotate(180deg);
-ms-transform:rotate(180deg);

Да, это правильно, вместо того, чтобы позиционировать DOM, я перевернул родителя вверх дном в css.

По моему сценарию это сработает! Возможно, и для других! Нет пламени!:)

Ответ 6

Вот еще один чистый трюк CSS, который не влияет на поток элементов.

#parent {
  min-height: 100vh; /* set height as you need */
  display: flex;
  flex-direction: column;
  background: grey;
}
.child {
  margin-top: auto;
  background: green;
}
<div id="parent">
  <h1>Positioning with margin</h1>
  <div class="child">
    Content to the bottom
  </div>
</div>

Ответ 7

Вот способ избежать абсолютных divs и таблиц, если вы знаете родительскую высоту:

<div class="parent">
    <div class="child"> <a href="#">Home</a>
    </div>
</div>

CSS

.parent {
    line-height:80px;
    border: 1px solid black;
}
.child {
    line-height:normal;
    display: inline-block;
    vertical-align:bottom;
    border: 1px solid red;
}

JsFiddle:

Пример

Ответ 8

<div style="width: 200px; height: 150px; border: 1px solid black;position:relative">
    <div style="width: 100%; height: 50px; border: 1px solid red;position:absolute;bottom:0">
    </div>
</div>