【问题标题】:SASS grid system outer paddingSASS 网格系统外填充
【发布时间】:2014-06-04 06:44:49
【问题描述】:

我在 SASS 中做了这个自己的流体网格系统,但是有一个问题。

我已将padding-leftpadding-right 都设置为20px,即装订线宽度(每列之间的间距)。

这一切都很好,但是row 中的第一个和最后一个column 也在外侧设置了padding。我想防止这种情况发生,但我不知道我必须为此进行什么计算。

网格目前看起来是这样的:(红色间距是我要删除的)

系统代码如下:

@import "../../mixins/cross-browser-elements/_box";

$column-count: 12 !default;
$gutter-width-px: 20px !default;
    
@function calculate-column-width($index) {
  @if ($index > 0) {
    @return percentage($index / $column-count);
  }
}

.row {
  overflow: hidden;
  max-width: 100%;
  margin-bottom: 20px;

  > .column {
    float: left;
    min-height: 1px;
    padding-left: ($gutter-width-px / 2);
    padding-right: ($gutter-width-px / 2);
    @include box-sizing(border-box);


    @for $index from 1 through $column-count {
      &.size-#{$index} {
        width: calculate-column-width($index);
      }
    }
  }

}

我尝试的只是添加了这段代码:

&:first-child {
  padding-left: 0;
}

&:last-child {
  padding-right: 0;
}

这段代码下

> .column {
    ......

但这只是使该行中的第一列和最后一列在左侧和右侧更大一些。

【问题讨论】:

    标签: html css sass


    【解决方案1】:

    为什么不在“.row”的左右两边加上20px的负边距?

    .row {
      margin: 0 -20px 20px;
      ...
    }
    

    【讨论】:

    • 谢谢 :) 但是为什么这不起作用:margin: 0 -$variablename 20px 它的输出是错误的,而我将 $variablename 变量设置为 px 中的正确数字
    • 如果你想使用前面有减号的变量你需要这样写:-#{$variablename}
    • 嗯,好的,谢谢,那就是:margin: 0 -#{$variablename} 20px;?
    【解决方案2】:

    您可以将这些额外的行添加到您的 mixin 中:

       ...
        @for $index from 1 through $column-count {
              &.size-#{$index} {
                width: calculate-column-width($index);
    
                &:nth-child(#{$column-count}n) { // Clear every last item padding-right
                  padding-right: 0;
                }
    
                &:nth-child(1) { // Clear every first item padding-left
                  padding-left: 0;
                }
              }
            }
    ...
    

    一个例子:http://sassmeister.com/gist/da6c1a341d289b4f3b67

    【讨论】:

    • 但这为每个列项提供了不同的width。所以这和我的代码结果是一样的吗?
    • @Dreiba 嗯,很奇怪,有些盒子是 67 像素,有些是 66 像素,让我们检查一下吧 :)
    • 由于某种原因,每 3 个框都大 1 像素。但是当我在其他网格系统上检查它时,它是一样的
    • @Dreiba 我设置了一个 max-width: 800 (800/12 = 66.6) 如果您将 max-width 更改为 900px 其中 900/12 = 75 一个整数然后每个框都相等@ 987654322@
    • 但我不想要一个“固定”的布局 xd。我想要的是摆脱边缘柱外侧的间距