如何使用 Bootstrap 4 flexbox 填充可用内容?

新手上路,请多包涵

我有一个使用 bootstrap 4 的 Angular 应用程序。我有一个固定在顶部的导航栏,我想添加填充浏览器剩余空间的内容。除了顶部的导航栏,我还有另一个 div,它本身包含页眉和页脚内容。在页眉和页脚之间,我有一个主要内容部分,我希望该部分(在下面的示例中为 #two )填充所有空白空间。

我以为我可以使用 css flexbox 来完成此任务,但是当我进入 bootstrap 世界时,我简单的非引导 flexbox 示例似乎什么也没做。我正在使用 这些文档 来尝试解决这个问题。

我认为使用 align-self-stretch 应该有助于实现这个目标,但看起来包含元素的大小可能刚好足以容纳我的 #outer 内容,所以没有弹性框扩展到做完了。我天真地尝试只是将 height:100% 样式添加到包含的 div 中,只是为了尝试进行一些拉伸,但这似乎没有帮助。

我根据@ZimSystem 的响应创建了这个 plunker 示例。他的 codeply 示例似乎完全按照我的意愿工作,但是当我尝试将更改拼凑到我的简单角度代码中时,flex 拉伸没有发生。我不确定我在做什么来打破它。

在此处输入图像描述

这是我目前正在查看的整个角度分量:

 <div id="outer" class="d-flex flex-column flex-grow">
    <div id="one" class="">
        header content <br>
        another line <br>
        And another
    </div>
    <div id="two" class="bg-info h-100 flex-grow">
        main content that I want to expand to cover remaining available height
    </div>
    <div id="three" class="">
        footer content
    </div>
</div>

这是显示导航栏和注入点的应用程序容器:

 <div class="d-flex flex-column h-100">
    <nav class="navbar navbar-toggleable-md sticky-top bg-faded">
        <a class="navbar-brand" href="#">
            <h1 class="navbar-brand mb-0">My App</h1>
        </a>
        <ul class="navbar-nav">
            <li class="nav-item"><a class="nav-link" routerLink="/flex">My flex view</a></li>
        </ul>
    </nav>
    <router-outlet></router-outlet>
</div>

如何让我的 #two div 扩展以填充空间,同时让我的 #one#three div 充当顶部和底部的内容页眉和页脚内容区?

原文由 Chris Farmer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 489
2 个回答

更新引导程序 4.1.0

flex-grow-1flex-fill 类包含在 Bootstrap 4.1.0 中

更新引导程序 4.0.0

添加一个 flex-grow 类,如下所示:

 .flex-grow {
    flex: 1 0 auto;
}

然后, 实用程序类 可用于布局的其余部分:

  <div class="d-flex flex-column h-100">
    <nav class="navbar navbar-toggleable-md sticky-top bg-faded">
        <a class="navbar-brand" href="#">
            <h1 class="navbar-brand mb-0">My App</h1>
        </a>
        <ul class="navbar-nav">
            <li class="nav-item"><a class="nav-link">Item 1</a></li>
        </ul>
    </nav>
    <div id="outer" class="d-flex flex-column flex-grow">
        <div id="one" class="">
            header content
            <br> another line
            <br> And another
        </div>
        <div id="two" class="bg-info h-100 flex-grow">
            main content that I want to expand to cover remaining available height
        </div>
        <div id="three" class="">
            footer content 40px height
        </div>
    </div>
</div>

https://www.codeply.com/go/3ZDkRAghGU

这是 Bootstrap 4.3.1 上的另一个示例,该示例具有导航栏、侧边栏和带有滚动内容区域的页脚: https ://www.codeply.com/go/LIaOWljJm8

原文由 Zim 发布,翻译遵循 CC BY-SA 4.0 许可协议

您的组件被包装到一个 <flex> 元素中,该元素也需要相同的 flexbox 样式来垂直拉伸,从而允许其内容随之拉伸。因此,将 class="d-flex flex-column flex-grow" 添加到 <flex> 将起作用。这是 你的 plunker example 的工作分支。

原文由 Tigran Petrossian 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题