Bootstrap 4 - 粘性页脚 - 动态页脚高度

时间:2017-08-28 05:35:22

标签: html css twitter-bootstrap bootstrap-4 sticky-footer

我需要在页面上放一个粘性页脚,但是我的页脚没有明确的高度设置。在较小的屏幕上 - 行调整大小,页脚变长。

因此,getbootstrap上提供的默认粘性页脚示例不起作用,因为它需要固定的页脚高度。

有任何方法可以实现吗?

/* 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;
  line-height: 60px; /* Vertically center the text there */
  background-color: #f5f5f5;
}


/* Custom page CSS
-------------------------------------------------- */
/* Not required for template or sticky footer method. */

body > .container {
  padding: 60px 15px 0;
}

.footer > .container {
  padding-right: 15px;
  padding-left: 15px;
}

code {
  font-size: 80%;
}

4 个答案:

答案 0 :(得分:14)

现在Bootstrap 4是flexbox,可以使用...

完成粘性页脚
<wrapper class="d-flex flex-column">
    <nav>
    </nav>
    <main class="flex-fill">
    </main>
    <footer>
    </footer>
</wrapper>

body, wrapper {
   min-height:100vh;
}

.flex-fill {
   flex:1 1 auto;
}

演示:Bootstrap 4 Sticky Footer(4.0.0)

注意: flex-fill实用程序类将included in the next Bootstrap 4.1发布。因此,在该版本发布之后,不需要额外的用于flex-fill的CSS。

答案 1 :(得分:0)

使用min-height代替高度,使其可变高度。

https://codepen.io/hunzaboy/pen/prxgRb

同样在较小的屏幕上,只需移除绝对位置并使其静止。

答案 2 :(得分:0)

一种非常简单的方法是将导航栏用作页脚。它带有一个非常方便的固定底部类。要更改间距,请参见此处的文档... https://getbootstrap.com/docs/4.2/utilities/spacing/

<nav class="navbar fixed-bottom navbar-light bg-light">
  <a class="navbar-brand" href="#">Fixed bottom</a>
</nav>

答案 3 :(得分:0)

如果页面高度小于视口高度,则此脚本会动态添加fixed-bottom类:

jQuery(function ($) {
  function fixedFooter(){
    var $footer = $('.site-footer');
    if(typeof $footer === 'undefined') return 0;
      $footer.removeClass('fixed-bottom');
      if($(window).height() > $body.height()){
        $footer.addClass('fixed-bottom');
      }
    }

    // call `fixedFooter()` when page height changed (not by viewport resize)
    if(typeof window.lastPageHeight === 'undefined'){
      setInterval(function () {
        if(window.lastPageHeight !== $body.height()){
          fixedFooter();
        }
      }, 1000);
    }
    window.lastPageHeight = $body.height();
  }

  fixedFooter(); // first call

  // call `fixedFooter()` when viewport height changed
  window.addEventListener('resize', function(){
    fixedFooter();
  }, true);

});

样式,以防止与模式,固定的侧边栏等重叠...

.site-footer.fixed-bottom {
  z-index: 1 !important;
}