【问题标题】:CSS Grid make the column gap identicalCSS Grid 使列间距相同
【发布时间】:2021-10-06 15:32:33
【问题描述】:

如何使项目之间的间隙/空间相同?

我尝试过grid-column-gap,但是由于每行的项目数不同,因此间隙会有所不同,其中第一行和第三行较大,第二行是理想的间隙空间。

另一种选择是将项目的宽度设置为 100% 并添加边距,但这样它们的宽度会有所不同,因为第二行上的项目会更小。

我想要实现的是:

  1. 居中 div #innerContainer 中的所有项目
  2. 使项目之间的差距相同
  3. 每一项的宽度都是一样的

#container {
  display: flex;
  align-items: center;
  justify-content: center;
}

#innerContainer {
  display: grid;
  grid-template-columns: repeat(60, 1fr);
  grid-column-gap: 9px;
  grid-row-gap: 9px;
}

.item {
  width: 90px;
  height: 90px;
  background-color: blue;
  grid-column: auto / span 15;
}

.item:nth-child(4)~.item {
  grid-column: auto / span 12
}
<div id="container">
  <div id="innerContainer">
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
  </div>
</div>

【问题讨论】:

  • 它必须在两行上还是可以只断到第三行上?含义:是否每一行都必须有自己的项目数,还是总是说每行 4 个项目?
  • 必须是三行,每行的数字是定义/固定的。第一行:4 项;第二行:5项;第三行:4 项;
  • @RodneyWeber Maibe this solution 你会帮忙吗。
  • @ЖнецЪ 感谢您的参考,但我认为这是不同的,因为他的问题是“两行中的项目数量未知”以及从左到右。在我的问题中,定义了每行上的项目数,并且它是从左到右的中心。
  • @RodneyWeber 请看看我的解决方案。它可能正是您所需要的。

标签: css


【解决方案1】:

Flexbox 现在提供gap 属性。我们可以将其与多行内容一起使用以使其工作。

您应该使用 flexbox 进行灵活调整大小。这是因为网格应该是表格的。而且它真的不想让你在空间里乱七八糟。它始终与某个栅格对齐。

它应该适用于所有主要浏览器(请参阅:https://caniuse.com/?search=gap),但您始终可以回退到使用填充代替或均匀地间隔项目并使行足够宽以使可用空间等于n * n_size + (n-1) * gap

#container {
  border: 1px dashed black;
  /* just for visuals */
  display: flex;
  align-items: center;
  justify-content: center;
}

#innerContainer {
  display: flex;
  flex-flow: column nowrap;
  gap: 10px;
}

.row {
  display: flex;
  justify-content: center;
  gap: 10px;
}

.item {
  width: 90px;
  height: 90px;
  background-color: blue;
}
<div id="container">
  <div id="innerContainer">
    <div class="row">
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
    </div>
    <div class="row">
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
    </div>
    <div class="row">
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
      <div class="item"></div>
    </div>
  </div>
</div>

【讨论】:

    【解决方案2】:

    删除 CSS 网格并使用 flexbox:

    #innerContainer {
      display: flex;
      align-items: center;
      justify-content: center;
      flex-wrap:wrap;
      gap: 4.5px 9px;
    }
    /* pseudo element will seperate your elements*/
    #innerContainer:before,
    #innerContainer:after {
      content:"";
      flex-basis:100%
    }
    #innerContainer:after {
      order:2;
    }
    /**/
    /* 4 items before the "before" */
    .item:nth-child(-n + 4) {
      order:-1;
    }
    /* 4 items after the "after" */
    .item:nth-last-child(-n + 4) {
      order:3;
    }
    
    .item {
      width: 90px;
      height: 90px;
      background-color: blue;
    }
    <div id="container">
      <div id="innerContainer">
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
      </div>
    </div>

    【讨论】:

    • 就个人而言,我不喜欢构建这些“hacky”解决方案的一般想法。你实际上做了一些语义上并不存在的事情,这取决于项目的数量。我觉得设计应该遵循语义。再说一遍,这不是你的错。如果这些是要求并且它只是&lt;div class="item"&gt; 的流,那么它仍然是一个聪明的解决方案并且它有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    相关资源
    最近更新 更多