Как отправить внутренний <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>