twitter-bootstrap - 为什么 col-auto 中多列嵌套行的大小大于内容宽度?

标签 twitter-bootstrap css flexbox bootstrap-4

如果我理解正确的话,Bootstrap 中的 col-auto 类应该只使用内容的自然宽度。当我在下面的代码中使用 col-lg-auto 时,宽度变得比内容大。

我创建了这个 Codepen这说明了这个问题。

<div class="row">
  <div class="col">
    <div class="row">
      <div class="col-12 col-sm-6 col-lg-4">Col</div>
      <div class="col-12 col-sm-6 col-lg-4">Col</div>
      <div class="col-12 col-sm-6 col-lg-4">Col</div>
      <div class="col-12 col-sm-6 col-lg-4">Col</div>
      <div class="col-12 col-sm-6 col-lg-4">Col</div>
      <div class="col-12 col-sm-6 col-lg-4">Col</div>
      <div class="col-12 col-sm-6 col-lg-4">Col</div>
      <div class="col-12 col-sm-6 col-lg-4">Col</div>
      <div class="col-12 col-sm-6 col-lg-4">Col</div>
    </div>
  </div>
  <!-- Replace col-lg-auto with col-lg and add class flex-grow-0 -->
  <div class="col-12 col-lg-auto">
    <div class="row">
      <div class="col-6 col-lg-12">Content</div>
      <div class="col-6 col-lg-12">Content</div>
      <div class="col-6 col-lg-12">Content</div>
      <div class="col-6 col-lg-12">Content</div>
      <div class="col-6 col-lg-12">Content</div>
      <div class="col-6 col-lg-12">Content</div>
    </div>
  </div>
</div>

如果 col-lg-auto 中的 row 只有一个子列,那么它会按预期工作。如果我将类 col-lg-auto 替换为类 col-lgflex-grow-0,我也能够实现我想要的布局

有人能解释一下为什么在这种情况下 col-lg-auto 的宽度会变得比内容宽度大吗?我不能在具有 col-auto 类的列中使用包含多列的行吗?

最佳答案

我不认为这是一个“错误”。 col-lg-auto 中的列是全宽 col-lg-12 因此它们按预期填充 100% 宽度。如果您希望内部列占用最小宽度,请在内部行上使用 flex-lg-column (flex-direction:column)...

<div class="container-fluid">
    <div class="row">
        <div class="col">
            <div class="row">
                <div class="col-12 col-sm-6 col-lg-4">Col</div>
                <div class="col-12 col-sm-6 col-lg-4">Col</div>
                <div class="col-12 col-sm-6 col-lg-4">Col</div>
                <div class="col-12 col-sm-6 col-lg-4">Col</div>
                <div class="col-12 col-sm-6 col-lg-4">Col</div>
                <div class="col-12 col-sm-6 col-lg-4">Col</div>
                <div class="col-12 col-sm-6 col-lg-4">Col</div>
                <div class="col-12 col-sm-6 col-lg-4">Col</div>
                <div class="col-12 col-sm-6 col-lg-4">Col</div>
            </div>
        </div>
        <!-- Replace col-lg-auto with col-lg and add class flex-grow-0 -->
        <div class="col-12 col-lg-auto">
            <div class="row flex-lg-column">
                <div class="col-6 col-lg-12 bg-blue">Content</div>
                <div class="col-6 col-lg-12 bg-blue">Content</div>
                <div class="col-6 col-lg-12 bg-blue">Content</div>
                <div class="col-6 col-lg-12 bg-blue">Content</div>
                <div class="col-6 col-lg-12 bg-blue">Content</div>
                <div class="col-6 col-lg-12 bg-blue">Content</div>
            </div>
        </div>
    </div>
</div>

演示:https://www.codeply.com/go/l5kv3hu9Av

注意:对于 IE 11,您需要添加:

/* IE 11 helper */
.flex-lg-column > .col-lg-12 {
    flex: 1 1 auto;
}

关于twitter-bootstrap - 为什么 col-auto 中多列嵌套行的大小大于内容宽度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52625578/

相关文章:

javascript - 谷歌地图在 Bootstrap 选项卡式界面中丢失了经度/纬度

jquery - Bootstrap CSS 格式不正确

javascript - Twitter Bootstrap 崩溃了,但首先

HTML 宽表应该滚动,窄表应该拉伸(stretch)以填充父级

javascript - 如何防止一个元素的子元素位于另一个元素之上

html - Flexbox 图像缩放到高度并保持纵横比

html - 将 flexbox 与绝对位置子项一起使用?

javascript - 带下拉菜单的菜单按钮

html - 在子菜单上使用滚动条时如何显示子菜单?

html - 将图像与 flex 容器中的文本对齐