Выровнять DIV до нижней или базовой линии

Я пытаюсь выровнять тег дочернего div в нижней или базовой линии тега родительского div.

Все, что я хочу сделать, это иметь дочерний Div в начале исходного Div, вот что он теперь выглядит:

HTML

<div id="parentDiv">
<div class="childDiv"></div>
</div>

CSS

#parentDiv
{
  width:300px;
  height:300px;
  background-color:#ccc;
  background-repeat:repeat
}
#parentDiv .childDiv
{
  height:100px;
  width:30px;
  background-color:#999;
}

Примечание

У меня будет несколько childDiv с разной высотой, и мне понадобятся все они для выравнивания к базовой линии/внизу.

Ответ 1

Вам нужно добавить следующее:

#parentDiv {
  position: relative;
}

#parentDiv .childDiv {
  position: absolute;
  bottom: 0;
  left: 0;
}

При объявлении элемента absolute он позиционируется в соответствии с его ближайшим родителем, который не является static (он должен быть absolute, relative или fixed).

Ответ 2

Используйте отображаемые значения CSS для таблицы и таблицы:

HTML

<html>
<body>

  <div class="valign bottom">
    <div>

      <div>my bottom aligned div 1</div>
      <div>my bottom aligned div 2</div>
      <div>my bottom aligned div 3</div>

    </div>
  </div>

</body>
</html>

CSS

html,body {
    width: 100%;
    height: 100%;
}
.valign {
    display: table;
    width: 100%;
    height: 100%;
}
.valign > div {
    display: table-cell;
    width: 100%;
    height: 100%;
}
.valign.bottom > div {
    vertical-align: bottom;
}

Я создал демо JSBin здесь: http://jsbin.com/INOnAkuF/2/edit

В демонстрации также есть пример, как выравнивать по центру по центру, используя ту же технику.

Ответ 3

это работает (я тестировал только ie и ff):

<html>
<head>
    <style type="text/css">
        #parent {
            height: 300px;
            width: 300px;
            background-color: #ccc;
            border: 1px solid red;
            position: relative;
        }
        #child  {
            height: 100px;
            width: 30px;
            background-color: #eee;
            border: 1px solid green;
            position: absolute;
            bottom: 0;
            left: 0;
        }
    </style>
</head>
<body>
    <div id="parent">parent
        <div id="child">child</div>
    </div>
    outside
</body>
</html>

надеюсь, что это поможет.

Ответ 4

Семь лет спустя поиск вертикального выравнивания все еще вызывает этот вопрос, поэтому я отправлю еще одно решение, которое у нас есть для нас: flexbox позиционирование. Просто установите display:flex; justify-content: flex-end; flex-direction: column в родительский div (продемонстрированный в этом fiddle):

#parentDiv
{
  display: flex;
  justify-content: flex-end;
  flex-direction: column;
  width:300px;
  height:300px;
  background-color:#ccc;
  background-repeat:repeat
}

Ответ 5

Ответ, поставленный Y. Shoham (с использованием абсолютного позиционирования), кажется, является самым простым решением в большинстве случаев, когда контейнер является фиксированной высотой, но если родительский DIV должен содержать несколько DIV и автоматически настраивать его высоту на основе динамического контента, тогда может возникнуть проблема. Мне нужно было иметь два блока динамического контента; один выровнен к верхней части контейнера, а другой - к нижней части, и хотя я мог бы довести контейнер до размера верхнего DIV, если DIV, выровненный по отношению к дну, был выше, он не изменил бы размер контейнера, а расширился бы вне, Метод, описанный выше с помощью romiem с использованием позиционирования в стиле стола, хотя и немного более сложный, является более надежным в этом отношении и позволяет выравнивать нижнюю часть и корректировать автоматическую высоту контейнера.

CSS

#container {
        display: table;
        height: auto;
}

#top {
    display: table-cell;
    width:50%;
    height: 100%;
}

#bottom {
    display: table-cell;
    width:50%;
    vertical-align: bottom;
    height: 100%;
}

HTML

<div id="container">
    <div id="top">Dynamic content aligned to top of #container</div>
    <div id="bottom">Dynamic content aligned to botttom of #container</div>
</div>

Пример

Я понимаю, что это не новый ответ, но я хотел бы прокомментировать этот подход, так как он заставил меня найти мое решение, но как новичок я не мог прокомментировать, только сообщение.

Ответ 6

Старый пост, но думал, что я поделюсь ответом для всех, кто смотрит. И потому что, когда вы используете absolute, все может пойти не так. Я бы сделал это

HTML

<div id="parentDiv"></div>
<div class="childDiv"></div>

Css

parentDiv{

}
childDiv{
    height:40px;
    margin-top:-20px;
}

И это просто спустит этот нижний div обратно в родительский div. безопасно для большинства браузеров.

Ответ 7

Вам, вероятно, пришлось бы установить дочерний div для position: absolute.

Обновите свой детский стиль до

#parentDiv .childDiv
{
  height:100px;
  width:30px;
  background-color:#999;
  position:absolute;
  top:207px;
}

Ответ 8

У меня было что-то похожее и получилось эффективно работать с добавлением дочернего элемента padding-top.

Я уверен, что некоторые из других ответов здесь найдут решение, но я не мог заставить их легко работать после много времени; Вместо этого я получил решение padding-top, которое элегантно по своей простоте, но выглядит для меня хакерским (не говоря уже о том, что значение пикселя, которое он устанавливает, вероятно, будет зависеть от высоты родителя).

Ответ 9

Если у вас есть несколько дочерних Div внутри родительского Div, вы можете использовать свойство vertical-align, как показано ниже:

.Parent div
{
  vertical-align : bottom;
}