아래 예를 참조하십시오. 이렇게하면 페이지의 내용이 적은 경우 바닥 글이 아래쪽에 고정되고 페이지의 내용이 많은 경우 바닥 글처럼 작동합니다.
CSS
*{
margin:0;}
html, body {
height:100%;}.wrapper {
min-height:100%;
height:100%;
margin:0auto-155px;/* the bottom margin is the negative value of the footer's height */}.footer,.push {
height:155px;/* .push must be the same height as .footer */}
/* Sticky footer styles
-------------------------------------------------- */
html {
position: relative;
min-height:100%;}
body {/* Margin bottom by footer height */
margin-bottom:60px;}.footer {
position: absolute;
bottom:0;
width:100%;/* Set the fixed height of the footer here */
height:60px;
background-color:#f5f5f5;}
이 HTML을 위해
<html>
...
<body><!-- Begin page content --><divclass="container"></div>
...
<footerclass="footer"></footer></body></html>
html,
body { height:100%;}
body {
display: table;
width:100%;}.page-row {
display: table-row;
height:1px;}.page-row-expanded { height:100%;}
답변
순수한 CSS 솔루션을 원하면 2nd 이후로 스크롤하십시오 <hr>. 첫 번째는 초기 답변입니다 (2016 년에 다시 제공)
위 솔루션의 주요 결함은 바닥 글의 높이 가 고정되어 있다는 것 입니다.
그리고 그것은 사람들이 엄청난 수의 장치를 사용하고 당신이 그것을 거의 기대하지 않을 때 장치를 돌리는 나쁜 습관을 가지고있는 실제 세계에서는 그것을 자르지 않습니다 ** Po! ** 바닥 글 뒤에 페이지 내용이 있습니다!
실제로는 바닥 글의 높이를 계산하고 해당 높이에 맞게 페이지 내용을 동적으로 조정하는 함수가 필요합니다 padding-bottom. 또한 바닥 글 에서뿐만 아니라 페이지 load및 resize이벤트 에서도이 작은 기능을 실행해야합니다 DOMSubtreeModified(바닥 글이 동적으로 동적으로 업데이트되거나 상호 작용할 때 크기가 변경되는 애니메이션 요소가 포함 된 경우).
다음은 jQuery v3.0.0및 Bootstrap을 사용한 개념 증명 v4-alpha이지만 하위 버전에서 작동하지 않는 이유는 없습니다.
jQuery(document).ready(function($){
$.fn.accomodateFooter =function(){var footerHeight = $('footer').outerHeight();
$(this).css({'padding-bottom': footerHeight +'px'});}
$('footer').on('DOMSubtreeModified',function(){
$('body').accomodateFooter();})
$(window).on('resize',function(){
$('body').accomodateFooter();})
$('body').accomodateFooter();
window.addMoreContentToFooter =function(){var f = $('footer');
f.append($('<p />',{
text:"Human give me attention meow flop over sun bathe licks your face wake up wander around the house making large amounts of noise jump on top of your human's bed and fall asleep again. Throwup on your pillow sun bathe. The dog smells bad jump around on couch, meow constantly until given food, so nap all day, yet hiss at vacuum cleaner."})).append($('<hr />'));}});
<linkhref="http://v4-alpha.getbootstrap.com/dist/css/bootstrap.min.css"rel="stylesheet"><linkhref="http://v4-alpha.getbootstrap.com/examples/starter-template/starter-template.css"rel="stylesheet"><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0/jquery.min.js"></script><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/tether/1.2.0/js/tether.min.js"></script><scriptsrc="http://v4-alpha.getbootstrap.com/dist/js/bootstrap.min.js"></script><navclass="navbar navbar-toggleable-md navbar-inverse bg-inverse fixed-top"><buttonclass="navbar-toggler navbar-toggler-right"type="button"data-toggle="collapse"data-target="#navbarsExampleDefault"aria-controls="navbarsExampleDefault"aria-expanded="false"aria-label="Toggle navigation"><spanclass="navbar-toggler-icon"></span></button><aclass="navbar-brand"href="#">Navbar</a><divclass="collapse navbar-collapse"id="navbarsExampleDefault"><ulclass="navbar-nav mr-auto"><liclass="nav-item active"><aclass="nav-link"href="#">Home <spanclass="sr-only">(current)</span></a></li><liclass="nav-item"><aclass="nav-link"href="#">Link</a></li><liclass="nav-item"><aclass="nav-link disabled"href="#">Disabled</a></li><liclass="nav-item dropdown"><aclass="nav-link dropdown-toggle"href="http://example.com"id="dropdown01"data-toggle="dropdown"aria-haspopup="true"aria-expanded="false">Dropdown</a><divclass="dropdown-menu"aria-labelledby="dropdown01"><aclass="dropdown-item"href="#">Action</a><aclass="dropdown-item"href="#">Another action</a><aclass="dropdown-item"href="#">Something else here</a></div></li></ul><formclass="form-inline my-2 my-lg-0"><inputclass="form-control mr-sm-2"type="text"placeholder="Search"><buttonclass="btn btn-outline-success my-2 my-sm-0"type="submit">Search</button></form></div></nav><divclass="container"><divclass="starter-template"><h1>Feed that footer - not a game (yet!)</h1><pclass="lead">You will notice the body bottom padding is growing to accomodate the height of the footer as you feed it (so the page contents do not get covered by it).</p><buttonclass="btn btn-warning"onclick="window.addMoreContentToFooter()">Feed that footer</button><hr/><blockquoteclass="lead"><strong>Note:</strong> I used jQuery <code>v3.0.0</code> and Bootstrap <code>v4-alpha</code> but there is no reason why it shouldn't work with lower versions of each.</blockquote></div></div><footer>I am a footer with dynamic content.
<hr/></footer>
처음 에이 솔루션을 여기에 게시 했지만이 질문에 게시하면 더 많은 사람들에게 도움이 될 수 있음을 깨달았습니다.
참고 : 나는 의도적으로 포장 한 $([selector]).accomodateFooter()이 모든 DOM 요소를 실행할 수 있도록 대부분의 레이아웃에이 (가) 아니므로,하는 jQuery 플러그인으로 $('body')의 bottom-padding조정이 요구를하지만와 요소 래퍼 일부 페이지 position:relative(의 보통 바로 위 부모 footer) .
나중에 수정 (최초 답변 후 3 년 이상) :
이 시점에서 더 이상 페이지 하단에 동적 콘텐츠 바닥 글을 배치하기 위해 JavaScript를 사용할 수 없다고 생각합니다. flexbox, 번개처럼 빠른 크로스 브라우저를 사용하여 CSS만으로도 달성 할 수 있습니다.
// Left this in so you could inject content into the footer and test it:// (but it's no longer sizing the footer)function addMoreContentToFooter(){var f = $('footer');
f.append($('<p />',{
text:"Human give me attention meow flop over sun bathe licks your face wake up wander around the house making large amounts of noise jump on top of your human's bed and fall asleep again. Throwup on your pillow sun bathe. The dog smells bad jump around on couch, meow constantly until given food, so nap all day, yet hiss at vacuum cleaner."})).append($('<hr />'));}
<linkrel="stylesheet"href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"crossorigin="anonymous"><scriptsrc="https://code.jquery.com/jquery-3.4.1.slim.min.js"integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n"crossorigin="anonymous"></script><scriptsrc="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo"crossorigin="anonymous"></script><scriptsrc="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6"crossorigin="anonymous"></script><divclass="wrapper"><navclass="navbar navbar-expand-lg navbar-light bg-light fixed-top"><aclass="navbar-brand"href="#">Navbar</a><buttonclass="navbar-toggler"type="button"data-toggle="collapse"data-target="#navbarSupportedContent"aria-controls="navbarSupportedContent"aria-expanded="false"aria-label="Toggle navigation"><spanclass="navbar-toggler-icon"></span></button><divclass="collapse navbar-collapse"id="navbarSupportedContent"><ulclass="navbar-nav mr-auto"><liclass="nav-item active"><aclass="nav-link"href="#">Home <spanclass="sr-only">(current)</span></a></li><liclass="nav-item"><aclass="nav-link"href="#">Link</a></li><liclass="nav-item dropdown"><aclass="nav-link dropdown-toggle"href="#"id="navbarDropdown"role="button"data-toggle="dropdown"aria-haspopup="true"aria-expanded="false">
Dropdown
</a><divclass="dropdown-menu"aria-labelledby="navbarDropdown"><aclass="dropdown-item"href="#">Action</a><aclass="dropdown-item"href="#">Another action</a><divclass="dropdown-divider"></div><aclass="dropdown-item"href="#">Something else here</a></div></li><liclass="nav-item"><aclass="nav-link disabled"href="#"tabindex="-1"aria-disabled="true">Disabled</a></li></ul><formclass="form-inline my-2 my-lg-0"><inputclass="form-control mr-sm-2"type="search"placeholder="Search"aria-label="Search"><buttonclass="btn btn-outline-success my-2 my-sm-0"type="submit">Search</button></form></div></nav><main><divclass="container"><divclass="starter-template"><h1>Feed that footer - not a game (yet!)</h1><pclass="lead">Footer won't ever cover the body contents, as its not fixed. It's simply placed at the bottom when the page should be shorter using `min-height:100vh` on container and using flexbox to push it down.</p><buttonclass="btn btn-warning"onclick="addMoreContentToFooter()">Feed that footer</button><hr/><blockquoteclass="lead"><strong>Note:</strong> This example uses current latest versions of jQuery (<code>3.4.1.slim</code>) and Bootstrap (<code>4.4.1</code>) (unlike the one above).
</blockquote></div></div></main><footer>I am a footer with dynamic content.
<hr/></footer></div>