在未知列数的情况下均衡水平列填充

时间:2015-07-16 11:14:41

标签: css css3

我正在努力解决多列设置问题。

考虑到三列的简单设置,我想调整填充,以便列之间的每个间隙具有相同的大小(2rem)。但是,棘手的部分:我希望能够为2,3,4或甚至5列使用相同的规则。

我正在使用PureCSS来创建多列设置。但是,对于这个框架的了解不应该是必要的,因为我的问题不一定与它有关。

目前有以下标记:

<div class="pure-g">
  <div class="pure-u-1-3"><div class="myblock">content col 1</div></div>
  <div class="pure-u-1-3"><div class="myblock">content col 2</div></div>
  <div class="pure-u-1-3"><div class="myblock">content col 3</div></div>
</div>

当然,每列的宽度为33.333%。为了在两者之间创造差距,我的想法是为每一列使用内包装,将内容推离两侧。

<div class="pure-g">
  <div class="pure-u-1-3 col">
    <div class="col-wrapper">
      <div class="myblock">content col 1</div>
    </div>
  </div>

  <div class="pure-u-1-3 col">
    <div class="col-wrapper">
      <div class="myblock">content col 2</div>
    </div>
  </div>

  <div class="pure-u-1-3 col">
    <div class="col-wrapper">
      <div class="myblock">content col 3</div>
    </div>
  </div>
</div>

现在我给.col-wrapper一些填充。但在这里,我无法找到适合所有列数的干净解决方案。我的想法是:

.col > .col-wrapper {
  padding-left: 1rem;
  padding-right: 1rem;
}

/* Overwrite padding for an exact left alignment */
.col:first-child > .col-wrapper {
  padding-left: 0;
}

/* Overwrite padding for an exact right alignment */
.col:first-child > .col-wrapper {
  padding-right: 0;
}

但是考虑到这个CSS,第一列和最后一列的大小总是与其余列不同,因为它们的填充量少了1个。

接下来的想法是,进一步调整它,这几乎是完美的,但它会导致第一个/最后一个和其他差距不同。

.col > .col-wrapper {
  padding-left: .67rem;
  padding-right: .67rem;
}

/* Overwrite padding for an exact left alignment */
.col:first-child > .col-wrapper {
  padding-right: 1.32rem;
  padding-left: 0;
}

/* Overwrite padding for an exact right alignment */
.col:first-child > .col-wrapper {
  padding-right: 0;
  padding-left: 1.32rem;
}

在这里,我被困住了。如何调整它以创造均匀的差距?

感谢您的帮助: - )

1 个答案:

答案 0 :(得分:1)

  

我正在使用PureCSS来创建多列设置。知识   但是,这个框架不应该是必要的,因为我的问题不是   与此有关。

您的问题与使用purecss有关,因为您限制自己从以固定百分比设置的列开始寻找解决方案。

您可以在不使用purecss的情况下轻松实现相等宽度的列,而是使用flexbox(参见示例http://codepen.io/imohkay/pen/gpard)。

 <div class="equalHMWrap eqWrap">
    <div class="equalHM eq">boo <br> boo</div>
    <div class="equalHM eq">shoo</div>
    <div class="equalHM eq">clue</div>
 </div>

CSS

.eqWrap {
    display: flex;
}
.equalHMWrap {
    justify-content: space-between;
}
.equalHM {
    width: 32%;
}

我不确定是否可以使用相同的规则对不同数量的列使用相同的规则,同时保持purecss。 left,right,first-child和last-child的填充百分比将始终根据使用的列数而变化。但您可以为每个方案计算它并添加适用的css规则。