Как я могу поместить мой div в нижней части контейнера?

Учитывая следующий HTML:

<div id="container">
  <!-- Other elements here -->
  <div id="copyright">
    Copyright Foo web designs
  </div>
</div>

Ответы

Ответ 1

Скорее всего нет.

Назначьте position:relative #container, а затем position:absolute; bottom:0; position:absolute; bottom:0; в # #copyright.


#container {
    position: relative;
}
#copyright {
    position: absolute;
    bottom: 0;
}
<div id="container">
  <!-- Other elements here -->
  <div id="copyright">
    Copyright Foo web designs
  </div>
</div>

Ответ 2

На самом деле, принятый ответ @User будет работать только в том случае, если окно высокое, а содержимое короткое. Но если содержимое длинное, а окно короткое, оно поместит информацию об авторских правах поверх содержимого страницы, а затем прокрутит вниз, чтобы увидеть содержимое, и у вас появится плавающее уведомление об авторских правах. Это делает это решение бесполезным для большинства страниц (например, для этой страницы).

Наиболее распространенный способ сделать это - продемонстрированный подход "липкий нижний колонтитул CSS", или немного более тонкий вариант. Этот подход прекрасно работает - если у вас есть нижний колонтитул фиксированной высоты.

Если вам нужен нижний колонтитул переменной высоты, который будет отображаться в нижней части окна, если содержимое слишком короткое, и в нижней части содержимого, если окно слишком короткое, что вы будете делать?

Проглоти свою гордость и используй стол.

Например:

* {
    padding: 0;
    margin: 0;
}

html, body {
    height: 100%;
}

#container {
    height: 100%;
    border-collapse: collapse;
}
<!DOCTYPE html>
<html>
<body>
    <table id="container">
        <tr>
            <td valign="top">
                <div id="main">Lorem ipsum, etc.</div>
            </td>
        </tr>
        <tr>
            <td valign="bottom">
                <div id="footer">Copyright some evil company...</div>
            </td>
        </tr>
    </table>
</body>
</html>

Ответ 3

Подход к флексбоксу!

В поддерживаемых браузерах вы можете использовать следующее:

Пример здесь

.parent {
  display: flex;
  flex-direction: column;
}
.child {
  margin-top: auto;
}

.parent {
  height: 100px;
  border: 5px solid #000;
  display: flex;
  flex-direction: column;
}
.child {
  height: 40px;
  width: 100%;
  background: #f00;
  margin-top: auto;
}
<div class="parent">
  <div class="child">Align to the bottom</div>
</div>

Ответ 4

Да, вы можете сделать это без позиционирования absolute и без использования table (который винт с разметкой и т.д.)

DEMO
Это проверено на работу с IE > 7, chrome, FF и очень легко добавить в существующий макет.

<div id="container">
    Some content you don't want affected by the "bottom floating" div
    <div>supports not just text</div>

    <div class="foot">
        Some other content you want kept to the bottom
        <div>this is in a div</div>
    </div>
</div>
#container {
    height:100%;
    border-collapse:collapse;
    display : table;
}

.foot {
    display : table-row;
    vertical-align : bottom;
    height : 1px;
}

Он эффективно делает то, что float:bottom, даже учитывая вопрос, указанный в ответе @Rick Reilly!

Ответ 5

Его старый вопрос, но это уникальный подход, который может помочь в нескольких случаях.

Чистый CSS, без абсолютного позиционирования, без фиксации любой высоты, кросс-браузер (IE9 +)

проверьте, что Рабочий скрипт

Поскольку нормальный поток "сверху вниз", мы не можем просто попросить div #copyright придерживаться нижней части его родителя без какого-либо позиционирования какого-то рода. Но если мы хотим, чтобы #copyright div придерживайтесь вершины своего родителя, это будет очень просто - потому что это нормальный поток.

Таким образом, мы будем использовать это в наших интересах. мы изменим порядок div в HTML, теперь div #copyright находится вверху, а содержимое сразу же следует ему. мы также делаем контент div растянутым полностью (используя псевдоэлементы и методы очистки)

теперь это просто вопрос обращения этого ордера обратно в представление. что легко можно сделать с помощью CSS-преобразования.

Мы вращаем контейнер на 180 градусов, а теперь: вверх-вниз. (и мы возвращаем обратно содержимое, чтобы выглядеть нормально)

Если мы хотим иметь scroolbar в области содержимого, нам нужно применить немного больше магии CSS. как показано Здесь [в этом примере содержимое находится ниже заголовка, но его та же идея]

* {
  margin: 0;
  padding: 0;
}

html,
body,
#Container {
  height: 100%;
  color: white;
}

#Container:before {
  content: '';
  height: 100%;
  float: left;
}

#Copyright {
  background-color: green;
}

#Stretch {
  background-color: blue;
}

#Stretch:after {
  content: '';
  display: block;
  clear: both;
}

#Container,
#Container>div {
  -moz-transform: rotateX(180deg);
  -ms-transform: rotateX(180deg);
  -o-transform: rotate(180deg);
  -webkit-transform: rotateX(180deg);
  transform: rotateX(180deg);
}
<div id="Container">
  <div id="Copyright">
    Copyright Foo web designs
  </div>
  <div id="Stretch">
    <!-- Other elements here -->
    <div>Element 1</div>
    <div>Element 2</div>
  </div>
</div>

Ответ 6

Попробуйте это;

<div id="container">
  <div style="height: 100%; border:1px solid #ff0000;">
  <!-- Other elements here -->
  </div>
</div>
<div id="copyright" style="position:relative;border:1px solid #00ff00;top:-25px">
   Copyright Foo web designs
</div>

Ответ 7

Создайте еще один контейнер div для элементов выше #copyright. Чуть выше авторских прав добавьте новый div:  <div style="clear:both;"></div> Это заставит нижний колонтитул находиться под всем остальным, как в случае использования относительного позиционирования (bottom:0px;).

Ответ 8

Хотя ни один из приведенных здесь ответов, по-видимому, не подходит или не работает в моем конкретном случае, я натолкнулся на эту статью, в которой содержится это замечательное решение:

#container {
  display: table;
}

#copyright {
  display: table-footer-group;
}

Я нахожу это очень полезным для применения адаптивного дизайна для мобильного дисплея без необходимости переупорядочивать весь HTML-код веб-сайта, устанавливая сам TG41 в виде таблицы.

Обратите внимание, что только первые table-footer-group или table-header-group будут отображаться как таковые: если их больше одного, остальные будут отображаться как table-row-group.

Ответ 9

Вы действительно можете align поле bottom без использования position:absolute, если знаете height #container, используя функцию выравнивания текста элементов inline-block.

Здесь вы можете увидеть его в действии.

Это код:

#container {
    /* So the #container most have a fixed height */
    height: 300px;
    line-height: 300px;
    background:Red;
}

#container > * {
    /* Restore Line height to Normal */
    line-height: 1.2em;
}

#copyright {
    display:inline-block;
    vertical-align:bottom;
    width:100%; /* Let it be a block */
    background:green;
}

Ответ 10

Ссылка на CodePen здесь.

html, body {
    width: 100%;
    height: 100%;
}

.overlay {
    min-height: 100%;
    position: relative;
}

.container {
    width: 900px;
    position: relative;
    padding-bottom: 50px;
}

.height {
    width: 900px;
    height: 50px;
}

.footer {
    width: 900px;
    height: 50px;
    position: absolute;
    bottom: 0;
}
<div class="overlay">
    <div class="container">
        <div class="height">
            content
        </div>
    </div>

    <div class="footer">
        footer
    </div>
</div>

Ответ 11

Используя свойство translateY и top

Просто установите дочерний элемент в позицию: относительный и перемещайте его вверх: 100% (высота 100% родителя) и придерживайтесь нижней части родительского объекта преобразованием: translateY (-100%) (что -100% от высота ребенка).

Преимущества

  • вы не берете элемент из потока страницы
  • это динамический

Но все же просто обход: (

.copyright{
   position: relative;
   top: 100%;
   transform: translateY(-100%);
}

Не забывайте префиксы для более старого браузера.

Ответ 12

Если вы хотите, чтобы он "прилипал" к низу, независимо от высоты контейнера, тогда абсолютное позиционирование - это путь. Конечно, если элемент авторского права является последним в контейнере, он всегда будет внизу.

Можете ли вы расширить свой вопрос? Объясните, что именно вы пытаетесь сделать (и почему вы не хотите использовать абсолютное позиционирование)?

Ответ 13

Кроме того, если существуют условия с использованием position:absolute; или position:relative;, вы всегда можете попробовать padding parent div или поставить margin-top:x;. Не очень хороший метод в большинстве случаев, но в некоторых случаях он может пригодиться.

Ответ 14

В CSS ничего не называется float:bottom. Лучше всего использовать позиционирование в таких случаях:

position:absolute;
bottom:0;

Ответ 15

Если вы не знаете высоту дочернего блока:

    #parent{background:green;width:200px;height:200px;display:table-cell;vertical-align:bottom;}
    .child{background:red;vertical-align:bottom;}

  </style>
</head>
<body>

<div id="parent">
  <div class="child">child
  </div> 
  </div>

http://jsbin.com/ULUXIFon/3/edit

Если вы знаете, что высота дочернего блока добавляет дочерний блок, добавьте padding-top/margin-top:

    #parent{background:green;width:200px;height:130px;padding-top:70px;}
    .child{background:red;vertical-align:bottom;height:130px;}

<div id="parent">
  <div class="child">child
  </div> 
  </div>  

Ответ 16

Возможно, это помогает кому-то: вы всегда можете поместить div за пределы другого div и затем нажимать его вверх, используя отрицательный запас:

<div id="container" style="background-color: #ccc; padding-bottom: 30px;">
  Hello!
</div>
<div id="copyright" style="margin-top: -20px;">
  Copyright Foo web designs
</div>

Ответ 17

Просто потому, что это вообще не упоминалось, что обычно хорошо работает в таких ситуациях, как ваша:

Размещение символа copyright-div после контейнера-div

Вам нужно будет только форматировать div-copyright, аналогично другому контейнеру (такая же общая ширина, центровка и т.д.), и все в порядке.

CSS

#container, #copyright {
    width: 1000px;
    margin:0 auto;
}

HTML:

<div id="container">
    <!-- Other elements here -->
</div>

<div id="copyright">
    Copyright Foo web designs
</div>

Единственное время, когда это может быть не идеальным, - это когда ваш контейнер-div объявлен с помощью height:100%, и пользователю потребуется прокрутить вниз, чтобы увидеть авторское право. Но даже вы можете работать (например, margin-top:-20px - когда высота вашего элемента авторского права составляет 20 пикселей).

  • Абсолютное позиционирование
  • Нет расположения таблиц
  • Без сумасшедшего css, который выглядит по-разному в каждом другом браузере (ну, по крайней мере, IE, вы знаете)
  • Простой и понятный формат

Кроме того: я знаю, что OP попросил решение, которое "... придерживается нижней части" контейнера "div...", а не что-то под ним, но давайте, люди ищут хорошие решения здесь, и это один!

Ответ 18

Для тех, у кого есть только один ребенок в контейнере, вы можете использовать подход table-cell и vertical-align, который надежно работал для позиционирования одного div в нижней части его родителя.

Обратите внимание, что использование table-footer-group в качестве других упомянутых ответов приведет к нарушению расчета высоты родительского table.

#container {
    display: table;
    width: 100%;
    height: 200px;
}
#item {
    display: table-cell;
    vertical-align: bottom;
}
<div id="container">
    <div id="item">Single bottom item</div>
</div>

Ответ 19

CSS Grid

Поскольку использование CSS Grid увеличивается, я хотел бы предложить align-self элементу, который находится внутри контейнера сетки.

align-self может содержать любое из значений: end, self-end, flex-end для следующего примера.

#parent {
  display: grid;
}

#child1 {
  align-self: end;
}

/* Extra Styling for Snippet */

#parent {
  height: 150px;
  background: #5548B0;
  color: #fff;
  padding: 10px;
  font-family: sans-serif;
}

#child1 {
  height: 50px;
  width: 50px;
  background: #6A67CE;
  text-align: center;
  vertical-align: middle;
  line-height: 50px;
}
<div id="parent">
  <!-- Other elements here -->
  <div id="child1">
    1
  </div>

</div>

Ответ 20

Вот подход, предназначенный для создания элемента с известной высотой и шириной (по крайней мере приблизительно) с поплавком вправо и оставаясь внизу, в то время как он ведет себя как встроенный элемент к другим элементам. Он фокусируется на нижнем правом углу, потому что вы можете легко разместить его в любом другом углу с помощью других методов.

Мне нужно было создать панель навигации, в которой бы были фактические ссылки внизу справа и случайные элементы-братья, при этом гарантируя, что сам бар растягивается должным образом, не нарушая макет. Я использовал элемент "shadow", чтобы занять пространство ссылок на панели навигации и добавил его в конец дочерних узлов контейнера.


<!DOCTYPE html>
<div id="container">
  <!-- Other elements here -->
  <div id="copyright">
    Copyright Foo web designs
  </div>
  <span id="copyright-s">filler</span>
</div>

<style>
  #copyright {
    display:inline-block;
    position:absolute;
    bottom:0;
    right:0;
  }
  #copyright-s {
    float:right;
    visibility:hidden;
    width:20em; /* ~ #copyright.style.width */
    height:3em; /* ~ #copyright.style.height */
  }
</style>

Ответ 21

 #container{width:100%; float:left; position:relative;}
#copyright{position:absolute; bottom:0px; left:0px; background:#F00; width:100%;}
#container{background:gray; height:100px;}
<div id="container">
  <!-- Other elements here -->
  <div id="copyright">
    Copyright Foo web designs
  </div>
</div>

Ответ 22

Div стиля, position:absolute;bottom:5px;width:100%; работает, Но для этого потребовалась больше ситуации с прокруткой.

window.onscroll = function() {
    var v = document.getElementById("copyright");
    v.style.position = "fixed";
    v.style.bottom = "5px";
}