【问题标题】:why bootstrap's container class has padding while row class has negative margins to compensate the padding为什么引导容器类有填充,而行类有负边距来补偿填充
【发布时间】:2021-07-16 21:25:08
【问题描述】:

Bootstrap 的 container 类在两边都有填充:

.container-fixed(@gutter: @grid-gutter-width) {
  padding-left:  (@gutter / 2);
  padding-right: (@gutter / 2);
}

row 类有否定的margins

.make-row(@gutter: @grid-gutter-width) {
  margin-left:  (@gutter / -2);
  margin-right: (@gutter / -2);
}

所以当我们这样放置 html 时:

<div class="container">
  <div class="row">
    ...
  </div>
</div>

row 类中的内容占用了容器从左到右的所有空间,使用否定的margins 抵消了padding。我想知道为什么使用这种方法?我还看到它被用于导航栏,特别是 navbar-right 类有负边距。

【问题讨论】:

  • 这与填充无关 - 它们彼此相等并相互抵消。不知道为什么要使用它。
  • 是的,对,相互抵消。我改写了。然而问题是他们为什么这样做?
  • Bootstrap 3 - Why is row class is wider than its container? 的可能副本另外,这篇文章解释了更多helloerik.com/…
  • 非常感谢!让我读一下,也许我会考虑结束这个问题。

标签: twitter-bootstrap twitter-bootstrap-3


【解决方案1】:

将列放在 .row 中会偏移填充,这样您就可以嵌套列。嵌套列对于控制某些(大多数)布局很重要。由于列具有内置填充,如果您嵌套它们而不偏移它,则填充将成倍增加,并且列内容不会像您想要的那样排列。看这个例子:

http://www.bootply.com/ZZ4ML0yjSG

<div class="container">
  <h3>Without .row buffer</h3>
  <div class="col-md-12 bg-warning">Column 1
    <div class="col-md-12 bg-danger">
      <div class="col-md-6 bg-info">Nested column 1 without .row buffer</div>
      <div class="col-md-6 bg-success">Nested column 2 without .row buffer</div>
    </div>
  </div>
</div>
<hr>
<div class="container">
  <h3>With .row buffer</h3>
  <div class="row">
    <div class="col-md-12 bg-warning">Column 1
      <div class="row">
      <div class="col-md-12 bg-danger">
        <div class="row">
          <div class="col-md-6 bg-info">Nested column 1 with .row buffer</div>
          <div class="col-md-6 bg-success">Nested column 2 with .row buffer</div>
        </div>
      </div>
  </div>
</div>

【讨论】:

    【解决方案2】:

    .container 具有填充以适应 .row 的负边距,而 .row 具有负边距,因为 col-*(列)工作。由于列使用填充来创建间距(列之间的空间),因此行的负边距消除了填充对最外层列的影响。

    没有负边距,外侧会多出 15 px,如您在此处所见。

    https://codeply.com/p/1bLNZAjk8D

    【讨论】:

    • 谢谢。但是如果我将padding: 0; 设置为container 则一切正常。
    • 我猜article Dan 提到了这一点 - 容器上的填充和行上的负边距是启用列内行嵌套所必需的。
    • 如果在您的示例中我将 &lt;div class="col-lg-12"&gt;&lt;div class="well"&gt;&lt;p&gt;12 wide&lt;/p&gt;&lt;/div&gt;&lt;/div&gt; 替换为 &lt;div class="col-lg-12"&gt;&lt;div class="row"&gt;&lt;div class="col-lg-8"&gt;&lt;div class="well"&gt;&lt;p&gt;8 wide contains double gutter on the right&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt; 我可以看到右侧的双槽。
    猜你喜欢
    • 2015-05-01
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2016-03-24
    • 2015-08-06
    • 2018-01-20
    • 1970-01-01
    相关资源
    最近更新 更多