【问题标题】:Combining the look of flex-start and space-between [duplicate]结合 flex-start 和 space-between 的外观 [重复]
【发布时间】:2019-08-09 10:31:40
【问题描述】:

我有一个我想用 CSS 显示的项目列表。最初,一行中只有两个并排的项目,但现在我想让它响应更大的屏幕,所以我想让它在一行上显示 3 个项目。我的旧代码使用 justify-content:space-between 看起来像这样。显示奇数个项目看起来不错。

.flex-container-old{
  margin-top: 50px;
  background: magenta;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
}
.box-old{
  width: 40%;
  border: 1px solid black;
  margin-bottom: 20px;
  height: 300px;
  background: orange;
}

.wrapper{
  margin: 0 auto;
  width: 80%;
}

body{
background:#D3D3D3;
}
<div class="wrapper">
      <div class="flex-container-old">
          <div class="box-old">
          </div>
          <div class="box-old">
          </div>
          <div class="box-old">
          </div>
          <div class="box-old">
          </div>
          <div class="box-old">
          </div>
      </div>
  </div>

所以很自然地,我通过修改 width 属性将其扩展到一行中的三个项目,最终得到以下结果。

.flex-container-new{
  background: lightblue;
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
}
.box {
  width: 30%;
  border: 1px solid black;
  margin-bottom: 20px;
  height: 300px;
  background: orange;
}

.wrapper{
  margin: 0 auto;
  width: 80%;
}
<div class="wrapper">
    <div class="flex-container-new">
      <div class="box">
      </div>
      <div class="box">
      </div>
      <div class="box">
      </div>
      <div class="box">
      </div>
      <div class="box">
      </div>
    </div>
</div>

在上面一行包含三个项目的代码中,我的问题是我希望最后一行中的最后一个项目被推到左边,与上面一行中的中间项目对齐。可悲的是,引导程序不是一种选择。这是出于学习目的。有没有办法只用 CSS 就可以实现上述目标?非常感谢。

【问题讨论】:

    标签: html css flexbox


    【解决方案1】:

    使用CSS Grid 更容易控制,因为我们可以指定xy 轴。使用Flexbox,您只能可靠地控制x 轴。如果您还没有听说过fr 单元,那就是defined by Mozilla,如下:

    fr 是“分数”的缩写,是一个单位,表示网格容器中可用空间的一小部分。

    使用Grid 的另一个好处是我们可以删除.box 中的heightmargin-bottom 设置以及flex-wrap 规则。这个网格布局的所有内容,从单元格的高度到它们之间的grid-gap 间距,都在父级中定义。

    .grid-container-new {
      background: lightblue;
      display: grid;
      grid-template-columns: repeat(3, 1fr);
      grid-template-rows: repeat(2, 300px);
      grid-gap: 20px;
    }
    
    .box {
      border: 1px solid black;
      background: orange;
    }
    <div class="grid-container-new">
      <div class="box">
      </div>
      <div class="box">
      </div>
      <div class="box">
      </div>
      <div class="box">
      </div>
      <div class="box">
      </div>
    </div>

    jsFiddle

    【讨论】:

    • @Hi Pirsanth,如果我的回答对您有帮助,如果您能将我的回答标记为选定的答案,我将不胜感激。
    猜你喜欢
    • 2017-06-21
    • 2017-06-24
    • 2017-01-13
    • 1970-01-01
    • 2018-03-22
    • 1970-01-01
    • 2016-01-21
    • 2019-12-01
    • 2017-04-25
    相关资源
    最近更新 更多