使用 Bourbon Neat 删除跨度列上的边距

Posted

技术标签:

【中文标题】使用 Bourbon Neat 删除跨度列上的边距【英文标题】:Remove margin on span columns with Bourbon Neat 【发布时间】:2014-09-14 22:50:13 【问题描述】:

我开始将 Thoughtbot 的 Bourbon Neat 用于响应式网格。总的来说,它很漂亮,我真的很喜欢它,但我被一个小问题挂断了。

我试图让两列在没有边距的情况下彼此相邻,但在尝试复制他们的示例后,我没有得到相同的结果。

这是示例 html

<section>
    <p>
        This is the main section.
    </p>

    <div class="container">
        <p>
            This is the container
        </p>

        <div class="col1">
            <p>
                This is the 1st column.
            </p>
        </div>

        <div class="col2">
            <p>
                This is the 2nd column.
            </p>
        </div>

    </div>
</section>

这是我的 SCSS:

section 
@include outer-container;
text-align: center;


.container 
@include span-columns (12);
text-align: center;
margin: 0;
padding: 0;


.col1 
    @include span-columns(6);
    background: #ccc;
    @include pad(em(15));

.col2 
    @include span-columns(6);
    background: #ccc;
    @include pad(em(15));
 


产生这个:

但是当我尝试使用表格方法让两列相互嵌套/对接时,如他们的示例所示,我得到了:

SCSS:

section 
@include outer-container;
text-align: center;


.container 
@include span-columns (12);
@include row (table);
text-align: center;
margin: 0;
padding: 0;


.col1 
    @include span-columns(6);
    background: #ccc;
    @include pad(em(15));

.col2 
    @include span-columns(6);
    background: #ccc;
    @include pad(em(15));
    @include reset-display;
 


输出:

如果我走@include omega(); 可行的路线,但它不会扩大最后一列的整个宽度:

SCSS:

section 
@include outer-container;
text-align: center;


.container 
@include span-columns (12);
text-align: center;
margin: 0;
padding: 0;


.col1 
    @include span-columns(6);
    @include omega();
    background: #ccc;
    @include pad(em(15));

.col2 
    @include span-columns(6);
    background: #ccc;
    @include pad(em(15));
    @include omega();
 


输出:

基本上,我可以省略容器部分中的内容,这些内容会产生我正在寻找的结果。但是有必要创建一个空的div 来实现吗?:

SCSS

section 
@include outer-container;
text-align: center;


.container 
@include span-columns (12);
@include row(table);
text-align: center;
margin: 0;
padding: 0;


.col1 
    @include span-columns(6);
    background: #ccc;
    @include pad(em(15));

.col2 
    @include span-columns(6);
    background: #ccc;
    @include pad(em(15));
    @include reset-display
 


HTML(.container 中的内容已被注释掉):

<section>
    <p>
        This is the main section.
    </p>

    <div class="container">
        <!-- <p>
            This is the container
        </p> -->

        <div class="col1">
            <p>
                This is the 1st column.
            </p>
        </div>

        <div class="col2">
            <p>
                This is the 2nd column.
            </p>
        </div>

    </div>
</section>

输出:

无论如何,我不知道实现这一目标的“正确”方式是什么。该文档并没有真正具体解释如何让两列相互嵌套。从我试图在他们的示例中复制的内容来看,并没有产生相同的结果。

除非我需要在最后一列专门添加margin:0;

【问题讨论】:

【参考方案1】:

您可以执行 @include span-columns(6 of 12,block-collapse) 之类的操作

【讨论】:

那行不通。最后一项的覆盖宽度与其他项的宽度不匹配。并且一行的所有项目的总宽度超过 100%。【参考方案2】:

您不是只是将您的p 与内容“这是容器”错误地放置在一起,因此它不小心被用作表格单元格,但您实际上希望它位于容器上方?

把它放在.container 上面就可以了:

<section>
  <p>
    This is the main section.
  </p>
  <p>
    This is the container
  </p>
  <div class="container">
    <div class="col1">
      <p>
        This is the 1st column.
      </p>
    </div>

    <div class="col2">
      <p>
        This is the 2nd column.
      </p>
    </div>

  </div>
</section>

文字:

section 
  @include outer-container;
  text-align: center;


.container 
  @include fill-parent;
  @include row(table);

  .col1 
    @include span-columns(6);
    background: #ccc;
    @include pad(em(15));
  
  .col2 
    @include span-columns(6);
    background: #ccc;
    @include pad(em(15));
  

输出:

【讨论】:

【参考方案3】:

您可以将每个容器的 span-columns() 设置为每个网格的一半以下,然后将您从每个容器中获取的剩余值移动并 shift() 每个容器远离左/右侧,如下所示:

html:

<div id="wrapper">
    <div id="1"></div>
    <div id="2"></div>
</div>

sass/sccs:

#wrapper

    #1
    
        @include span-columns(5);
        @shift(1);
    
    #2
    
        @span-columns(5);
        @shift(-1);
    



或者可以使用direction-context mixin来切换#2的方向...

sass/sccs:

#wrapper

    #1
    
        @include include span-columns(5);
        @include shift(1);
    

        @include direction-context(right-to-left)
        
            #2
            
                @include span-columns(5);
                @include shift(-1);
            
        


我不确定我是否 100% 关注你的问题,但如果你的意思是你不能让左 div 的 RIGHT 侧直接在中间接触右 div 的 LEFT 侧,那么我相信这两种解决方案会如果你和他们一起玩一会儿就工作..

让我知道它是如何工作的~gl!

【讨论】:

那么这个答案是否解决了问题中描述的问题?从您的回答看来,您似乎没有理解所提出的问题。

以上是关于使用 Bourbon Neat 删除跨度列上的边距的主要内容,如果未能解决你的问题,请参考以下文章

scss 重置列mixin ...与Bourbon Neat结合使用,特别是与span-columns一起使用,以使列无需动态更改

第一个跨度的边距顶部不起作用[重复]

创建反应应用程序(不弹出)+波旁威士忌/整洁?

导入 scss 文件中 ~ 的含义

使用边距设置跨度之间的距离

每列上都有flexbox和空白的结构