【问题标题】:Bootstrap 3 CSS - fixed navbar causes a lot of white space on short pagesBootstrap 3 CSS - 修复导航栏在短页面上导致大量空白
【发布时间】:2015-08-26 18:02:50
【问题描述】:

按照官方文档中的this 示例,我注意到在高度将

我无法根据this 示例指定页脚的高度(它可能会动态增加)所以我想我不能将它粘贴到页脚上?

如何解决这个问题?

【问题讨论】:

  • 你能创建一个 Plunkr 或类似的东西来展示你想要做什么吗?您链接到的示例没有页脚,因此至少对我来说不清楚您的问题到底是什么。
  • 我正在努力实现这一目标:link 但我无法指定页脚的高度。不幸的是,似乎有人在这里只是为了投反对票而不是帮助......谢谢你的帮助@Christina
  • 也许您也可以更新问题中的链接,因为它指向不同的 Bootstrap 示例,从而使人们更难理解您的问题并为您提供帮助。

标签: css twitter-bootstrap sticky-footer


【解决方案1】:

使用 Boostrap 的粘性页脚,对于页脚的高度,使用这个 jquery,它会检查页脚的高度并将其添加到 html 标记中。 它在页面加载以及 Window.resize 事件上运行,因此非常适合响应式项目。

$(document).ready(function(){
    $(window).resize(function(){
        $("html").css("padding-bottom",$(".footer").outerHeight())
    }),
        $("html").css("padding-bottom",$(".footer").outerHeight()
    );
});

【讨论】:

  • 谢谢,您的解决方案也有效。不幸的是我不能投票,因为我还没有足够的声誉......
  • 好的!但是,如果您的页脚有更多详细信息/链接,例如下面的 StackOverflow 页脚,您需要在不同的屏幕分辨率下更改页脚的高度,因为内容将垂直堆叠。然后您可以使用此脚本或在不同断点使用媒体查询手动添加自定义 css。
  • 我遇到了一些随机问题:当页面加载时,脚本会为正文提供 631 像素的 padding-bottom。目前正确的填充应该是 692px。事实上,只要我调整窗口大小,它就会再次计算高度并且布局得到修复。我已经将脚本放在jQuery(document).ready(function($) 中,所以当脚本工作时,dom 应该完全加载。对此有任何想法吗?只有在 Firefox 中,计算总是在页面加载时正确完成。
  • 找到了问题...正确的方法不是准备好文档,而是加载窗口!
  • 好的,但我的代码没有遇到任何此类问题。我在几个网站上使用它,我没有问题
【解决方案2】:

在您在评论中链接到的示例中,实际上使页脚粘在页面底部的不是页脚高度,而是以下 CSS 规则:

.footer {
  position: absolute;
  bottom: 0;
}

如果您通过浏览器的开发者工具查看页脚并禁用height CSS 规则,您可以自己看到这一点,页脚将继续位于页面底部。

就正文页边距而言,由于您的页脚没有固定高度,因此您可以设置它的唯一方法是使用 Javascript 测量页脚并将正文页边距设置为document.ready。见附件示例:

$(document).ready(function(){
  var footerHeight = $('.footer').height();
  $('body').css('margin-bottom', footerHeight);
});
/* 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;
}


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

body > .container {
  padding: 60px 15px 0;
}
.container .text-muted {
  margin: 20px 0;
}

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

code {
  font-size: 80%;
}
<link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://getbootstrap.com/dist/js/bootstrap.min.js"></script>

<!-- Fixed navbar -->
    <nav class="navbar navbar-default navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">Toggle navigation</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">Project name</a>
        </div>
        <div id="navbar" class="collapse navbar-collapse">
          <ul class="nav navbar-nav">
            <li class="active"><a href="#">Home</a></li>
            <li><a href="#about">About</a></li>
            <li><a href="#contact">Contact</a></li>
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Dropdown <span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <li><a href="#">Action</a></li>
                <li><a href="#">Another action</a></li>
                <li><a href="#">Something else here</a></li>
                <li class="divider"></li>
                <li class="dropdown-header">Nav header</li>
                <li><a href="#">Separated link</a></li>
                <li><a href="#">One more separated link</a></li>
              </ul>
            </li>
          </ul>
        </div><!--/.nav-collapse -->
      </div>
    </nav>

    <!-- Begin page content -->
    <div class="container">
      <div class="page-header">
        <h1>Sticky footer with fixed navbar</h1>
      </div>
      <p class="lead">Pin a fixed-height footer to the bottom of the viewport in desktop browsers with this custom HTML and CSS. A fixed navbar has been added with <code>padding-top: 60px;</code> on the <code>body &gt; .container</code>.</p>
      <p>Back to <a href="../sticky-footer">the default sticky footer</a> minus the navbar.</p>
    </div>

    <footer class="footer">
      <div class="container">
        <p class="text-muted">Place sticky footer content here.</p>
      </div>
    </footer>

【讨论】:

  • 其实那个例子还有一个body { /* Margin bottom by footer height */ margin-bottom: 60px; }。因此,即使可以避免页脚高度,该边距仍然是强制性的,并且不能指定,因为页脚的高度是可变的。否则页脚将覆盖容器。
  • @vismark 你说得对,我完全错过了。在这种情况下,您可以在页面加载时测量页脚并使用 javascript 设置边距。请参阅我的更新答案。
  • 工作就像一个魅力,克里斯蒂娜!太感谢了!在这一点上只是一个问题:将如此重要的功能委托给 Javascript 是否不安全(出于兼容性目的)?
  • @vismark 我不明白为什么它会不安全。如果您担心浏览器与 jQuery 的兼容性,您只需选择目标浏览器支持的版本。如果您担心用户在他们的浏览器中完全禁用 javascript,我猜在这种情况下您会遇到更大的问题...如果您想在没有可用 javascript 的情况下完全安全,您可以还使用 javascript 设置页脚的位置。因此,如果没有 javascript,至少页脚不会粘在底部,而不是隐藏部分内容。
猜你喜欢
  • 2019-07-09
  • 2023-03-08
  • 2020-11-15
  • 2023-04-09
  • 2014-11-10
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多