【问题标题】:A flexbox grid with three (3) rows and four (4) columns具有三 (3) 行和四 (4) 列的 flexbox 网格
【发布时间】:2018-01-04 21:09:54
【问题描述】:

我有一个 div,我有 12 个项目使用 flex 在中心对齐。

但我只想在一行中有 4 个项目,所以我想要 3 行 4 列。

这可以用 flex 做吗?你知道该怎么做吗?

我正在尝试这样做:https://jsfiddle.net/18mzsqcx/1/,但它不起作用。

或者最好只创建一个 div,例如 .col4,宽度等于 25% 和一些边距,然后将此类 .col4 放在每个项目中?

*,
*:after,
*:before {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  -moz-box-sizing: border-box;
  -webkit-box-sizing: border-box;
}

.container {
  float: left;
  width: 100%;
  background-color: red;
}

.content {
  width: 94%;
  margin: 0px auto;
  background-color: yellow;
  padding: 30px;
}

.categories {
  display: flex;
  justify-content: space-between;
  background-color: blue;
}

.categories_item a {
  color: green;
}

.categories_item {
  flex-grow: 1;
}
<div class="container">
  <div class="div content">


    <div class="categories">
      <div class="categories_item">
        <a href="" class="">
          <span>Item</span>
        </a>
      </div>

      <div class="categories_item">
        <a href="" class="">
          <span>Item</span>
        </a>
      </div>

      <div class="categories_item">
        <a href="" class="">
          <span>Item</span>
        </a>
      </div>

      <div class="categories_item">
        <a href="" class="">
          <span>Item</span>
        </a>
      </div>

      <div class="categories_item">
        <a href="" class="">
          <span>Item</span>
        </a>
      </div>

      <div class="categories_item">
        <a href="" class="">
          <span>Item</span>
        </a>
      </div>

      <div class="categories_item">
        <a href="" class="">
          <span>Item</span>
        </a>
      </div>
      <div class="categories_item">
        <a href="" class="">
          <span>Item</span>
        </a>
      </div>

      <div class="categories_item">
        <a href="" class="">
          <span>Item</span>
        </a>
      </div>

      <div class="categories_item">
        <a href="" class="">
          <span>Item</span>
        </a>
      </div>

      <div class="categories_item">
        <a href="" class="">
          <span>Item</span>
        </a>
      </div>

      <div class="categories_item">
        <a href="" class="">
          <span>Item</span>
        </a>
      </div>

    </div>
  </div>
</div>

【问题讨论】:

标签: html css flexbox


【解决方案1】:

Flex-grid 让网格变得非常简单。

HTML

<div class="flex-grid">
  <div class="flex-col"></div>
  <div class="flex-col"></div>
  <div class="flex-col"></div>
  <div class="flex-col"></div>
</div>

CSS

.flex-grid {
  display: flex;
}
.flex-col {
  flex: 1;
}

https://jsfiddle.net/wh03p4s5/

【讨论】:

    【解决方案2】:

    默认情况下,弹性容器设置为flex-wrap: nowrap。这意味着弹性项目将无法换行。

    因此,您应该做的第一件事是将flex-wrap: wrap 添加到您的容器中。

    .categories {
      display: flex;
      justify-content: space-between;
      flex-wrap: wrap;  /* NEW */
    }
    

    然后,定义您的弹性项目,以便一行只能容纳四个。

    而不是这个:

    .categories_item { flex-grow: 1; }
    

    试试这个:

    .categories_item { flex: 1 0 20%; margin: 5px; }
    

    revised demo

    *,
    *:after,
    *:before {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    
    .container {
      float: left;
      width: 100%;
      background-color: red;
    }
    
    .content {
      width: 94%;
      margin: 0px auto;
      background-color: yellow;
      padding: 30px;
    }
    
    .categories {
      display: flex;
      justify-content: space-between;
      flex-wrap: wrap;                /* NEW */
    }
    
    .categories_item a {
      color: white;
    }
    
    .categories_item {
      flex: 1 0 20%;                 /* NEW */
      margin: 5px;                   /* NEW */
      background-color: blue;
    }
    <div class="container">
      <div class="div content">
        <div class="categories">
          <div class="categories_item">
            <a href="" class="">
              <span>Item</span>
            </a>
          </div>
          <div class="categories_item">
            <a href="" class="">
              <span>Item</span>
            </a>
          </div>
          <div class="categories_item">
            <a href="" class="">
              <span>Item</span>
            </a>
          </div>
          <div class="categories_item">
            <a href="" class="">
              <span>Item</span>
            </a>
          </div>
          <div class="categories_item">
            <a href="" class="">
              <span>Item</span>
            </a>
          </div>
          <div class="categories_item">
            <a href="" class="">
              <span>Item</span>
            </a>
          </div>
          <div class="categories_item">
            <a href="" class="">
              <span>Item</span>
            </a>
          </div>
          <div class="categories_item">
            <a href="" class="">
              <span>Item</span>
            </a>
          </div>
          <div class="categories_item">
            <a href="" class="">
              <span>Item</span>
            </a>
          </div>
          <div class="categories_item">
            <a href="" class="">
              <span>Item</span>
            </a>
          </div>
          <div class="categories_item">
            <a href="" class="">
              <span>Item</span>
            </a>
          </div>
          <div class="categories_item">
            <a href="" class="">
              <span>Item</span>
            </a>
          </div>
        </div>
      </div>
    </div>

    【讨论】:

    • 感谢您的回答,它有效。那么使用网格就不需要使用这种方法了吧?
    • 在这种情况下,由于您知道每个 flex item 的大小,因此您不需要使用 CSS Grid。 Flexbox 可以很好地处理这个问题。
    • 再次感谢。是的,但例如在 css 网格中,我们也知道每个项目的大小,也就是说,至少我们知道我们想要拥有的百分比。所以我不太明白为什么网格真的很有必要。
    • 这里的解释可能对你有所帮助:stackoverflow.com/q/44377343/3597276
    • 很容易错过。很好的答案,flex-grow 替换也很好。谢谢!
    【解决方案3】:

    这样就可以了,将三个元素保留在一个 div 中,因此 12 个项目将有 4 个 div

    .container {
      float: left;
      width: 100%;
      background-color: red;
    }
    
    .content {
      width: 94%;
      margin: 0px auto;
      background-color: yellow;
      padding: 30px;
    }
    
    .categories {
      display: flex;
      justify-content: space-between;
      background-color: blue;
    }
    
    .categories_item a {
      color: green;
    }
    
    .categories_item {
      flex-grow: 1;
    }
    <div class="container">
      <div class="div content">
    
    
        <div class="categories">
          <div id="row">
    
            <div class="categories_item">
              <a href="" class="">
                <span>Item</span>
              </a>
            </div>
    
            <div class="categories_item">
              <a href="" class="">
                <span>Item</span>
              </a>
            </div>
    
            <div class="categories_item">
              <a href="" class="">
                <span>Item</span>
              </a>
            </div>
    
    
            <div class="categories_item">
              <a href="" class="">
                <span>Item</span>
              </a>
            </div>
          </div>
          <div id="row">
            <div class="categories_item">
              <a href="" class="">
                <span>Item</span>
              </a>
            </div>
    
            <div class="categories_item">
              <a href="" class="">
                <span>Item</span>
              </a>
            </div>
    
    
            <div class="categories_item">
              <a href="" class="">
                <span>Item</span>
              </a>
            </div>
            <div class="categories_item">
              <a href="" class="">
                <span>Item</span>
              </a>
            </div>
          </div>
          <div id="row">
            <div class="categories_item">
              <a href="" class="">
                <span>Item</span>
              </a>
            </div>
    
            <div class="categories_item">
              <a href="" class="">
                <span>Item</span>
              </a>
            </div>
    
            <div class="categories_item">
              <a href="" class="">
                <span>Item</span>
              </a>
            </div>
    
            <div class="categories_item">
              <a href="" class="">
                <span>Item</span>
              </a>
            </div>
          </div>
    
        </div>
      </div>
    </div>

    【讨论】:

      猜你喜欢
      • 2021-01-09
      • 2017-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-13
      • 2020-04-21
      相关资源
      最近更新 更多