【问题标题】:BootStrap 3 container inside container-fluid容器流体内的 BootStrap 3 容器
【发布时间】:2014-07-15 08:49:59
【问题描述】:

下面是我正在使用 BootStrap3 进行的布局。我在http://jsfiddle.net/s7Rwj/4

为这个问题设置了有限布局的示例

我很难设置我的标题。我使用的是容器流体宽度,所以我的 Header 的宽度是 100%,但是问题是在 header 内的三个元素中,一个应该留在左边,其余两个应该分别匹配下面“容器”的左右。

到目前为止,我已经尝试了各种布局,但下面是唯一一个接近我正在寻找的布局。

    <header class="container-fluid navbar-fixed-top">
        <div class="row">
            <div class="col-xs-12" style="background-color:aliceblue">                    
                <div class="container">
                    <div class="row">
                        <div class="col-xs-6" style="background-color:violet">2</div>
                        <div class="col-xs-6 pull-right" style="background-color: lightblue">3</div>
                    </div>
                </div>
                <span style="position:absolute;top:0;left:0">
                    A quick brown fox jumps over the lazy dog.
                </span>
            </div>
        </div>
    </header>

然而,这种布局的挑战在于,由于跨度在重新调整浏览器大小时使用绝对位置,因此文本与标题内的第二个元素重叠。我已经尝试为其提供显式宽度,但没有帮助。

如果我不使用绝对位置,则跨度和其余项目将呈现在两个不同的行中。

我正在寻找有关如何设置此标头的建议。

PS:我在 div 标签中添加了随机背景颜色,以了解它们在哪里呈现。随意忽略它们。

【问题讨论】:

    标签: html css twitter-bootstrap-3


    【解决方案1】:

    我相信嵌套容器非常好。只要去掉.container-fluid里面的.container上的padding(.container-fluid .container {padding: 0;}),那还有什么不好的呢?

    【讨论】:

    • 实际上引导文档明确声明不要这样做,因为它们有填充。
    【解决方案2】:

    我实际上认为使用嵌套在容器流体中的 Bootstrap 容器没有问题。我最近在使用页面构建器构建的主题中做到了这一点。这允许客户使用页面构建器轻松构建具有不同固定和全宽行的页面。

    只需在样式表中添加这样的内容:

    .container-fluid .container {
        padding-left:0;
        padding-right:0;
    }
    

    也就是说,我认为您可以通过在 container-fluid 的第一列中添加一些 padding-top 来解决您正在尝试的问题。要使其特定于移动设备,请在媒体查询中文本开始重叠的断点处添加该填充。这不是最漂亮的方法,但考虑到您要完成的工作,这就是我将采用的方法。

    <header class="container-fluid navbar-fixed-top">
        <div class="row">
            <div class="col-xs-12" style="background-color:aliceblue; padding-top:30px;">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-6" style="background-color:violet">2</div>
                        <div class="col-xs-6" style="background-color: lightblue">3</div>
                    </div>
                </div> 
                <span style="position:absolute;top:0;left:0">
                            Some text
                </span>
            </div>
        </div>
    </header>
    

    链接:http://jsfiddle.net/udLbLwh6/

    【讨论】:

    • 你不应该嵌套容器类。
    • @TeeJay ...除了填充问题(在我的解决方案中很容易解决),嵌套容器有什么危害?实际上,我发现它在具有不同固定和全宽内容的布局中非常实用。
    • 我不同意。 Bootstrap 或任何其他框架只是一个工具。而已。这是一个工具,只是一个起点,可以而且应该适应项目的需要。断言它通过添加一个 CSS 规则来扩展 Bootstrap 的功能以某种方式打破了一些基本的、牢不可破的规则是非常荒谬的。这就是它的用途。定制和修改以满足您的需求。如果您对在同一页面上实现可变全宽和固定宽度布局的方法有更好的建议,我当然很想听听。
    • 我同意@TeeJay。 Documentation clearly says,容器不可嵌套。所以原理不是虚构的。
    • 如果它是由 Bootstrap 创建者建立的规则,并且如此基本以至于否则会严重有害,您如何解释 Bootstrap 创建者提供a solution to nesting containers in the official repo 的事实?您正在围绕可以做和不能做的事情建造一堵墙,除了有人说它只是不推荐,而不是说它不可能。需要替代品,有时是必要的。这可能就是为什么在 bootstrap repo 中提供了解决方案,也是我在这里提供解决方案的原因。
    【解决方案3】:

    我认为您正在寻找没有困难的地方。

    您应该避免嵌套容器(.container 和 .container-fluid),因为它们由于填充等原因而无法嵌套...look at Bootstrap 3 Containers overview

    此外,当您嵌套列时,您需要做的就是将新行放入其中一列,然后将嵌套列直接放入其中。 See Bootstrap 3 Grid system - nesting columns,这是他们的例子:

    <div class="row">
      <div class="col-sm-9">
        Level 1: .col-sm-9
        <div class="row">
          <div class="col-xs-8 col-sm-6">
            Level 2: .col-xs-8 .col-sm-6
          </div>
          <div class="col-xs-4 col-sm-6">
            Level 2: .col-xs-4 .col-sm-6
          </div>
        </div>
      </div>
    </div>
    

    您正在寻找的布局解决方案非常简单。您不一定需要在标题中使用 container-fluid。只需为 carousel 上方的中心部分创建一个容器,并将其包装到 .wrap 或任何其他您可以设置宽度为 100% 的类中。此外,您可以添加一些容器流体具有的填充。

    <header class="wrap navbar-fixed-top">
        <div class="container">
            <div class="row">
                <div class="col-xs-6" style="background-color: violet;">2</div>
                <div class="col-xs-6 pull-right" style="background-color: lightblue;">3</div>
            </div>
            <span style="position:absolute;top:0;left:0">
                A quick brown fox jumps over the lazy dog.
            </span>
        </div>
    </header>
    

    在你的 CSS(我推荐 style.less)的某个地方,你可以将 .wrap 设置为 100% 的宽度,尽管它应该是每个没有样式的 div 的默认宽度。

    .wrap {
        width: 100%;
    }
    

    我知道这个问题有点老了,但没关系。希望我正确理解了您的问题。

    【讨论】:

    • 这不适用于 Bootstrap 4。根据文档:“虽然容器可以嵌套,但大多数布局不需要嵌套容器......”。所以容器可以嵌套。
    • 这是一个关于 Bootstrap 3 的话题。
    • 您永远不必在任何东西中嵌套容器。容器中的列用作任何进一步嵌套的行/列的容器。
    猜你喜欢
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 2016-08-30
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-23
    相关资源
    最近更新 更多