Как я могу разместить свой div в нижней части контейнера?
учитывая следующий HTML:
<div id="container">
<!-- Other elements here -->
<div id="copyright">
Copyright Foo web designs
</div>
</div>Я бы #copyright придерживаться нижней части #container.
могу ли я достичь этого без использования абсолютного позиционирования? Если свойство float поддерживает значение 'bottom', кажется, что это сделает трюк, но, к сожалению, это не так.
4 ответов:
скорее всего-нет.
присвоить
position:relativeдо#container, а потомposition:absolute; bottom:0;до#copyright.
#container { } #copyright { position: absolute; bottom: 0; }<div id="container"> <!-- Other elements here --> <div id="copyright"> Copyright Foo web designs </div> </div>
На самом деле, принятый ответ @User будет работать только в том случае, если окно высокое, а содержимое короткое. Но если содержимое высокое, а окно короткое, оно поместит информацию об авторских правах поверх содержимого страницы, а затем прокрутит вниз, чтобы увидеть содержимое, оставит вас с плавающим уведомлением об авторских правах. Это делает это решение бесполезным для большинства страниц (как эта страница, на самом деле).
наиболее распространенный способ сделать это-продемонстрированный подход "CSS sticky footer" или a немного более тонкая вариация. Этот подход отлично работает, если у вас есть фиксированная высота футера.
Если вам нужен нижний колонтитул переменной высоты, который будет отображаться в нижней части окна, если содержимое слишком короткое, и в нижней части содержимого, если окно слишком короткое, что вы делаете?
проглотите свою гордость и используйте стол.
например:
* { 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>попробовать его. Это будет работать для любого размера окна любое количество контента, для любого размера нижнего колонтитула, в каждом браузере... даже IE6.
Если вы съеживаетесь при мысли об использовании таблицы для макета, потратьте секунду, чтобы спросить себя, почему. CSS должен был сделать нашу жизнь проще-и это в целом-но факт в том, что даже после всех этих лет, это все еще сломанный, интуитивно понятный беспорядок. Он не может решить все проблемы. Это еще не все.
таблицы-это не круто, но по крайней мере сейчас, они иногда лучший способ решить проблема дизайна.
подход flexbox!
на поддерживаемые браузеры, вы можете использовать следующее:
.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>
решение выше, вероятно, более гибким, однако, вот альтернативное решение:
.parent { display: flex; } .child { align-self: flex-end; }.parent { height: 100px; border: 5px solid #000; display: flex; } .child { height: 40px; width: 100%; background: #f00; align-self: flex-end; }<div class="parent"> <div class="child">Align to the bottom</div> </div>
в качестве примечания вы можете добавить префиксы поставщиков для дополнительной поддержки.
да вы можете сделать это без
absoluteпозиционирование и без использованияtables (который винт с разметкой и тому подобное).демо
Это тестируется для работы на 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!
Comments