【问题标题】:No space between columns using the Flex Box Grid system使用 Flex Box Grid 系统的列之间没有空间
【发布时间】:2019-03-15 15:27:41
【问题描述】:

使用Flex Box Grid system。删除两个 50% 宽度列之间的间距的正确方法是什么?

是否有可用的标准类?我在官方网站上找不到。

<div class="container">
    <div class="row">
        <div class="col-md-6">
            col 1
        </div>
        <div class="col-md-6">
            col 2
        </div>
    </div>
</div>

【问题讨论】:

    标签: html css twitter-bootstrap flexbox


    【解决方案1】:

    我没有使用过这个网格系统,但是通过检查浏览器开发工具中的元素可以看出,元素之间的空间是使用 padding-right 和 padding-left 属性创建的。您可以尝试为嵌套元素添加另一个类名,并为该类编写覆盖 padding-right 和 padding-left 的规则。

    css 看起来像这样。您的选择器应该比 Flex Box Grid System 应用的选择器具有更高的特异性。如果您需要了解特异性,这里有一个很好的指南:https://stuffandnonsense.co.uk/archives/css_specificity_wars.html

    .container .row .noPadding {
        padding-right: 0;
        padding-left: 0;
    }
    

    html 看起来像这样:

    <div class="container">
        <div class="row">
            <div class="noPadding col-md-6">
                col 1
            </div>
            <div class="noPadding col-md-6">
                col 2
            </div>
        </div>
    </div>
    

    或者,您可以避免将 Flex Box Grid System 中的类应用于您不希望间隔的两个元素,而只需使用 css 规范的 flex 属性。这是 css flex 的简明指南:https://css-tricks.com/snippets/css/a-guide-to-flexbox/

    【讨论】:

      【解决方案2】:

      两种选择:

      1) 如果需要全局移除行列间距(gutters)

      您可以直接更改 flexboxgrid.css 中的 :root 变量或在您的自定义 css 文件中覆盖它们。

      :root {
          --gutter-compensation: 0; // remove negative margins for row
          --half-gutter-width: 0; // remove padding from columns
      }
      

      2) 如果您只需要删除特定部分的间距,您可以使用实用程序类

      借用 Bootstrap 的概念,您可以添加一个类,从 .row 中删除负边距并从 .col-* 中删除填充,

      .no-gutters {
        margin-right: 0;
        margin-left: 0;
      
        > [class*="col-"] {
          padding-right: 0;
          padding-left: 0;
        }
      }
      

      然后添加.no-gutters 类和.row

      <div class="container">
          <div class="row no-gutters">
              <div class="col-md-6">
                  col 1
              </div>
              <div class="col-md-6">
                  col 2
              </div>
          </div>
      </div>
      

      【讨论】:

      • 我最喜欢第二个选项。使用实用程序类使其非常灵活。也很高兴知道还有一个 :root 变量,以防所有间距都可以删除。
      【解决方案3】:

      一种方法是在row div 中使用child-no-padding 类:

      .child-no-padding>div {
        padding: 0 !important;
      }
      

      通过这种方式,您可以防止在子元素中重复 no-padding 类名。

      示例:

      .child-no-padding>div {
        padding: 0 !important;
      }
      
      .col-2{
          background: #00fff5; border: 1px solid #6cccca; text-align:center; font-size:.8em; color:white;
      }
      <div class="container">
        <div class="row child-no-padding">
          <div class="col-2">
            col 1
          </div>
          <div class="col-2">
            col 2
          </div>
          <div class="col-2">
            col 3
          </div>
          <div class="col-2">
            col 4
          </div>
          <div class="col-2">
            col 5
          </div>
          <div class="col-2">
            col 6
          </div>
        </div>
      </div>
      
      <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

      【讨论】:

      • 为什么在这里使用 !important?我喜欢避免这种说法,因为它太激进了。完全把css的层叠效果抛到了窗外。
      • @Floris。我只是想确保你项目中的其他类我不知道它们不会对你项目中的这个实现产生任何副作用,但是如果你看到代码在你的项目中没有它也能正常工作,那就没有必要了。
      猜你喜欢
      • 1970-01-01
      • 2018-03-16
      • 2020-06-12
      • 2018-05-15
      • 2019-08-29
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 2015-01-04
      相关资源
      最近更新 更多