Bootstrap 3 - 左侧边栏与内容区域相同的高度,浏览器窗口底部的页脚

时间:2018-02-15 15:42:39

标签: html css twitter-bootstrap twitter-bootstrap-3

使用Bootstrap 3.3.7

创建布局时遇到了一些困难

我已经设置了一个小提示来展示我得到的东西:https://jsfiddle.net/b8ukxb41/5/

我有三个问题似乎无法解决:

  1. 我希望左手导航菜单(红色边框勾勒)与内容区域的高度相同(用蓝色边框勾勒)。

  2. 无论内容区域内有多少内容,页脚都应始终位于浏览器窗口的“底部”。我想要一个粘性页脚 - 如果浏览器中出现滚动条,则页脚应始终位于浏览器窗口的底部,不会显示粘滞。

  3. 如果内容区域中有大量内容,则右侧应该有一个滚动条。但是,左侧导航菜单应保持固定位置。

  4. 我能说的最接近的事情就像Gmail一样,你可以在其中向下滚动右边的消息列表,但是左边的文件夹导航仍然处于固定位置 - 左列完全向下在浏览器窗口的底部。

    我已尝试以下方法来解决问题,但这些解决方案都不起作用:

    1. 在带有绿色边框的容器上使用display: flex;,即<div class="container-fluid" style="border:1px solid green; display: flex;">。这似乎没有做任何事情。我的依据是How can I make Bootstrap columns all the same height?

    2. 中的信息
    3. 我尝试使用以下CSS作为页脚:

      footer {
          position: absolute;
          right: 0;
          bottom: 0;
          left: 0;
      }
      
    4. 问题在于,有时页脚会出现在带有红色边框的导航菜单“内部”。如果您向右滚动到窗口底部,它只会出现在浏览器窗口的底部。

      1. 我不知道怎么做,虽然我想要的效果是按照这里显示的那样:https://codepen.io/sass-munch/pen/YerOLG
      2. 我花了很长时间研究这个问题,并感谢任何人提供的任何有用的建议。

        我想要实现的整体事情总结如下:红色边框导航应与蓝色边框内容区域的高度相同。标题应该是固定的。页脚应始终显示在浏览器窗口的底部 - 无论蓝色内容区域中有多少内容:

        enter image description here

3 个答案:

答案 0 :(得分:1)

我不能代表问题2)和3),但快速浏览一下,告诉我你的#sidebar有一个“margin-top:10px;”对此有所规定。删除此规则以使红色和蓝色框从相同高度开始。

答案 1 :(得分:1)

根据给定的 HTML

,不使用flexbox
  • 设置页脚的高度,例如50px
  • 右侧的主要内容,侧边栏和.content

    身高:calc(100vh - 100px)(50px导航栏高度和50px页脚高度)。

  • 右侧 .content设置overflow-y: auto

实施例

main,
main aside,
main .content {
  height: calc(100vh - 100px);
}

main {
  margin-top: 50px;
}

main aside,
main .content {
  padding: 15px 0;
}

main aside {
  background: red;
}

main .content {
  overflow-y: auto;
  background: blue;
}

.footer {
  height: 50px;
  line-height: 50px;
  background: #F8F8F8;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<div class="navbar navbar-fixed-top navbar-default" role="navigation">
  <div class="container-fluid">
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
		        <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 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>
      </ul>
    </div>
    <!-- /.nav-collapse -->
  </div>
  <!-- /.container -->
</div>
<!-- /.navbar -->

<main>
  <div class="container-fluid">
    <div class="row">
      <aside class="hidden-xs col-sm-3">
        <ul>
          <li>List 1</li>
          <li>List 2</li>
          <li>List 3</li>
          <li>List 4</li>
          <li>List 5</li>
        </ul>
      </aside>
      <div class="content col-sm-9">
        <div class="jumbotron">
          <a href="#" class="visible-xs" data-toggle="offcanvas"><i class="fa fa-lg fa-reorder"></i></a>
          <h1>test</h1>
          <p>This is an example to show the potential of an offcanvas layout pattern in Bootstrap. Try some responsive-range viewport sizes to see it in action.</p>
        </div>
        <div class="col-xs-12">
          <h2>Heading</h2>
          <p>Bootstrap is a front-end framework that uses CSS and JavaScript to facilitate responsive Web design. Bootply is a playground for Bootstrap that enables developers and designers to test, prototype and create mockups using Bootstrap friendly HTML,
            CSS and Javascript.</p>
          <p><a class="btn btn-default" href="#">View details »</a></p>
        </div>
        <div class="col-xs-12">
          <h2>Heading</h2>
          <p>Bootstrap is a front-end framework that uses CSS and JavaScript to facilitate responsive Web design. Bootply is a playground for Bootstrap that enables developers and designers to test, prototype and create mockups using Bootstrap friendly HTML,
            CSS and Javascript.</p>
          <p><a class="btn btn-default" href="#">View details »</a></p>
        </div>
        <div class="col-xs-12">
          <h2>Heading</h2>
          <p>Bootstrap is a front-end framework that uses CSS and JavaScript to facilitate responsive Web design. Bootply is a playground for Bootstrap that enables developers and designers to test, prototype and create mockups using Bootstrap friendly HTML,
            CSS and Javascript.</p>
          <p><a class="btn btn-default" href="#">View details »</a></p>
        </div>
        <div class="col-xs-12">
          <h2>Heading</h2>
          <p>Bootstrap is a front-end framework that uses CSS and JavaScript to facilitate responsive Web design. Bootply is a playground for Bootstrap that enables developers and designers to test, prototype and create mockups using Bootstrap friendly HTML,
            CSS and Javascript.</p>
          <p><a class="btn btn-default" href="#">View details »</a></p>
        </div>
      </div>
    </div>
  </div>
</main>

<footer class="footer">
  <div class="container-fluid">
    Footer
  </div>
</footer>

答案 2 :(得分:1)

  

红色边框导航应与蓝色边框内容区域的高度相同。标题应该是固定的。页脚应始终显示在浏览器窗口的底部 - 无论蓝色内容区域中有多少内容:

Flexbox可以做到这一点。

Codepen Demo

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

::before,
::after {
  box-sizing: inherit;
}

.container {
  height: 100vh;
  padding-top: 50px;
  display: flex;
  flex-direction: column;
}

header {
  height: 50px;
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  background: grey;
  color: white;
  text-align: center;
  padding: 1em;
}

.content {
  flex: 1;
  display: flex;
}

aside {
  flex: 0 0 200px;
  background: red;
  overflow-y: auto;
  padding: .5em;
}

main {
  flex: 5;
  background: blue;
  overflow-y: auto;
}

.mini-spacer {
  height: 500px;
}

.spacer {
  height: 1000px;
}

footer {
  height: 50px;
  width: 100%;
  background: grey;
  color: white;
  text-align: center;
  padding: 1em;
}
<div class="container">
  <header>HEADER</header>
  <div class="content">
    <aside>
      <div class="mini-spacer"></div>
    </aside>
    <main>
      <div class="spacer">
      </div>
    </main>
  </div>
  <footer>FOOTER</footer>

</div>